knex/lib/dialects/postgres/schema/columncompiler.js
Dustin Martin d9ac2c1f8f Add status method
Returns 0 if all migrations are run and DB is up to date. Return negative number if DB is missing migrations. Return positive number if DB is ahead (rare case, e.g. if migrations were run then code is reverted)
2015-11-23 10:50:19 -06:00

73 lines
2.0 KiB
JavaScript

// PostgreSQL Column Compiler
// -------
'use strict';
var inherits = require('inherits');
var ColumnCompiler = require('../../../schema/columncompiler');
var assign = require('lodash/object/assign');
var helpers = require('../../../helpers');
function ColumnCompiler_PG() {
ColumnCompiler.apply(this, arguments);
this.modifiers = ['nullable', 'defaultTo', 'comment'];
}
inherits(ColumnCompiler_PG, ColumnCompiler);
assign(ColumnCompiler_PG.prototype, {
// Types
// ------
bigincrements: 'bigserial primary key',
bigint: 'bigint',
binary: 'bytea',
bit: function bit(column) {
return column.length !== false ? 'bit(' + column.length + ')' : 'bit';
},
bool: 'boolean',
// Create the column definition for an enum type.
// Using method "2" here: http://stackoverflow.com/a/10984951/525714
enu: function enu(allowed) {
return 'text check (' + this.formatter.wrap(this.args[0]) + " in ('" + allowed.join("', '") + "'))";
},
double: 'double precision',
floating: 'real',
increments: 'serial primary key',
json: function json(jsonb) {
if (jsonb) helpers.deprecate('json(true)', 'jsonb()');
return jsonColumn(this.client, jsonb);
},
jsonb: function jsonb() {
return jsonColumn(this.client, true);
},
smallint: 'smallint',
tinyint: 'smallint',
datetime: function datetime(without) {
return without ? 'timestamp' : 'timestamptz';
},
timestamp: function timestamp(without) {
return without ? 'timestamp' : 'timestamptz';
},
uuid: 'uuid',
// Modifiers:
// ------
comment: function comment(_comment) {
this.pushAdditional(function () {
this.pushQuery('comment on column ' + this.tableCompiler.tableName() + '.' + this.formatter.wrap(this.args[0]) + " is " + (_comment ? "'" + _comment + "'" : 'NULL'));
}, _comment);
}
});
function jsonColumn(client, jsonb) {
if (!client.version || parseFloat(client.version) >= 9.2) return jsonb ? 'jsonb' : 'json';
return 'text';
}
module.exports = ColumnCompiler_PG;