columncompiler.js
4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
'use strict';
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'];