pimatic
Version:
A home automation server and framework for the Raspberry PI running on node.js
150 lines (110 loc) • 4.31 kB
JavaScript
;
exports.__esModule = true;
var _map2 = require('lodash/map');
var _map3 = _interopRequireDefault(_map2);
var _uniq2 = require('lodash/uniq');
var _uniq3 = _interopRequireDefault(_uniq2);
var _assign2 = require('lodash/assign');
var _assign3 = _interopRequireDefault(_assign2);
var _inherits = require('inherits');
var _inherits2 = _interopRequireDefault(_inherits);
var _raw = require('../../../raw');
var _raw2 = _interopRequireDefault(_raw);
var _columncompiler = require('../../../schema/columncompiler');
var _columncompiler2 = _interopRequireDefault(_columncompiler);
var _trigger = require('./trigger');
var _trigger2 = _interopRequireDefault(_trigger);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Column Compiler
// -------
function ColumnCompiler_Oracle() {
_columncompiler2.default.apply(this, arguments);
this.modifiers = ['defaultTo', 'checkIn', 'nullable', 'comment'];
}
(0, _inherits2.default)(ColumnCompiler_Oracle, _columncompiler2.default);
(0, _assign3.default)(ColumnCompiler_Oracle.prototype, {
// helper function for pushAdditional in increments() and bigincrements()
_createAutoIncrementTriggerAndSequence: function _createAutoIncrementTriggerAndSequence() {
// TODO Add warning that sequence etc is created
this.pushAdditional(function () {
var tableName = this.tableCompiler.tableNameRaw;
var createTriggerSQL = _trigger2.default.createAutoIncrementTrigger(tableName);
this.pushQuery(createTriggerSQL);
});
},
increments: function increments() {
this._createAutoIncrementTriggerAndSequence();
return 'integer not null primary key';
},
bigincrements: function bigincrements() {
this._createAutoIncrementTriggerAndSequence();
return 'number(20, 0) not null primary key';
},
floating: function floating(precision) {
var parsedPrecision = this._num(precision, 0);
return 'float' + (parsedPrecision ? '(' + parsedPrecision + ')' : '');
},
double: function double(precision, scale) {
// if (!precision) return 'number'; // TODO: Check If default is ok
return 'number(' + this._num(precision, 8) + ', ' + this._num(scale, 2) + ')';
},
integer: function integer(length) {
return length ? 'number(' + this._num(length, 11) + ')' : 'integer';
},
tinyint: 'smallint',
smallint: 'smallint',
mediumint: 'integer',
biginteger: 'number(20, 0)',
text: 'clob',
enu: function enu(allowed) {
allowed = (0, _uniq3.default)(allowed);
var maxLength = (allowed || []).reduce(function (maxLength, name) {
return Math.max(maxLength, String(name).length);
}, 1);
// implicitly add the enum values as checked values
this.columnBuilder._modifiers.checkIn = [allowed];
return 'varchar2(' + maxLength + ')';
},
time: 'timestamp with time zone',
datetime: function datetime(without) {
return without ? 'timestamp' : 'timestamp with time zone';
},
timestamp: function timestamp(without) {
return without ? 'timestamp' : 'timestamp with time zone';
},
bit: 'clob',
json: 'clob',
bool: function bool() {
// implicitly add the check for 0 and 1
this.columnBuilder._modifiers.checkIn = [[0, 1]];
return 'number(1, 0)';
},
varchar: function varchar(length) {
return 'varchar2(' + this._num(length, 255) + ')';
},
// 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);
},
checkIn: function checkIn(value) {
// TODO: Maybe accept arguments also as array
// TODO: value(s) should be escaped properly
if (value === undefined) {
return '';
} else if (value instanceof _raw2.default) {
value = value.toQuery();
} else if (Array.isArray(value)) {
value = (0, _map3.default)(value, function (v) {
return '\'' + v + '\'';
}).join(', ');
} else {
value = '\'' + value + '\'';
}
return 'check (' + this.formatter.wrap(this.args[0]) + ' in (' + value + '))';
}
});
exports.default = ColumnCompiler_Oracle;
module.exports = exports['default'];