@mrnafisia/type-query 1.0.5 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/U.d.ts +2 -2
- package/dist/U.js +27 -27
- package/dist/context.d.ts +5 -5
- package/dist/context.js +85 -85
- package/dist/dictionary.d.ts +12 -12
- package/dist/dictionary.js +177 -177
- package/dist/entity.d.ts +18192 -21164
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +969 -969
- package/dist/entity.js.map +1 -1
- package/dist/error.d.ts +4 -4
- package/dist/error.js +6 -6
- package/dist/index.d.ts +18 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -30
- package/dist/index.js.map +1 -1
- package/dist/pool.d.ts +5 -5
- package/dist/pool.js +120 -120
- package/dist/schema.d.ts +25 -25
- package/dist/schema.js +395 -395
- package/dist/testPool.d.ts +11 -0
- package/dist/testPool.d.ts.map +1 -0
- package/dist/testPool.js +249 -0
- package/dist/testPool.js.map +1 -0
- package/dist/types/context.d.ts +55 -55
- package/dist/types/context.js +2 -2
- package/dist/types/entity.d.ts +67 -67
- package/dist/types/entity.js +2 -2
- package/dist/types/json.d.ts +8 -8
- package/dist/types/json.js +2 -2
- package/dist/types/model.d.ts +11 -11
- package/dist/types/model.js +2 -2
- package/dist/types/pool.d.ts +18 -18
- package/dist/types/pool.js +2 -2
- package/dist/types/postgres.d.ts +9 -9
- package/dist/types/postgres.js +2 -2
- package/dist/types/table.d.ts +237 -237
- package/dist/types/table.js +2 -2
- package/dist/utils.d.ts +67 -67
- package/dist/utils.js +226 -226
- package/package.json +37 -37
package/dist/schema.js
CHANGED
|
@@ -1,396 +1,396 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (_) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
-
if (ar || !(i in from)) {
|
|
41
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
-
ar[i] = from[i];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
-
};
|
|
47
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.getSequenceName = exports.dropTableSQL = exports.createTableSQL = exports.dropSequencesSQL = exports.createSequencesSQL = exports.getAllTablesAndDependencies = exports.resolveTablesDependency = exports.dropTables = exports.createTables = void 0;
|
|
49
|
-
var never_catch_1 = require("never-catch");
|
|
50
|
-
var dictionary_1 = require("./dictionary");
|
|
51
|
-
var createTables = function (client, tables, resolve) {
|
|
52
|
-
if (resolve === void 0) { resolve = true; }
|
|
53
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
-
var dependencyResult, _i, tables_1, table, sequencesSQL, _loop_1, _a, sequencesSQL_1, sequenceSQL, state_1, _loop_2, _b, tables_2, table, state_2;
|
|
55
|
-
return __generator(this, function (_c) {
|
|
56
|
-
switch (_c.label) {
|
|
57
|
-
case 0:
|
|
58
|
-
// resolve
|
|
59
|
-
if (resolve) {
|
|
60
|
-
dependencyResult = resolveTablesDependency(tables);
|
|
61
|
-
if (!dependencyResult.ok) {
|
|
62
|
-
return [2 /*return*/, (0, never_catch_1.err)("<create-tables> -> resolve dependency -> ".concat(dependencyResult.error))];
|
|
63
|
-
}
|
|
64
|
-
tables = dependencyResult.value;
|
|
65
|
-
}
|
|
66
|
-
_i = 0, tables_1 = tables;
|
|
67
|
-
_c.label = 1;
|
|
68
|
-
case 1:
|
|
69
|
-
if (!(_i < tables_1.length)) return [3 /*break*/, 6];
|
|
70
|
-
table = tables_1[_i];
|
|
71
|
-
sequencesSQL = createSequencesSQL(table);
|
|
72
|
-
_loop_1 = function (sequenceSQL) {
|
|
73
|
-
var result;
|
|
74
|
-
return __generator(this, function (_d) {
|
|
75
|
-
switch (_d.label) {
|
|
76
|
-
case 0: return [4 /*yield*/, client.query(sequenceSQL)
|
|
77
|
-
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: sequenceSQL }); })];
|
|
78
|
-
case 1:
|
|
79
|
-
result = _d.sent();
|
|
80
|
-
if (result !== true) {
|
|
81
|
-
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
82
|
-
}
|
|
83
|
-
return [2 /*return*/];
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
};
|
|
87
|
-
_a = 0, sequencesSQL_1 = sequencesSQL;
|
|
88
|
-
_c.label = 2;
|
|
89
|
-
case 2:
|
|
90
|
-
if (!(_a < sequencesSQL_1.length)) return [3 /*break*/, 5];
|
|
91
|
-
sequenceSQL = sequencesSQL_1[_a];
|
|
92
|
-
return [5 /*yield**/, _loop_1(sequenceSQL)];
|
|
93
|
-
case 3:
|
|
94
|
-
state_1 = _c.sent();
|
|
95
|
-
if (typeof state_1 === "object")
|
|
96
|
-
return [2 /*return*/, state_1.value];
|
|
97
|
-
_c.label = 4;
|
|
98
|
-
case 4:
|
|
99
|
-
_a++;
|
|
100
|
-
return [3 /*break*/, 2];
|
|
101
|
-
case 5:
|
|
102
|
-
_i++;
|
|
103
|
-
return [3 /*break*/, 1];
|
|
104
|
-
case 6:
|
|
105
|
-
_loop_2 = function (table) {
|
|
106
|
-
var tableSQL, result;
|
|
107
|
-
return __generator(this, function (_e) {
|
|
108
|
-
switch (_e.label) {
|
|
109
|
-
case 0:
|
|
110
|
-
tableSQL = createTableSQL(table);
|
|
111
|
-
return [4 /*yield*/, client.query(tableSQL)
|
|
112
|
-
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: tableSQL }); })];
|
|
113
|
-
case 1:
|
|
114
|
-
result = _e.sent();
|
|
115
|
-
if (result !== true) {
|
|
116
|
-
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
117
|
-
}
|
|
118
|
-
return [2 /*return*/];
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
_b = 0, tables_2 = tables;
|
|
123
|
-
_c.label = 7;
|
|
124
|
-
case 7:
|
|
125
|
-
if (!(_b < tables_2.length)) return [3 /*break*/, 10];
|
|
126
|
-
table = tables_2[_b];
|
|
127
|
-
return [5 /*yield**/, _loop_2(table)];
|
|
128
|
-
case 8:
|
|
129
|
-
state_2 = _c.sent();
|
|
130
|
-
if (typeof state_2 === "object")
|
|
131
|
-
return [2 /*return*/, state_2.value];
|
|
132
|
-
_c.label = 9;
|
|
133
|
-
case 9:
|
|
134
|
-
_b++;
|
|
135
|
-
return [3 /*break*/, 7];
|
|
136
|
-
case 10: return [2 /*return*/, Promise.resolve((0, never_catch_1.ok)(undefined))];
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
};
|
|
141
|
-
exports.createTables = createTables;
|
|
142
|
-
var dropTables = function (client, tables, resolve) {
|
|
143
|
-
if (resolve === void 0) { resolve = true; }
|
|
144
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
145
|
-
var dependencyResult, _loop_3, _i, tables_3, table, state_3, _a, tables_4, table, sequencesSQL, _loop_4, _b, sequencesSQL_2, sequenceSQL, state_4;
|
|
146
|
-
return __generator(this, function (_c) {
|
|
147
|
-
switch (_c.label) {
|
|
148
|
-
case 0:
|
|
149
|
-
// resolve
|
|
150
|
-
if (resolve) {
|
|
151
|
-
dependencyResult = resolveTablesDependency(tables);
|
|
152
|
-
if (!dependencyResult.ok) {
|
|
153
|
-
return [2 /*return*/, (0, never_catch_1.err)("<drop-tables> -> resolve dependency -> ".concat(dependencyResult.error))];
|
|
154
|
-
}
|
|
155
|
-
tables = dependencyResult.value.reverse();
|
|
156
|
-
}
|
|
157
|
-
_loop_3 = function (table) {
|
|
158
|
-
var tableSQL, result;
|
|
159
|
-
return __generator(this, function (_d) {
|
|
160
|
-
switch (_d.label) {
|
|
161
|
-
case 0:
|
|
162
|
-
tableSQL = dropTableSQL(table);
|
|
163
|
-
return [4 /*yield*/, client.query(tableSQL)
|
|
164
|
-
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: tableSQL }); })];
|
|
165
|
-
case 1:
|
|
166
|
-
result = _d.sent();
|
|
167
|
-
if (result !== true) {
|
|
168
|
-
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
169
|
-
}
|
|
170
|
-
return [2 /*return*/];
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
};
|
|
174
|
-
_i = 0, tables_3 = tables;
|
|
175
|
-
_c.label = 1;
|
|
176
|
-
case 1:
|
|
177
|
-
if (!(_i < tables_3.length)) return [3 /*break*/, 4];
|
|
178
|
-
table = tables_3[_i];
|
|
179
|
-
return [5 /*yield**/, _loop_3(table)];
|
|
180
|
-
case 2:
|
|
181
|
-
state_3 = _c.sent();
|
|
182
|
-
if (typeof state_3 === "object")
|
|
183
|
-
return [2 /*return*/, state_3.value];
|
|
184
|
-
_c.label = 3;
|
|
185
|
-
case 3:
|
|
186
|
-
_i++;
|
|
187
|
-
return [3 /*break*/, 1];
|
|
188
|
-
case 4:
|
|
189
|
-
_a = 0, tables_4 = tables;
|
|
190
|
-
_c.label = 5;
|
|
191
|
-
case 5:
|
|
192
|
-
if (!(_a < tables_4.length)) return [3 /*break*/, 10];
|
|
193
|
-
table = tables_4[_a];
|
|
194
|
-
sequencesSQL = dropSequencesSQL(table);
|
|
195
|
-
_loop_4 = function (sequenceSQL) {
|
|
196
|
-
var result;
|
|
197
|
-
return __generator(this, function (_e) {
|
|
198
|
-
switch (_e.label) {
|
|
199
|
-
case 0: return [4 /*yield*/, client.query(sequenceSQL)
|
|
200
|
-
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: sequenceSQL }); })];
|
|
201
|
-
case 1:
|
|
202
|
-
result = _e.sent();
|
|
203
|
-
if (result !== true) {
|
|
204
|
-
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
205
|
-
}
|
|
206
|
-
return [2 /*return*/];
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
};
|
|
210
|
-
_b = 0, sequencesSQL_2 = sequencesSQL;
|
|
211
|
-
_c.label = 6;
|
|
212
|
-
case 6:
|
|
213
|
-
if (!(_b < sequencesSQL_2.length)) return [3 /*break*/, 9];
|
|
214
|
-
sequenceSQL = sequencesSQL_2[_b];
|
|
215
|
-
return [5 /*yield**/, _loop_4(sequenceSQL)];
|
|
216
|
-
case 7:
|
|
217
|
-
state_4 = _c.sent();
|
|
218
|
-
if (typeof state_4 === "object")
|
|
219
|
-
return [2 /*return*/, state_4.value];
|
|
220
|
-
_c.label = 8;
|
|
221
|
-
case 8:
|
|
222
|
-
_b++;
|
|
223
|
-
return [3 /*break*/, 6];
|
|
224
|
-
case 9:
|
|
225
|
-
_a++;
|
|
226
|
-
return [3 /*break*/, 5];
|
|
227
|
-
case 10: return [2 /*return*/, Promise.resolve((0, never_catch_1.ok)(undefined))];
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
};
|
|
232
|
-
exports.dropTables = dropTables;
|
|
233
|
-
var resolveTablesDependency = function (tables) {
|
|
234
|
-
var allTablesAndDependenciesResult = getAllTablesAndDependencies(tables);
|
|
235
|
-
if (!allTablesAndDependenciesResult.ok) {
|
|
236
|
-
return allTablesAndDependenciesResult;
|
|
237
|
-
}
|
|
238
|
-
var _a = allTablesAndDependenciesResult.value, allTables = _a[0], dependencies = _a[1];
|
|
239
|
-
var result = [];
|
|
240
|
-
var _loop_5 = function () {
|
|
241
|
-
// find all independent tables
|
|
242
|
-
var independentTables = [];
|
|
243
|
-
var _loop_6 = function (table) {
|
|
244
|
-
if (dependencies.find(function (v) { return v.parent === table; }) === undefined) {
|
|
245
|
-
independentTables.push(table);
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
for (var _i = 0, allTables_1 = allTables; _i < allTables_1.length; _i++) {
|
|
249
|
-
var table = allTables_1[_i];
|
|
250
|
-
_loop_6(table);
|
|
251
|
-
}
|
|
252
|
-
// remove founded tables from all tables and add them to the result
|
|
253
|
-
for (var _b = 0, independentTables_1 = independentTables; _b < independentTables_1.length; _b++) {
|
|
254
|
-
var independentTable = independentTables_1[_b];
|
|
255
|
-
allTables.splice(allTables.indexOf(independentTable), 1);
|
|
256
|
-
}
|
|
257
|
-
result.push.apply(result, independentTables);
|
|
258
|
-
// remove dependencies depend on founded tables
|
|
259
|
-
dependencies = dependencies.filter(function (v) { return !independentTables.includes(v.child); });
|
|
260
|
-
};
|
|
261
|
-
while (allTables.length !== 0) {
|
|
262
|
-
_loop_5();
|
|
263
|
-
}
|
|
264
|
-
return (0, never_catch_1.ok)(result);
|
|
265
|
-
};
|
|
266
|
-
exports.resolveTablesDependency = resolveTablesDependency;
|
|
267
|
-
var getAllTablesAndDependencies = function (tables) {
|
|
268
|
-
var allTables = __spreadArray([], tables, true);
|
|
269
|
-
var dependencies = [];
|
|
270
|
-
var _loop_7 = function (table) {
|
|
271
|
-
var _loop_8 = function (_, column) {
|
|
272
|
-
// skip independent tables
|
|
273
|
-
if (column.reference === undefined) {
|
|
274
|
-
return "continue";
|
|
275
|
-
}
|
|
276
|
-
// skip repeated tables
|
|
277
|
-
if (!allTables.includes(column.reference.table)) {
|
|
278
|
-
allTables.push(column.reference.table);
|
|
279
|
-
}
|
|
280
|
-
// add new dependency if it is not repeated
|
|
281
|
-
if (dependencies.find(function (v) { var _a; return v.parent === table && v.child === ((_a = column.reference) === null || _a === void 0 ? void 0 : _a.table); }) === undefined) {
|
|
282
|
-
dependencies.push({ parent: table, child: column.reference.table });
|
|
283
|
-
}
|
|
284
|
-
// check bidirectional dependency
|
|
285
|
-
for (var _d = 0, dependencies_1 = dependencies; _d < dependencies_1.length; _d++) {
|
|
286
|
-
var dependency = dependencies_1[_d];
|
|
287
|
-
if (dependency.parent === column.reference.table && dependency.child === table) {
|
|
288
|
-
return { value: (0, never_catch_1.err)("bidirectional dependency detected \"".concat(table.schema, "\".\"").concat(table.title, "\" and \"").concat(column.reference.table.schema, "\".\"").concat(column.reference.table.title, "\"")) };
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
};
|
|
292
|
-
for (var _a = 0, _b = Object.entries(table.columns); _a < _b.length; _a++) {
|
|
293
|
-
var _c = _b[_a], _ = _c[0], column = _c[1];
|
|
294
|
-
var state_6 = _loop_8(_, column);
|
|
295
|
-
if (typeof state_6 === "object")
|
|
296
|
-
return state_6;
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
for (var _i = 0, allTables_2 = allTables; _i < allTables_2.length; _i++) {
|
|
300
|
-
var table = allTables_2[_i];
|
|
301
|
-
var state_5 = _loop_7(table);
|
|
302
|
-
if (typeof state_5 === "object")
|
|
303
|
-
return state_5.value;
|
|
304
|
-
}
|
|
305
|
-
return (0, never_catch_1.ok)([allTables, dependencies]);
|
|
306
|
-
};
|
|
307
|
-
exports.getAllTablesAndDependencies = getAllTablesAndDependencies;
|
|
308
|
-
var createSequencesSQL = function (table) {
|
|
309
|
-
var queries = [];
|
|
310
|
-
for (var _i = 0, _a = Object.entries(table.columns); _i < _a.length; _i++) {
|
|
311
|
-
var _b = _a[_i], key = _b[0], column = _b[1];
|
|
312
|
-
// skip tables without sequences
|
|
313
|
-
if (column.default !== 'auto-increment') {
|
|
314
|
-
continue;
|
|
315
|
-
}
|
|
316
|
-
// build query
|
|
317
|
-
var tokens = ["CREATE SEQUENCE ".concat(getSequenceName(table.title, key, column))];
|
|
318
|
-
if (column.type === 'smallint') {
|
|
319
|
-
tokens.push('as smallint');
|
|
320
|
-
}
|
|
321
|
-
else if (column.type === 'integer') {
|
|
322
|
-
tokens.push('as integer');
|
|
323
|
-
}
|
|
324
|
-
tokens.push(';');
|
|
325
|
-
// add query to the result
|
|
326
|
-
queries.push(tokens.join(' '));
|
|
327
|
-
}
|
|
328
|
-
return queries;
|
|
329
|
-
};
|
|
330
|
-
exports.createSequencesSQL = createSequencesSQL;
|
|
331
|
-
var dropSequencesSQL = function (table) {
|
|
332
|
-
var queries = [];
|
|
333
|
-
for (var _i = 0, _a = Object.entries(table.columns); _i < _a.length; _i++) {
|
|
334
|
-
var _b = _a[_i], key = _b[0], column = _b[1];
|
|
335
|
-
// skip tables without sequences
|
|
336
|
-
if (column.default !== 'auto-increment') {
|
|
337
|
-
continue;
|
|
338
|
-
}
|
|
339
|
-
// add query to the result
|
|
340
|
-
queries.push("DROP SEQUENCE ".concat(getSequenceName(table.title, key, column), " ;"));
|
|
341
|
-
}
|
|
342
|
-
return queries;
|
|
343
|
-
};
|
|
344
|
-
exports.dropSequencesSQL = dropSequencesSQL;
|
|
345
|
-
var createTableSQL = function (table) {
|
|
346
|
-
var tokens = ["CREATE TABLE \"".concat(table.schema, "\".\"").concat(table.title, "\"(")];
|
|
347
|
-
// columns clause
|
|
348
|
-
var columnsAsEntries = Object.entries(table.columns);
|
|
349
|
-
var columns = columnsAsEntries.map(function (_a) {
|
|
350
|
-
var _b, _c, _d, _e;
|
|
351
|
-
var key = _a[0], column = _a[1];
|
|
352
|
-
var tokens = ["\"".concat((_b = column.title) !== null && _b !== void 0 ? _b : key, "\" ").concat((0, dictionary_1.toPostgresType)(column.type))];
|
|
353
|
-
// add default clause
|
|
354
|
-
if (column.default === 'auto-increment') {
|
|
355
|
-
tokens.push("DEFAULT nextVal( '".concat(getSequenceName(table.title, key, column), "'::regClass )"));
|
|
356
|
-
}
|
|
357
|
-
else if (column.default === true) {
|
|
358
|
-
tokens.push("DEFAULT ".concat(column.value));
|
|
359
|
-
}
|
|
360
|
-
// add not null-null clause
|
|
361
|
-
tokens.push(column.nullable ? 'NULL' : 'NOT NULL');
|
|
362
|
-
// add referencing clause
|
|
363
|
-
if (column.reference !== undefined) {
|
|
364
|
-
tokens.push("REFERENCES \"".concat(column.reference.table.schema, "\".\"").concat(column.reference.table.title, "\"") +
|
|
365
|
-
"( \"".concat((_c = column.reference.table.columns[column.reference.column].title) !== null && _c !== void 0 ? _c : column.reference.column, "\" ) ") +
|
|
366
|
-
"ON UPDATE ".concat((0, dictionary_1.toReferenceAction)((_d = column.reference.onUpdate) !== null && _d !== void 0 ? _d : 'no-action'), " ON DELETE ").concat((0, dictionary_1.toReferenceAction)((_e = column.reference.onDelete) !== null && _e !== void 0 ? _e : 'no-action')));
|
|
367
|
-
}
|
|
368
|
-
return tokens.join(' ');
|
|
369
|
-
});
|
|
370
|
-
// constraints clause
|
|
371
|
-
var constraints = [];
|
|
372
|
-
var primaryKeys = columnsAsEntries.filter(function (_a) {
|
|
373
|
-
var _ = _a[0], column = _a[1];
|
|
374
|
-
return !column.nullable && column.primary;
|
|
375
|
-
});
|
|
376
|
-
if (primaryKeys.length !== 0) {
|
|
377
|
-
constraints.push("CONSTRAINT \"".concat(table.title, "_pk\" PRIMARY KEY( ").concat(primaryKeys.map(function (_a) {
|
|
378
|
-
var _b;
|
|
379
|
-
var key = _a[0], column = _a[1];
|
|
380
|
-
return "\"".concat((_b = column.title) !== null && _b !== void 0 ? _b : key, "\"");
|
|
381
|
-
}).join(', '), " )"));
|
|
382
|
-
}
|
|
383
|
-
// add columns and constrains union
|
|
384
|
-
var columnsAndConstraints = __spreadArray(__spreadArray([], columns, true), constraints, true);
|
|
385
|
-
if (columnsAndConstraints.length !== 0) {
|
|
386
|
-
tokens.push(columnsAndConstraints.join(', '));
|
|
387
|
-
}
|
|
388
|
-
tokens.push(') ;');
|
|
389
|
-
return tokens.join(' ');
|
|
390
|
-
};
|
|
391
|
-
exports.createTableSQL = createTableSQL;
|
|
392
|
-
var dropTableSQL = function (table) { return "DROP TABLE \"".concat(table.schema, "\".\"").concat(table.title, "\" ;"); };
|
|
393
|
-
exports.dropTableSQL = dropTableSQL;
|
|
394
|
-
var getSequenceName = function (tableTitle, columnKey, column) { var _a, _b; return (_a = column.seqTitle) !== null && _a !== void 0 ? _a : (tableTitle + '_' + ((_b = column.title) !== null && _b !== void 0 ? _b : columnKey) + '_seq'); };
|
|
395
|
-
exports.getSequenceName = getSequenceName;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
+
if (ar || !(i in from)) {
|
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
+
ar[i] = from[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.getSequenceName = exports.dropTableSQL = exports.createTableSQL = exports.dropSequencesSQL = exports.createSequencesSQL = exports.getAllTablesAndDependencies = exports.resolveTablesDependency = exports.dropTables = exports.createTables = void 0;
|
|
49
|
+
var never_catch_1 = require("never-catch");
|
|
50
|
+
var dictionary_1 = require("./dictionary");
|
|
51
|
+
var createTables = function (client, tables, resolve) {
|
|
52
|
+
if (resolve === void 0) { resolve = true; }
|
|
53
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
+
var dependencyResult, _i, tables_1, table, sequencesSQL, _loop_1, _a, sequencesSQL_1, sequenceSQL, state_1, _loop_2, _b, tables_2, table, state_2;
|
|
55
|
+
return __generator(this, function (_c) {
|
|
56
|
+
switch (_c.label) {
|
|
57
|
+
case 0:
|
|
58
|
+
// resolve
|
|
59
|
+
if (resolve) {
|
|
60
|
+
dependencyResult = resolveTablesDependency(tables);
|
|
61
|
+
if (!dependencyResult.ok) {
|
|
62
|
+
return [2 /*return*/, (0, never_catch_1.err)("<create-tables> -> resolve dependency -> ".concat(dependencyResult.error))];
|
|
63
|
+
}
|
|
64
|
+
tables = dependencyResult.value;
|
|
65
|
+
}
|
|
66
|
+
_i = 0, tables_1 = tables;
|
|
67
|
+
_c.label = 1;
|
|
68
|
+
case 1:
|
|
69
|
+
if (!(_i < tables_1.length)) return [3 /*break*/, 6];
|
|
70
|
+
table = tables_1[_i];
|
|
71
|
+
sequencesSQL = createSequencesSQL(table);
|
|
72
|
+
_loop_1 = function (sequenceSQL) {
|
|
73
|
+
var result;
|
|
74
|
+
return __generator(this, function (_d) {
|
|
75
|
+
switch (_d.label) {
|
|
76
|
+
case 0: return [4 /*yield*/, client.query(sequenceSQL)
|
|
77
|
+
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: sequenceSQL }); })];
|
|
78
|
+
case 1:
|
|
79
|
+
result = _d.sent();
|
|
80
|
+
if (result !== true) {
|
|
81
|
+
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
82
|
+
}
|
|
83
|
+
return [2 /*return*/];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
_a = 0, sequencesSQL_1 = sequencesSQL;
|
|
88
|
+
_c.label = 2;
|
|
89
|
+
case 2:
|
|
90
|
+
if (!(_a < sequencesSQL_1.length)) return [3 /*break*/, 5];
|
|
91
|
+
sequenceSQL = sequencesSQL_1[_a];
|
|
92
|
+
return [5 /*yield**/, _loop_1(sequenceSQL)];
|
|
93
|
+
case 3:
|
|
94
|
+
state_1 = _c.sent();
|
|
95
|
+
if (typeof state_1 === "object")
|
|
96
|
+
return [2 /*return*/, state_1.value];
|
|
97
|
+
_c.label = 4;
|
|
98
|
+
case 4:
|
|
99
|
+
_a++;
|
|
100
|
+
return [3 /*break*/, 2];
|
|
101
|
+
case 5:
|
|
102
|
+
_i++;
|
|
103
|
+
return [3 /*break*/, 1];
|
|
104
|
+
case 6:
|
|
105
|
+
_loop_2 = function (table) {
|
|
106
|
+
var tableSQL, result;
|
|
107
|
+
return __generator(this, function (_e) {
|
|
108
|
+
switch (_e.label) {
|
|
109
|
+
case 0:
|
|
110
|
+
tableSQL = createTableSQL(table);
|
|
111
|
+
return [4 /*yield*/, client.query(tableSQL)
|
|
112
|
+
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: tableSQL }); })];
|
|
113
|
+
case 1:
|
|
114
|
+
result = _e.sent();
|
|
115
|
+
if (result !== true) {
|
|
116
|
+
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
117
|
+
}
|
|
118
|
+
return [2 /*return*/];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
_b = 0, tables_2 = tables;
|
|
123
|
+
_c.label = 7;
|
|
124
|
+
case 7:
|
|
125
|
+
if (!(_b < tables_2.length)) return [3 /*break*/, 10];
|
|
126
|
+
table = tables_2[_b];
|
|
127
|
+
return [5 /*yield**/, _loop_2(table)];
|
|
128
|
+
case 8:
|
|
129
|
+
state_2 = _c.sent();
|
|
130
|
+
if (typeof state_2 === "object")
|
|
131
|
+
return [2 /*return*/, state_2.value];
|
|
132
|
+
_c.label = 9;
|
|
133
|
+
case 9:
|
|
134
|
+
_b++;
|
|
135
|
+
return [3 /*break*/, 7];
|
|
136
|
+
case 10: return [2 /*return*/, Promise.resolve((0, never_catch_1.ok)(undefined))];
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
exports.createTables = createTables;
|
|
142
|
+
var dropTables = function (client, tables, resolve) {
|
|
143
|
+
if (resolve === void 0) { resolve = true; }
|
|
144
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
145
|
+
var dependencyResult, _loop_3, _i, tables_3, table, state_3, _a, tables_4, table, sequencesSQL, _loop_4, _b, sequencesSQL_2, sequenceSQL, state_4;
|
|
146
|
+
return __generator(this, function (_c) {
|
|
147
|
+
switch (_c.label) {
|
|
148
|
+
case 0:
|
|
149
|
+
// resolve
|
|
150
|
+
if (resolve) {
|
|
151
|
+
dependencyResult = resolveTablesDependency(tables);
|
|
152
|
+
if (!dependencyResult.ok) {
|
|
153
|
+
return [2 /*return*/, (0, never_catch_1.err)("<drop-tables> -> resolve dependency -> ".concat(dependencyResult.error))];
|
|
154
|
+
}
|
|
155
|
+
tables = dependencyResult.value.reverse();
|
|
156
|
+
}
|
|
157
|
+
_loop_3 = function (table) {
|
|
158
|
+
var tableSQL, result;
|
|
159
|
+
return __generator(this, function (_d) {
|
|
160
|
+
switch (_d.label) {
|
|
161
|
+
case 0:
|
|
162
|
+
tableSQL = dropTableSQL(table);
|
|
163
|
+
return [4 /*yield*/, client.query(tableSQL)
|
|
164
|
+
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: tableSQL }); })];
|
|
165
|
+
case 1:
|
|
166
|
+
result = _d.sent();
|
|
167
|
+
if (result !== true) {
|
|
168
|
+
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
169
|
+
}
|
|
170
|
+
return [2 /*return*/];
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
_i = 0, tables_3 = tables;
|
|
175
|
+
_c.label = 1;
|
|
176
|
+
case 1:
|
|
177
|
+
if (!(_i < tables_3.length)) return [3 /*break*/, 4];
|
|
178
|
+
table = tables_3[_i];
|
|
179
|
+
return [5 /*yield**/, _loop_3(table)];
|
|
180
|
+
case 2:
|
|
181
|
+
state_3 = _c.sent();
|
|
182
|
+
if (typeof state_3 === "object")
|
|
183
|
+
return [2 /*return*/, state_3.value];
|
|
184
|
+
_c.label = 3;
|
|
185
|
+
case 3:
|
|
186
|
+
_i++;
|
|
187
|
+
return [3 /*break*/, 1];
|
|
188
|
+
case 4:
|
|
189
|
+
_a = 0, tables_4 = tables;
|
|
190
|
+
_c.label = 5;
|
|
191
|
+
case 5:
|
|
192
|
+
if (!(_a < tables_4.length)) return [3 /*break*/, 10];
|
|
193
|
+
table = tables_4[_a];
|
|
194
|
+
sequencesSQL = dropSequencesSQL(table);
|
|
195
|
+
_loop_4 = function (sequenceSQL) {
|
|
196
|
+
var result;
|
|
197
|
+
return __generator(this, function (_e) {
|
|
198
|
+
switch (_e.label) {
|
|
199
|
+
case 0: return [4 /*yield*/, client.query(sequenceSQL)
|
|
200
|
+
.then(function () { return true; }).catch(function (e) { return ({ db: e, query: sequenceSQL }); })];
|
|
201
|
+
case 1:
|
|
202
|
+
result = _e.sent();
|
|
203
|
+
if (result !== true) {
|
|
204
|
+
return [2 /*return*/, { value: (0, never_catch_1.err)(result) }];
|
|
205
|
+
}
|
|
206
|
+
return [2 /*return*/];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
_b = 0, sequencesSQL_2 = sequencesSQL;
|
|
211
|
+
_c.label = 6;
|
|
212
|
+
case 6:
|
|
213
|
+
if (!(_b < sequencesSQL_2.length)) return [3 /*break*/, 9];
|
|
214
|
+
sequenceSQL = sequencesSQL_2[_b];
|
|
215
|
+
return [5 /*yield**/, _loop_4(sequenceSQL)];
|
|
216
|
+
case 7:
|
|
217
|
+
state_4 = _c.sent();
|
|
218
|
+
if (typeof state_4 === "object")
|
|
219
|
+
return [2 /*return*/, state_4.value];
|
|
220
|
+
_c.label = 8;
|
|
221
|
+
case 8:
|
|
222
|
+
_b++;
|
|
223
|
+
return [3 /*break*/, 6];
|
|
224
|
+
case 9:
|
|
225
|
+
_a++;
|
|
226
|
+
return [3 /*break*/, 5];
|
|
227
|
+
case 10: return [2 /*return*/, Promise.resolve((0, never_catch_1.ok)(undefined))];
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
exports.dropTables = dropTables;
|
|
233
|
+
var resolveTablesDependency = function (tables) {
|
|
234
|
+
var allTablesAndDependenciesResult = getAllTablesAndDependencies(tables);
|
|
235
|
+
if (!allTablesAndDependenciesResult.ok) {
|
|
236
|
+
return allTablesAndDependenciesResult;
|
|
237
|
+
}
|
|
238
|
+
var _a = allTablesAndDependenciesResult.value, allTables = _a[0], dependencies = _a[1];
|
|
239
|
+
var result = [];
|
|
240
|
+
var _loop_5 = function () {
|
|
241
|
+
// find all independent tables
|
|
242
|
+
var independentTables = [];
|
|
243
|
+
var _loop_6 = function (table) {
|
|
244
|
+
if (dependencies.find(function (v) { return v.parent === table; }) === undefined) {
|
|
245
|
+
independentTables.push(table);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
for (var _i = 0, allTables_1 = allTables; _i < allTables_1.length; _i++) {
|
|
249
|
+
var table = allTables_1[_i];
|
|
250
|
+
_loop_6(table);
|
|
251
|
+
}
|
|
252
|
+
// remove founded tables from all tables and add them to the result
|
|
253
|
+
for (var _b = 0, independentTables_1 = independentTables; _b < independentTables_1.length; _b++) {
|
|
254
|
+
var independentTable = independentTables_1[_b];
|
|
255
|
+
allTables.splice(allTables.indexOf(independentTable), 1);
|
|
256
|
+
}
|
|
257
|
+
result.push.apply(result, independentTables);
|
|
258
|
+
// remove dependencies depend on founded tables
|
|
259
|
+
dependencies = dependencies.filter(function (v) { return !independentTables.includes(v.child); });
|
|
260
|
+
};
|
|
261
|
+
while (allTables.length !== 0) {
|
|
262
|
+
_loop_5();
|
|
263
|
+
}
|
|
264
|
+
return (0, never_catch_1.ok)(result);
|
|
265
|
+
};
|
|
266
|
+
exports.resolveTablesDependency = resolveTablesDependency;
|
|
267
|
+
var getAllTablesAndDependencies = function (tables) {
|
|
268
|
+
var allTables = __spreadArray([], tables, true);
|
|
269
|
+
var dependencies = [];
|
|
270
|
+
var _loop_7 = function (table) {
|
|
271
|
+
var _loop_8 = function (_, column) {
|
|
272
|
+
// skip independent tables
|
|
273
|
+
if (column.reference === undefined) {
|
|
274
|
+
return "continue";
|
|
275
|
+
}
|
|
276
|
+
// skip repeated tables
|
|
277
|
+
if (!allTables.includes(column.reference.table)) {
|
|
278
|
+
allTables.push(column.reference.table);
|
|
279
|
+
}
|
|
280
|
+
// add new dependency if it is not repeated
|
|
281
|
+
if (dependencies.find(function (v) { var _a; return v.parent === table && v.child === ((_a = column.reference) === null || _a === void 0 ? void 0 : _a.table); }) === undefined) {
|
|
282
|
+
dependencies.push({ parent: table, child: column.reference.table });
|
|
283
|
+
}
|
|
284
|
+
// check bidirectional dependency
|
|
285
|
+
for (var _d = 0, dependencies_1 = dependencies; _d < dependencies_1.length; _d++) {
|
|
286
|
+
var dependency = dependencies_1[_d];
|
|
287
|
+
if (dependency.parent === column.reference.table && dependency.child === table) {
|
|
288
|
+
return { value: (0, never_catch_1.err)("bidirectional dependency detected \"".concat(table.schema, "\".\"").concat(table.title, "\" and \"").concat(column.reference.table.schema, "\".\"").concat(column.reference.table.title, "\"")) };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
for (var _a = 0, _b = Object.entries(table.columns); _a < _b.length; _a++) {
|
|
293
|
+
var _c = _b[_a], _ = _c[0], column = _c[1];
|
|
294
|
+
var state_6 = _loop_8(_, column);
|
|
295
|
+
if (typeof state_6 === "object")
|
|
296
|
+
return state_6;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
for (var _i = 0, allTables_2 = allTables; _i < allTables_2.length; _i++) {
|
|
300
|
+
var table = allTables_2[_i];
|
|
301
|
+
var state_5 = _loop_7(table);
|
|
302
|
+
if (typeof state_5 === "object")
|
|
303
|
+
return state_5.value;
|
|
304
|
+
}
|
|
305
|
+
return (0, never_catch_1.ok)([allTables, dependencies]);
|
|
306
|
+
};
|
|
307
|
+
exports.getAllTablesAndDependencies = getAllTablesAndDependencies;
|
|
308
|
+
var createSequencesSQL = function (table) {
|
|
309
|
+
var queries = [];
|
|
310
|
+
for (var _i = 0, _a = Object.entries(table.columns); _i < _a.length; _i++) {
|
|
311
|
+
var _b = _a[_i], key = _b[0], column = _b[1];
|
|
312
|
+
// skip tables without sequences
|
|
313
|
+
if (column.default !== 'auto-increment') {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
// build query
|
|
317
|
+
var tokens = ["CREATE SEQUENCE ".concat(getSequenceName(table.title, key, column))];
|
|
318
|
+
if (column.type === 'smallint') {
|
|
319
|
+
tokens.push('as smallint');
|
|
320
|
+
}
|
|
321
|
+
else if (column.type === 'integer') {
|
|
322
|
+
tokens.push('as integer');
|
|
323
|
+
}
|
|
324
|
+
tokens.push(';');
|
|
325
|
+
// add query to the result
|
|
326
|
+
queries.push(tokens.join(' '));
|
|
327
|
+
}
|
|
328
|
+
return queries;
|
|
329
|
+
};
|
|
330
|
+
exports.createSequencesSQL = createSequencesSQL;
|
|
331
|
+
var dropSequencesSQL = function (table) {
|
|
332
|
+
var queries = [];
|
|
333
|
+
for (var _i = 0, _a = Object.entries(table.columns); _i < _a.length; _i++) {
|
|
334
|
+
var _b = _a[_i], key = _b[0], column = _b[1];
|
|
335
|
+
// skip tables without sequences
|
|
336
|
+
if (column.default !== 'auto-increment') {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
// add query to the result
|
|
340
|
+
queries.push("DROP SEQUENCE ".concat(getSequenceName(table.title, key, column), " ;"));
|
|
341
|
+
}
|
|
342
|
+
return queries;
|
|
343
|
+
};
|
|
344
|
+
exports.dropSequencesSQL = dropSequencesSQL;
|
|
345
|
+
var createTableSQL = function (table) {
|
|
346
|
+
var tokens = ["CREATE TABLE \"".concat(table.schema, "\".\"").concat(table.title, "\"(")];
|
|
347
|
+
// columns clause
|
|
348
|
+
var columnsAsEntries = Object.entries(table.columns);
|
|
349
|
+
var columns = columnsAsEntries.map(function (_a) {
|
|
350
|
+
var _b, _c, _d, _e;
|
|
351
|
+
var key = _a[0], column = _a[1];
|
|
352
|
+
var tokens = ["\"".concat((_b = column.title) !== null && _b !== void 0 ? _b : key, "\" ").concat((0, dictionary_1.toPostgresType)(column.type))];
|
|
353
|
+
// add default clause
|
|
354
|
+
if (column.default === 'auto-increment') {
|
|
355
|
+
tokens.push("DEFAULT nextVal( '".concat(getSequenceName(table.title, key, column), "'::regClass )"));
|
|
356
|
+
}
|
|
357
|
+
else if (column.default === true) {
|
|
358
|
+
tokens.push("DEFAULT ".concat(column.value));
|
|
359
|
+
}
|
|
360
|
+
// add not null-null clause
|
|
361
|
+
tokens.push(column.nullable ? 'NULL' : 'NOT NULL');
|
|
362
|
+
// add referencing clause
|
|
363
|
+
if (column.reference !== undefined) {
|
|
364
|
+
tokens.push("REFERENCES \"".concat(column.reference.table.schema, "\".\"").concat(column.reference.table.title, "\"") +
|
|
365
|
+
"( \"".concat((_c = column.reference.table.columns[column.reference.column].title) !== null && _c !== void 0 ? _c : column.reference.column, "\" ) ") +
|
|
366
|
+
"ON UPDATE ".concat((0, dictionary_1.toReferenceAction)((_d = column.reference.onUpdate) !== null && _d !== void 0 ? _d : 'no-action'), " ON DELETE ").concat((0, dictionary_1.toReferenceAction)((_e = column.reference.onDelete) !== null && _e !== void 0 ? _e : 'no-action')));
|
|
367
|
+
}
|
|
368
|
+
return tokens.join(' ');
|
|
369
|
+
});
|
|
370
|
+
// constraints clause
|
|
371
|
+
var constraints = [];
|
|
372
|
+
var primaryKeys = columnsAsEntries.filter(function (_a) {
|
|
373
|
+
var _ = _a[0], column = _a[1];
|
|
374
|
+
return !column.nullable && column.primary;
|
|
375
|
+
});
|
|
376
|
+
if (primaryKeys.length !== 0) {
|
|
377
|
+
constraints.push("CONSTRAINT \"".concat(table.title, "_pk\" PRIMARY KEY( ").concat(primaryKeys.map(function (_a) {
|
|
378
|
+
var _b;
|
|
379
|
+
var key = _a[0], column = _a[1];
|
|
380
|
+
return "\"".concat((_b = column.title) !== null && _b !== void 0 ? _b : key, "\"");
|
|
381
|
+
}).join(', '), " )"));
|
|
382
|
+
}
|
|
383
|
+
// add columns and constrains union
|
|
384
|
+
var columnsAndConstraints = __spreadArray(__spreadArray([], columns, true), constraints, true);
|
|
385
|
+
if (columnsAndConstraints.length !== 0) {
|
|
386
|
+
tokens.push(columnsAndConstraints.join(', '));
|
|
387
|
+
}
|
|
388
|
+
tokens.push(') ;');
|
|
389
|
+
return tokens.join(' ');
|
|
390
|
+
};
|
|
391
|
+
exports.createTableSQL = createTableSQL;
|
|
392
|
+
var dropTableSQL = function (table) { return "DROP TABLE \"".concat(table.schema, "\".\"").concat(table.title, "\" ;"); };
|
|
393
|
+
exports.dropTableSQL = dropTableSQL;
|
|
394
|
+
var getSequenceName = function (tableTitle, columnKey, column) { var _a, _b; return (_a = column.seqTitle) !== null && _a !== void 0 ? _a : (tableTitle + '_' + ((_b = column.title) !== null && _b !== void 0 ? _b : columnKey) + '_seq'); };
|
|
395
|
+
exports.getSequenceName = getSequenceName;
|
|
396
396
|
//# sourceMappingURL=schema.js.map
|