prostgles-server 4.0.57 → 4.0.59
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/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +1 -13
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/runSQL.js +2 -2
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +14 -1
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/lib/DboBuilder/getColumns.ts +1 -18
- package/lib/DboBuilder/runSQL.ts +2 -2
- package/lib/Prostgles.ts +3 -3
- package/lib/PubSubManager/PubSubManager.ts +14 -1
- package/package.json +2 -2
- package/tests/client/PID.txt +1 -1
- package/tests/client/package.json +2 -2
- package/tests/client/tsconfig.json +2 -1
- package/tests/isomorphic_queries.ts +11 -9
- package/tests/server/DBoGenerated.d.ts +1 -1
- package/tests/server/dboTypeCheck.ts +3 -3
- package/tests/server/index.ts +7 -6
- package/tests/server/package-lock.json +1 -1
- package/tests/server/package.json +3 -3
- package/tests/server/publishTypeCheck.ts +1 -1
- package/tests/server/tsconfig.json +3 -2
- package/tests/test.sh +2 -0
- package/dist/FileManager.d.ts +0 -143
- package/dist/FileManager.d.ts.map +0 -1
- package/dist/FileManager.js +0 -646
- package/dist/FileManager.js.map +0 -1
- package/dist/TableConfig.d.ts +0 -267
- package/dist/TableConfig.d.ts.map +0 -1
- package/dist/TableConfig.js +0 -463
- package/dist/TableConfig.js.map +0 -1
- package/dist/validation.d.ts +0 -126
- package/dist/validation.d.ts.map +0 -1
- package/dist/validation.js +0 -405
- package/dist/validation.js.map +0 -1
- package/lib/AuthHandler.d.ts +0 -187
- package/lib/AuthHandler.d.ts.map +0 -1
- package/lib/AuthHandler.js +0 -478
- package/lib/DBEventsManager.d.ts +0 -38
- package/lib/DBEventsManager.d.ts.map +0 -1
- package/lib/DBEventsManager.js +0 -140
- package/lib/DBSchemaBuilder.d.ts +0 -13
- package/lib/DBSchemaBuilder.d.ts.map +0 -1
- package/lib/DBSchemaBuilder.js +0 -145
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts +0 -64
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/Functions.js +0 -984
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +0 -73
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +0 -335
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts +0 -8
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +0 -1
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +0 -227
- package/lib/DboBuilder/TableHandler.d.ts +0 -37
- package/lib/DboBuilder/TableHandler.d.ts.map +0 -1
- package/lib/DboBuilder/TableHandler.js +0 -213
- package/lib/DboBuilder/ViewHandler.d.ts +0 -119
- package/lib/DboBuilder/ViewHandler.d.ts.map +0 -1
- package/lib/DboBuilder/ViewHandler.js +0 -1023
- package/lib/DboBuilder/delete.d.ts +0 -6
- package/lib/DboBuilder/delete.d.ts.map +0 -1
- package/lib/DboBuilder/delete.js +0 -128
- package/lib/DboBuilder/find.d.ts +0 -8
- package/lib/DboBuilder/find.d.ts.map +0 -1
- package/lib/DboBuilder/find.js +0 -91
- package/lib/DboBuilder/getColumns.d.ts +0 -12
- package/lib/DboBuilder/getColumns.d.ts.map +0 -1
- package/lib/DboBuilder/getColumns.js +0 -92
- package/lib/DboBuilder/getCondition.d.ts +0 -22
- package/lib/DboBuilder/getCondition.d.ts.map +0 -1
- package/lib/DboBuilder/getCondition.js +0 -236
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts +0 -20
- package/lib/DboBuilder/getSubscribeRelatedTables.d.ts.map +0 -1
- package/lib/DboBuilder/getSubscribeRelatedTables.js +0 -152
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts +0 -3
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +0 -1
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.js +0 -207
- package/lib/DboBuilder/insert.d.ts +0 -6
- package/lib/DboBuilder/insert.d.ts.map +0 -1
- package/lib/DboBuilder/insert.js +0 -180
- package/lib/DboBuilder/insertDataParse.d.ts +0 -12
- package/lib/DboBuilder/insertDataParse.d.ts.map +0 -1
- package/lib/DboBuilder/insertDataParse.js +0 -253
- package/lib/DboBuilder/parseUpdateRules.d.ts +0 -18
- package/lib/DboBuilder/parseUpdateRules.d.ts.map +0 -1
- package/lib/DboBuilder/parseUpdateRules.js +0 -123
- package/lib/DboBuilder/runSQL.d.ts +0 -7
- package/lib/DboBuilder/runSQL.d.ts.map +0 -1
- package/lib/DboBuilder/runSQL.js +0 -135
- package/lib/DboBuilder/subscribe.d.ts +0 -20
- package/lib/DboBuilder/subscribe.d.ts.map +0 -1
- package/lib/DboBuilder/subscribe.js +0 -90
- package/lib/DboBuilder/update.d.ts +0 -6
- package/lib/DboBuilder/update.d.ts.map +0 -1
- package/lib/DboBuilder/update.js +0 -151
- package/lib/DboBuilder/uploadFile.d.ts +0 -7
- package/lib/DboBuilder/uploadFile.d.ts.map +0 -1
- package/lib/DboBuilder/uploadFile.js +0 -53
- package/lib/DboBuilder.d.ts +0 -306
- package/lib/DboBuilder.d.ts.map +0 -1
- package/lib/DboBuilder.js +0 -745
- package/lib/Event_Trigger_Tags.d.ts +0 -4
- package/lib/Event_Trigger_Tags.d.ts.map +0 -1
- package/lib/Event_Trigger_Tags.js +0 -116
- package/lib/FileManager/FileManager.d.ts +0 -135
- package/lib/FileManager/FileManager.d.ts.map +0 -1
- package/lib/FileManager/FileManager.js +0 -303
- package/lib/FileManager/initFileManager.d.ts +0 -4
- package/lib/FileManager/initFileManager.d.ts.map +0 -1
- package/lib/FileManager/initFileManager.js +0 -231
- package/lib/FileManager/parseFile.d.ts +0 -15
- package/lib/FileManager/parseFile.d.ts.map +0 -1
- package/lib/FileManager/parseFile.js +0 -58
- package/lib/FileManager/upload.d.ts +0 -6
- package/lib/FileManager/upload.d.ts.map +0 -1
- package/lib/FileManager/upload.js +0 -98
- package/lib/FileManager/uploadStream.d.ts +0 -5
- package/lib/FileManager/uploadStream.d.ts.map +0 -1
- package/lib/FileManager/uploadStream.js +0 -92
- package/lib/Filtering.d.ts +0 -15
- package/lib/Filtering.d.ts.map +0 -1
- package/lib/Filtering.js +0 -336
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +0 -4
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +0 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +0 -500
- package/lib/JSONBValidation/validation.d.ts +0 -9
- package/lib/JSONBValidation/validation.d.ts.map +0 -1
- package/lib/JSONBValidation/validation.js +0 -131
- package/lib/PostgresNotifListenManager.d.ts +0 -28
- package/lib/PostgresNotifListenManager.d.ts.map +0 -1
- package/lib/PostgresNotifListenManager.js +0 -134
- package/lib/Prostgles.d.ts +0 -289
- package/lib/Prostgles.d.ts.map +0 -1
- package/lib/Prostgles.js +0 -685
- package/lib/PubSubManager/PubSubManager.d.ts +0 -175
- package/lib/PubSubManager/PubSubManager.d.ts.map +0 -1
- package/lib/PubSubManager/PubSubManager.js +0 -452
- package/lib/PubSubManager/addSub.d.ts +0 -8
- package/lib/PubSubManager/addSub.d.ts.map +0 -1
- package/lib/PubSubManager/addSub.js +0 -166
- package/lib/PubSubManager/addSync.d.ts +0 -8
- package/lib/PubSubManager/addSync.d.ts.map +0 -1
- package/lib/PubSubManager/addSync.js +0 -109
- package/lib/PubSubManager/getInitQuery.d.ts +0 -9
- package/lib/PubSubManager/getInitQuery.d.ts.map +0 -1
- package/lib/PubSubManager/getInitQuery.js +0 -552
- package/lib/PubSubManager/initPubSubManager.d.ts +0 -3
- package/lib/PubSubManager/initPubSubManager.d.ts.map +0 -1
- package/lib/PubSubManager/initPubSubManager.js +0 -116
- package/lib/PubSubManager/notifListener.d.ts +0 -5
- package/lib/PubSubManager/notifListener.d.ts.map +0 -1
- package/lib/PubSubManager/notifListener.js +0 -100
- package/lib/PubSubManager/pushSubData.d.ts +0 -3
- package/lib/PubSubManager/pushSubData.d.ts.map +0 -1
- package/lib/PubSubManager/pushSubData.js +0 -51
- package/lib/PublishParser.d.ts +0 -284
- package/lib/PublishParser.d.ts.map +0 -1
- package/lib/PublishParser.js +0 -421
- package/lib/SchemaWatch.d.ts +0 -13
- package/lib/SchemaWatch.d.ts.map +0 -1
- package/lib/SchemaWatch.js +0 -35
- package/lib/SyncReplication.d.ts +0 -34
- package/lib/SyncReplication.d.ts.map +0 -1
- package/lib/SyncReplication.js +0 -412
- package/lib/TableConfig/TableConfig.d.ts +0 -284
- package/lib/TableConfig/TableConfig.d.ts.map +0 -1
- package/lib/TableConfig/TableConfig.js +0 -437
- package/lib/TableConfig/getColumnDefinitionQuery.d.ts +0 -27
- package/lib/TableConfig/getColumnDefinitionQuery.d.ts.map +0 -1
- package/lib/TableConfig/getColumnDefinitionQuery.js +0 -87
- package/lib/TableConfig/getConstraintDefinitionQueries.d.ts +0 -34
- package/lib/TableConfig/getConstraintDefinitionQueries.d.ts.map +0 -1
- package/lib/TableConfig/getConstraintDefinitionQueries.js +0 -65
- package/lib/TableConfig/getFutureTableSchema.d.ts +0 -15
- package/lib/TableConfig/getFutureTableSchema.d.ts.map +0 -1
- package/lib/TableConfig/getFutureTableSchema.js +0 -43
- package/lib/TableConfig/getTableColumnQueries.d.ts +0 -16
- package/lib/TableConfig/getTableColumnQueries.d.ts.map +0 -1
- package/lib/TableConfig/getTableColumnQueries.js +0 -107
- package/lib/index.d.ts +0 -5
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -7
- package/lib/shortestPath.d.ts +0 -10
- package/lib/shortestPath.d.ts.map +0 -1
- package/lib/shortestPath.js +0 -111
- package/lib/utils.d.ts +0 -3
- package/lib/utils.d.ts.map +0 -1
- package/lib/utils.js +0 -12
- package/tests/client/index.d.ts +0 -2
- package/tests/client/index.d.ts.map +0 -1
- package/tests/client/index.js +0 -80
- package/tests/client/index.js.map +0 -1
- package/tests/client_only_queries.d.ts +0 -4
- package/tests/client_only_queries.d.ts.map +0 -1
- package/tests/client_only_queries.js +0 -282
- package/tests/config_test/DBoGenerated.d.ts +0 -388
- package/tests/config_test/index.js +0 -174
- package/tests/config_test/index.js.map +0 -1
- package/tests/isomorphic_queries.d.ts +0 -9
- package/tests/isomorphic_queries.d.ts.map +0 -1
- package/tests/isomorphic_queries.js +0 -773
- package/tests/manual_test/DBoGenerated.d.ts +0 -398
- package/tests/manual_test/index.d.ts +0 -2
- package/tests/manual_test/index.d.ts.map +0 -1
- package/tests/manual_test/index.js +0 -65
- package/tests/server/dboTypeCheck.d.ts +0 -2
- package/tests/server/dboTypeCheck.d.ts.map +0 -1
- package/tests/server/dboTypeCheck.js +0 -27
- package/tests/server/index.d.ts +0 -2
- package/tests/server/index.d.ts.map +0 -1
- package/tests/server/index.js +0 -507
- package/tests/server/publishTypeCheck.d.ts +0 -2
- package/tests/server/publishTypeCheck.d.ts.map +0 -1
- package/tests/server/publishTypeCheck.js +0 -130
- package/tests/server_only_queries.d.ts +0 -2
- package/tests/server_only_queries.d.ts.map +0 -1
- package/tests/server_only_queries.js +0 -19
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TableConfig.d.ts","sourceRoot":"","sources":["TableConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getIndexes = exports.CONSTRAINT_TYPES = exports.parseI18N = void 0;
|
|
4
|
-
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
-
const DboBuilder_1 = require("../DboBuilder");
|
|
6
|
-
const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
7
|
-
const getTableColumnQueries_1 = require("./getTableColumnQueries");
|
|
8
|
-
const getFutureTableSchema_1 = require("./getFutureTableSchema");
|
|
9
|
-
const getConstraintDefinitionQueries_1 = require("./getConstraintDefinitionQueries");
|
|
10
|
-
const parseI18N = (params) => {
|
|
11
|
-
const { config, lang, defaultLang, defaultValue } = params;
|
|
12
|
-
if (config) {
|
|
13
|
-
if ((0, DboBuilder_1.isPlainObject)(config)) {
|
|
14
|
-
//@ts-ignore
|
|
15
|
-
return config[lang] ?? config[defaultLang];
|
|
16
|
-
}
|
|
17
|
-
else if (typeof config === "string") {
|
|
18
|
-
return config;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return defaultValue;
|
|
22
|
-
};
|
|
23
|
-
exports.parseI18N = parseI18N;
|
|
24
|
-
exports.CONSTRAINT_TYPES = ["PRIMARY KEY", "UNIQUE", "CHECK"]; // "FOREIGN KEY",
|
|
25
|
-
/**
|
|
26
|
-
* Will be run between initSQL and fileTable
|
|
27
|
-
*/
|
|
28
|
-
class TableConfigurator {
|
|
29
|
-
instanceId = Math.random();
|
|
30
|
-
config;
|
|
31
|
-
get dbo() {
|
|
32
|
-
if (!this.prostgles.dbo)
|
|
33
|
-
throw "this.prostgles.dbo missing";
|
|
34
|
-
return this.prostgles.dbo;
|
|
35
|
-
}
|
|
36
|
-
get db() {
|
|
37
|
-
if (!this.prostgles.db)
|
|
38
|
-
throw "this.prostgles.db missing";
|
|
39
|
-
return this.prostgles.db;
|
|
40
|
-
}
|
|
41
|
-
// sidKeyName: string;
|
|
42
|
-
prostgles;
|
|
43
|
-
constructor(prostgles) {
|
|
44
|
-
this.config = prostgles.opts.tableConfig;
|
|
45
|
-
this.prostgles = prostgles;
|
|
46
|
-
}
|
|
47
|
-
getColumnConfig = (tableName, colName) => {
|
|
48
|
-
const tconf = this.config?.[tableName];
|
|
49
|
-
if (tconf && "columns" in tconf) {
|
|
50
|
-
return tconf.columns?.[colName];
|
|
51
|
-
}
|
|
52
|
-
return undefined;
|
|
53
|
-
};
|
|
54
|
-
getTableInfo = (params) => {
|
|
55
|
-
const tconf = this.config?.[params.tableName];
|
|
56
|
-
return {
|
|
57
|
-
label: (0, exports.parseI18N)({ config: tconf?.info?.label, lang: params.lang, defaultLang: "en", defaultValue: params.tableName })
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
getColInfo = (params) => {
|
|
61
|
-
const colConf = this.getColumnConfig(params.table, params.col);
|
|
62
|
-
let result = undefined;
|
|
63
|
-
if (colConf) {
|
|
64
|
-
if ((0, prostgles_types_1.isObject)(colConf)) {
|
|
65
|
-
const { jsonbSchema, jsonbSchemaType, info } = colConf;
|
|
66
|
-
result = {
|
|
67
|
-
...(result ?? {}),
|
|
68
|
-
...info,
|
|
69
|
-
...((jsonbSchema || jsonbSchemaType) && { jsonbSchema: { nullable: colConf.nullable, ...(jsonbSchema || { type: jsonbSchemaType }) } })
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Get labels from TableConfig if specified
|
|
73
|
-
*/
|
|
74
|
-
if (colConf.label) {
|
|
75
|
-
const { lang } = params;
|
|
76
|
-
const lbl = colConf?.label;
|
|
77
|
-
if (["string", "object"].includes(typeof lbl)) {
|
|
78
|
-
if (typeof lbl === "string") {
|
|
79
|
-
result ??= {};
|
|
80
|
-
result.label = lbl;
|
|
81
|
-
}
|
|
82
|
-
else if (lang && (lbl?.[lang] || lbl?.en)) {
|
|
83
|
-
result ??= {};
|
|
84
|
-
result.label = (lbl?.[lang]) || lbl?.en;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
};
|
|
92
|
-
checkColVal = (params) => {
|
|
93
|
-
const conf = this.getColInfo(params);
|
|
94
|
-
if (conf) {
|
|
95
|
-
const { value } = params;
|
|
96
|
-
const { min, max } = conf;
|
|
97
|
-
if (min !== undefined && value !== undefined && value < min)
|
|
98
|
-
throw `${params.col} must be less than ${min}`;
|
|
99
|
-
if (max !== undefined && value !== undefined && value > max)
|
|
100
|
-
throw `${params.col} must be greater than ${max}`;
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
getJoinInfo = (sourceTable, targetTable) => {
|
|
104
|
-
if (this.config &&
|
|
105
|
-
sourceTable in this.config &&
|
|
106
|
-
this.config[sourceTable] &&
|
|
107
|
-
"columns" in this.config[sourceTable]) {
|
|
108
|
-
const td = this.config[sourceTable];
|
|
109
|
-
if ("columns" in td && td.columns?.[targetTable]) {
|
|
110
|
-
const cd = td.columns[targetTable];
|
|
111
|
-
if ((0, prostgles_types_1.isObject)(cd) && "joinDef" in cd) {
|
|
112
|
-
if (!cd.joinDef)
|
|
113
|
-
throw "cd.joinDef missing";
|
|
114
|
-
const { joinDef } = cd;
|
|
115
|
-
const res = {
|
|
116
|
-
expectOne: false,
|
|
117
|
-
paths: joinDef.map(({ sourceTable, targetTable: table, on }) => ({
|
|
118
|
-
source: sourceTable,
|
|
119
|
-
target: targetTable,
|
|
120
|
-
table,
|
|
121
|
-
on
|
|
122
|
-
})),
|
|
123
|
-
};
|
|
124
|
-
return res;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return undefined;
|
|
129
|
-
};
|
|
130
|
-
prevInitQueryHistory;
|
|
131
|
-
initialising = false;
|
|
132
|
-
async init() {
|
|
133
|
-
let changedSchema = false;
|
|
134
|
-
const failedQueries = [];
|
|
135
|
-
this.initialising = true;
|
|
136
|
-
const queryHistory = [];
|
|
137
|
-
let queries = [];
|
|
138
|
-
const makeQuery = (q) => q.filter(v => v.trim().length).map(v => v.trim().endsWith(";") ? v : `${v};`).join("\n");
|
|
139
|
-
const runQueries = async (_queries = queries) => {
|
|
140
|
-
let q = makeQuery(queries);
|
|
141
|
-
if (!_queries.some(q => q.trim().length))
|
|
142
|
-
return 0;
|
|
143
|
-
q = `/* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */ \n\n` + q;
|
|
144
|
-
this.log(q);
|
|
145
|
-
(0, PubSubManager_1.log)(q);
|
|
146
|
-
queryHistory.push(q);
|
|
147
|
-
await this.db.multi(q).catch(err => {
|
|
148
|
-
(0, PubSubManager_1.log)({ err, q });
|
|
149
|
-
failedQueries.push({ query: q, error: err });
|
|
150
|
-
return Promise.reject(err);
|
|
151
|
-
});
|
|
152
|
-
changedSchema = true;
|
|
153
|
-
_queries = [];
|
|
154
|
-
queries = [];
|
|
155
|
-
return 1;
|
|
156
|
-
};
|
|
157
|
-
if (!this.config || !this.prostgles.pgp) {
|
|
158
|
-
throw "config or pgp missing";
|
|
159
|
-
}
|
|
160
|
-
const MAX_IDENTIFIER_LENGTH = +(await this.db.one("SHOW max_identifier_length;")).max_identifier_length;
|
|
161
|
-
if (!Number.isFinite(MAX_IDENTIFIER_LENGTH))
|
|
162
|
-
throw `Could not obtain a valid max_identifier_length`;
|
|
163
|
-
const asName = (v) => {
|
|
164
|
-
if (v.length > MAX_IDENTIFIER_LENGTH - 1) {
|
|
165
|
-
throw `The identifier name provided (${v}) is longer than the allowed limit (max_identifier_length - 1 = ${MAX_IDENTIFIER_LENGTH - 1} characters )\n Longest allowed: ${(0, prostgles_types_1.asName)(v.slice(0, MAX_IDENTIFIER_LENGTH - 1))} `;
|
|
166
|
-
}
|
|
167
|
-
return (0, prostgles_types_1.asName)(v);
|
|
168
|
-
};
|
|
169
|
-
let migrations;
|
|
170
|
-
if (this.prostgles.opts.tableConfigMigrations) {
|
|
171
|
-
const { onMigrate, version, versionTableName = "schema_version" } = this.prostgles.opts.tableConfigMigrations;
|
|
172
|
-
await this.db.any(`
|
|
173
|
-
/* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID} */
|
|
174
|
-
CREATE TABLE IF NOT EXISTS ${asName(versionTableName)}(id NUMERIC PRIMARY KEY, table_config JSONB NOT NULL)
|
|
175
|
-
`);
|
|
176
|
-
migrations = { version, table: versionTableName };
|
|
177
|
-
let latestVersion;
|
|
178
|
-
try {
|
|
179
|
-
latestVersion = Number((await this.db.oneOrNone(`SELECT MAX(id) as v FROM ${asName(versionTableName)}`)).v);
|
|
180
|
-
}
|
|
181
|
-
catch (e) {
|
|
182
|
-
}
|
|
183
|
-
if (latestVersion === version) {
|
|
184
|
-
const isLatest = (await this.db.oneOrNone(`SELECT table_config = \${table_config} as v FROM ${asName(versionTableName)} WHERE id = \${version}`, { version, table_config: this.config })).v;
|
|
185
|
-
if (isLatest) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (!latestVersion || latestVersion < version) {
|
|
190
|
-
await onMigrate({ db: this.db, oldVersion: latestVersion, getConstraints: (table, col, types) => (0, getConstraintDefinitionQueries_1.getColConstraints)({ db: this.db, table, column: col, types }) });
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/* Create lookup tables */
|
|
194
|
-
for (const [tableNameRaw, tableConf] of Object.entries(this.config)) {
|
|
195
|
-
const tableName = asName(tableNameRaw);
|
|
196
|
-
if ("isLookupTable" in tableConf && Object.keys(tableConf.isLookupTable?.values).length) {
|
|
197
|
-
const { dropIfExists = false, dropIfExistsCascade = false } = tableConf;
|
|
198
|
-
const isDropped = dropIfExists || dropIfExistsCascade;
|
|
199
|
-
if (dropIfExistsCascade) {
|
|
200
|
-
queries.push(`DROP TABLE IF EXISTS ${tableName} CASCADE;`);
|
|
201
|
-
}
|
|
202
|
-
else if (dropIfExists) {
|
|
203
|
-
queries.push(`DROP TABLE IF EXISTS ${tableName};`);
|
|
204
|
-
}
|
|
205
|
-
const rows = Object.keys(tableConf.isLookupTable?.values).map(id => ({ id, ...(tableConf.isLookupTable?.values[id]) }));
|
|
206
|
-
if (isDropped || !this.dbo?.[tableNameRaw]) {
|
|
207
|
-
const columnNames = Object.keys(rows[0]).filter(k => k !== "id");
|
|
208
|
-
queries.push(`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
209
|
-
id TEXT PRIMARY KEY
|
|
210
|
-
${columnNames.length ? (", " + columnNames.map(k => asName(k) + " TEXT ").join(", ")) : ""}
|
|
211
|
-
);`);
|
|
212
|
-
rows.map(row => {
|
|
213
|
-
const values = this.prostgles.pgp.helpers.values(row);
|
|
214
|
-
queries.push(this.prostgles.pgp.as.format(`INSERT INTO ${tableName} (${["id", ...columnNames].map(t => asName(t)).join(", ")}) ` + " VALUES ${values:raw} ;", { values }));
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
if (queries.length) {
|
|
220
|
-
await runQueries(queries);
|
|
221
|
-
await this.prostgles.refreshDBO();
|
|
222
|
-
}
|
|
223
|
-
/* Create/Alter columns */
|
|
224
|
-
for (const [tableName, tableConf] of Object.entries(this.config)) {
|
|
225
|
-
const tableHandler = this.dbo[tableName];
|
|
226
|
-
/** These have already been created */
|
|
227
|
-
if ("isLookupTable" in tableConf) {
|
|
228
|
-
continue;
|
|
229
|
-
}
|
|
230
|
-
const ALTER_TABLE_Q = `ALTER TABLE ${asName(tableName)}`;
|
|
231
|
-
const coldef = await (0, getTableColumnQueries_1.getTableColumnQueries)({ db: this.db, tableConf: tableConf, tableHandler: tableHandler, tableName });
|
|
232
|
-
if (coldef) {
|
|
233
|
-
queries.push(coldef.fullQuery);
|
|
234
|
-
}
|
|
235
|
-
/** CONSTRAINTS */
|
|
236
|
-
const constraintDefs = (0, getConstraintDefinitionQueries_1.getConstraintDefinitionQueries)({ tableName, tableConf: tableConf });
|
|
237
|
-
if (coldef?.isCreate) {
|
|
238
|
-
queries.push(...constraintDefs?.map(c => c.alterQuery) ?? []);
|
|
239
|
-
}
|
|
240
|
-
else if (coldef) {
|
|
241
|
-
const fullSchema = await (0, getFutureTableSchema_1.getFutureTableSchema)({ db: this.db, tableName, columnDefs: coldef.columnDefs, constraintDefs });
|
|
242
|
-
const futureCons = fullSchema.constraints.map(nc => ({
|
|
243
|
-
...nc,
|
|
244
|
-
isNamed: constraintDefs?.some(c => c.name === nc.name)
|
|
245
|
-
}));
|
|
246
|
-
/** Run this first to ensure any dropped cols drop their constraints as well */
|
|
247
|
-
await runQueries(queries);
|
|
248
|
-
const currCons = await (0, getConstraintDefinitionQueries_1.getColConstraints)({ db: this.db, table: tableName });
|
|
249
|
-
/** Drop removed/modified */
|
|
250
|
-
currCons.forEach(c => {
|
|
251
|
-
if (!futureCons.some(nc => nc.definition === c.definition && (!nc.isNamed || nc.name === c.name))) {
|
|
252
|
-
queries.push(`${ALTER_TABLE_Q} DROP CONSTRAINT ${asName(c.name)};`);
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
/** Add missing named constraints */
|
|
256
|
-
constraintDefs?.forEach(c => {
|
|
257
|
-
if (c.name && !currCons.some(cc => cc.name === c.name)) {
|
|
258
|
-
const fc = futureCons.find(nc => nc.name === c.name);
|
|
259
|
-
if (fc) {
|
|
260
|
-
queries.push(`${ALTER_TABLE_Q} ADD CONSTRAINT ${asName(c.name)} ${c.content};`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
/** Add remaining missing constraints */
|
|
265
|
-
futureCons
|
|
266
|
-
.filter(nc => !currCons.some(c => c.definition === nc.definition))
|
|
267
|
-
.forEach(c => {
|
|
268
|
-
queries.push(`${ALTER_TABLE_Q} ADD ${c.definition};`);
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
if ("indexes" in tableConf && tableConf.indexes) {
|
|
272
|
-
/*
|
|
273
|
-
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON [ ONLY ] table_name [ USING method ]
|
|
274
|
-
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
|
|
275
|
-
[ INCLUDE ( column_name [, ...] ) ]
|
|
276
|
-
[ NULLS [ NOT ] DISTINCT ]
|
|
277
|
-
[ WITH ( storage_parameter [= value] [, ... ] ) ]
|
|
278
|
-
[ TABLESPACE tablespace_name ]
|
|
279
|
-
[ WHERE predicate ]
|
|
280
|
-
*/
|
|
281
|
-
const currIndexes = await (0, exports.getIndexes)(this.db, tableName, "public");
|
|
282
|
-
Object.entries(tableConf.indexes).forEach(([indexName, { columns, concurrently, replace, unique, using, where = "" }]) => {
|
|
283
|
-
if (replace || typeof replace !== "boolean" && tableConf.replaceUniqueIndexes) {
|
|
284
|
-
queries.push(`DROP INDEX IF EXISTS ${asName(indexName)};`);
|
|
285
|
-
}
|
|
286
|
-
if (!currIndexes.some(idx => idx.indexname === indexName)) {
|
|
287
|
-
queries.push([
|
|
288
|
-
"CREATE",
|
|
289
|
-
unique && "UNIQUE",
|
|
290
|
-
concurrently && "CONCURRENTLY",
|
|
291
|
-
`INDEX ${asName(indexName)} ON ${asName(tableName)}`,
|
|
292
|
-
using && ("USING " + using),
|
|
293
|
-
`(${columns})`,
|
|
294
|
-
where && `WHERE ${where}`
|
|
295
|
-
].filter(v => v).join(" ") + ";");
|
|
296
|
-
}
|
|
297
|
-
});
|
|
298
|
-
}
|
|
299
|
-
const { triggers, dropIfExists, dropIfExistsCascade } = tableConf;
|
|
300
|
-
if (triggers) {
|
|
301
|
-
const isDropped = dropIfExists || dropIfExistsCascade;
|
|
302
|
-
const existingTriggers = await this.dbo.sql(`
|
|
303
|
-
SELECT event_object_table
|
|
304
|
-
,trigger_name
|
|
305
|
-
FROM information_schema.triggers
|
|
306
|
-
WHERE event_object_table = \${tableName}
|
|
307
|
-
ORDER BY event_object_table
|
|
308
|
-
`, { tableName }, { returnType: "rows" });
|
|
309
|
-
// const existingTriggerFuncs = await this.dbo.sql!(`
|
|
310
|
-
// SELECT p.oid,proname,prosrc,u.usename
|
|
311
|
-
// FROM pg_proc p
|
|
312
|
-
// JOIN pg_user u ON u.usesysid = p.proowner
|
|
313
|
-
// WHERE prorettype = 2279;
|
|
314
|
-
// `, {}, { returnType: "rows" }) as { proname: string }[];
|
|
315
|
-
Object.entries(triggers).forEach(([triggerFuncName, trigger]) => {
|
|
316
|
-
const funcNameParsed = asName(triggerFuncName);
|
|
317
|
-
let addedFunc = false;
|
|
318
|
-
const addFuncDef = () => {
|
|
319
|
-
if (addedFunc)
|
|
320
|
-
return;
|
|
321
|
-
addedFunc = true;
|
|
322
|
-
queries.push(`
|
|
323
|
-
CREATE OR REPLACE FUNCTION ${funcNameParsed}()
|
|
324
|
-
RETURNS trigger
|
|
325
|
-
LANGUAGE plpgsql
|
|
326
|
-
AS
|
|
327
|
-
$$
|
|
328
|
-
|
|
329
|
-
${trigger.query}
|
|
330
|
-
|
|
331
|
-
$$;
|
|
332
|
-
`);
|
|
333
|
-
};
|
|
334
|
-
trigger.actions.forEach(action => {
|
|
335
|
-
const triggerActionName = triggerFuncName + "_" + action;
|
|
336
|
-
const triggerActionNameParsed = asName(triggerActionName);
|
|
337
|
-
if (isDropped) {
|
|
338
|
-
queries.push(`DROP TRIGGER IF EXISTS ${triggerActionNameParsed} ON ${tableName};`);
|
|
339
|
-
}
|
|
340
|
-
if (isDropped || !existingTriggers.some(t => t.trigger_name === triggerActionName)) {
|
|
341
|
-
addFuncDef();
|
|
342
|
-
const newTableName = action !== "delete" ? "NEW TABLE AS new_table" : "";
|
|
343
|
-
const oldTableName = action !== "insert" ? "OLD TABLE AS old_table" : "";
|
|
344
|
-
queries.push(`
|
|
345
|
-
CREATE TRIGGER ${triggerActionNameParsed}
|
|
346
|
-
${trigger.type} ${action} ON ${tableName}
|
|
347
|
-
REFERENCING ${newTableName} ${oldTableName}
|
|
348
|
-
FOR EACH ${trigger.forEach}
|
|
349
|
-
EXECUTE PROCEDURE ${funcNameParsed}();
|
|
350
|
-
`);
|
|
351
|
-
}
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
if (queries.length) {
|
|
357
|
-
const q = makeQuery(queries);
|
|
358
|
-
this.log("TableConfig >>>> ", q);
|
|
359
|
-
try {
|
|
360
|
-
await runQueries(queries);
|
|
361
|
-
}
|
|
362
|
-
catch (err) {
|
|
363
|
-
this.initialising = false;
|
|
364
|
-
console.error("TableConfig error: ", err);
|
|
365
|
-
if (err.position) {
|
|
366
|
-
const pos = +err.position;
|
|
367
|
-
if (Number.isInteger(pos)) {
|
|
368
|
-
return Promise.reject(err.toString() + "\n At:" + q.slice(pos - 50, pos + 50));
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
return Promise.reject(err);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
if (migrations) {
|
|
375
|
-
await this.db.any(`INSERT INTO ${migrations.table}(id, table_config) VALUES (${(0, PubSubManager_1.asValue)(migrations.version)}, ${(0, PubSubManager_1.asValue)(this.config)}) ON CONFLICT DO NOTHING;`);
|
|
376
|
-
}
|
|
377
|
-
this.initialising = false;
|
|
378
|
-
if (changedSchema && !failedQueries.length) {
|
|
379
|
-
if (!this.prevInitQueryHistory) {
|
|
380
|
-
this.prevInitQueryHistory = queryHistory;
|
|
381
|
-
}
|
|
382
|
-
else if (this.prevInitQueryHistory.join() !== queryHistory.join()) {
|
|
383
|
-
this.prostgles.init(this.prostgles.opts.onReady, "TableConfig finish");
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
console.error("TableConfig loop bug", queryHistory);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
if (failedQueries.length) {
|
|
390
|
-
console.error("Table config failed queries: ", failedQueries);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
log = (...args) => {
|
|
394
|
-
if (this.prostgles.opts.DEBUG_MODE) {
|
|
395
|
-
console.log("TableConfig: \n", ...args);
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
}
|
|
399
|
-
exports.default = TableConfigurator;
|
|
400
|
-
const getIndexes = async (db, tableName, schema) => {
|
|
401
|
-
const indexQuery = `
|
|
402
|
-
SELECT n.nspname as schemaname,
|
|
403
|
-
c.relname as indexname,
|
|
404
|
-
pg_get_indexdef(c.oid) as indexdef,
|
|
405
|
-
format('%I', c.relname) as escaped_identifier,
|
|
406
|
-
CASE c.relkind WHEN 'r'
|
|
407
|
-
THEN 'table' WHEN 'v'
|
|
408
|
-
THEN 'view' WHEN 'm'
|
|
409
|
-
THEN 'materialized view'
|
|
410
|
-
WHEN 'i' THEN 'index'
|
|
411
|
-
WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special'
|
|
412
|
-
WHEN 't' THEN 'TOAST table' WHEN 'f' THEN 'foreign table'
|
|
413
|
-
WHEN 'p' THEN 'partitioned table' WHEN 'I' THEN 'partitioned index' END as "type",
|
|
414
|
-
pg_catalog.pg_get_userbyid(c.relowner) as "owner",
|
|
415
|
-
c2.relname as tablename,
|
|
416
|
-
CASE c.relpersistence WHEN 'p' THEN 'permanent' WHEN 't' THEN 'temporary'
|
|
417
|
-
WHEN 'u' THEN 'unlogged' END as "persistence",
|
|
418
|
-
am.amname as "access_method",
|
|
419
|
-
pg_catalog.pg_size_pretty(pg_catalog.pg_table_size(c.oid)) as "size",
|
|
420
|
-
pg_catalog.obj_description(c.oid, 'pg_class') as "description"
|
|
421
|
-
FROM pg_catalog.pg_class c
|
|
422
|
-
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
|
423
|
-
LEFT JOIN pg_catalog.pg_am am ON am.oid = c.relam
|
|
424
|
-
LEFT JOIN pg_catalog.pg_index i ON i.indexrelid = c.oid
|
|
425
|
-
LEFT JOIN pg_catalog.pg_class c2 ON i.indrelid = c2.oid
|
|
426
|
-
WHERE c.relkind IN ('i','I','')
|
|
427
|
-
AND n.nspname <> 'pg_catalog'
|
|
428
|
-
AND n.nspname !~ '^pg_toast'
|
|
429
|
-
AND n.nspname <> 'information_schema'
|
|
430
|
-
AND pg_catalog.pg_table_is_visible(c.oid)
|
|
431
|
-
AND c2.relname = \${tableName}
|
|
432
|
-
AND n.nspname = \${schema}
|
|
433
|
-
ORDER BY 1,2;
|
|
434
|
-
`;
|
|
435
|
-
return db.any(indexQuery, { tableName, schema });
|
|
436
|
-
};
|
|
437
|
-
exports.getIndexes = getIndexes;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { DB } from "../Prostgles";
|
|
2
|
-
import { ColumnConfig } from "./TableConfig";
|
|
3
|
-
import pgPromise from "pg-promise";
|
|
4
|
-
type Args = {
|
|
5
|
-
column: string;
|
|
6
|
-
colConf: ColumnConfig;
|
|
7
|
-
db: DB;
|
|
8
|
-
table: string;
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Column create statement for a given config
|
|
12
|
-
*/
|
|
13
|
-
export declare const getColumnDefinitionQuery: ({ colConf: colConfRaw, column, db, table }: Args) => Promise<string | undefined>;
|
|
14
|
-
export type ColumnMinimalInfo = {
|
|
15
|
-
table_name: string;
|
|
16
|
-
table_schema: string;
|
|
17
|
-
column_name: string;
|
|
18
|
-
column_default: string | null;
|
|
19
|
-
udt_name: string;
|
|
20
|
-
nullable: boolean;
|
|
21
|
-
};
|
|
22
|
-
export declare const getTableColumns: ({ db, table }: {
|
|
23
|
-
db: DB | pgPromise.ITask<{}>;
|
|
24
|
-
table: string;
|
|
25
|
-
}) => Promise<ColumnMinimalInfo[]>;
|
|
26
|
-
export {};
|
|
27
|
-
//# sourceMappingURL=getColumnDefinitionQuery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getColumnDefinitionQuery.d.ts","sourceRoot":"","sources":["getColumnDefinitionQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAGlC,OAAO,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,EAAE,EAAE,EAAE,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,+CAAsD,IAAI,KAAG,QAAQ,MAAM,GAAG,SAAS,CAyE3H,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AACF,eAAO,MAAM,eAAe;QAAyB,EAAE,GAAG,UAAU,KAAK,CAAC,EAAE,CAAC;WAAS,MAAM;MAAK,QAAQ,iBAAiB,EAAE,CAS3H,CAAA"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getTableColumns = exports.getColumnDefinitionQuery = void 0;
|
|
4
|
-
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
-
const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
6
|
-
const validate_jsonb_schema_sql_1 = require("../JSONBValidation/validate_jsonb_schema_sql");
|
|
7
|
-
/**
|
|
8
|
-
* Column create statement for a given config
|
|
9
|
-
*/
|
|
10
|
-
const getColumnDefinitionQuery = async ({ colConf: colConfRaw, column, db, table }) => {
|
|
11
|
-
const colConf = typeof colConfRaw === "string" ? { sqlDefinition: colConfRaw } : colConfRaw;
|
|
12
|
-
const colNameEsc = (0, prostgles_types_1.asName)(column);
|
|
13
|
-
const getColTypeDef = (colConf, pgType) => {
|
|
14
|
-
const { nullable, defaultValue } = colConf;
|
|
15
|
-
return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${(0, PubSubManager_1.asValue)(defaultValue)} ` : ""}`;
|
|
16
|
-
};
|
|
17
|
-
const jsonbSchema = ("jsonbSchema" in colConf && colConf.jsonbSchema) ? { jsonbSchema: colConf.jsonbSchema, jsonbSchemaType: undefined } :
|
|
18
|
-
("jsonbSchemaType" in colConf && colConf.jsonbSchemaType) ? { jsonbSchema: undefined, jsonbSchemaType: colConf.jsonbSchemaType } :
|
|
19
|
-
undefined;
|
|
20
|
-
if ("references" in colConf && colConf.references) {
|
|
21
|
-
const { tableName: lookupTable, columnName: lookupCol = "id" } = colConf.references;
|
|
22
|
-
return ` ${colNameEsc} ${getColTypeDef(colConf.references, "TEXT")} REFERENCES ${lookupTable} (${lookupCol}) `;
|
|
23
|
-
}
|
|
24
|
-
else if ("sqlDefinition" in colConf && colConf.sqlDefinition) {
|
|
25
|
-
return ` ${colNameEsc} ${colConf.sqlDefinition} `;
|
|
26
|
-
}
|
|
27
|
-
else if ("isText" in colConf && colConf.isText) {
|
|
28
|
-
let checks = "";
|
|
29
|
-
const colChecks = [];
|
|
30
|
-
if (colConf.lowerCased) {
|
|
31
|
-
colChecks.push(`${colNameEsc} = LOWER(${colNameEsc})`);
|
|
32
|
-
}
|
|
33
|
-
if (colConf.trimmed) {
|
|
34
|
-
colChecks.push(`${colNameEsc} = BTRIM(${colNameEsc})`);
|
|
35
|
-
}
|
|
36
|
-
if (colChecks.length) {
|
|
37
|
-
checks = `CHECK (${colChecks.join(" AND ")})`;
|
|
38
|
-
}
|
|
39
|
-
return ` ${colNameEsc} ${getColTypeDef(colConf, "TEXT")} ${checks}`;
|
|
40
|
-
}
|
|
41
|
-
else if (jsonbSchema) {
|
|
42
|
-
const jsonbSchemaStr = (0, PubSubManager_1.asValue)({
|
|
43
|
-
...(0, prostgles_types_1.pickKeys)(colConf, ["enum", "nullable", "info"]),
|
|
44
|
-
...(jsonbSchema.jsonbSchemaType ? { type: jsonbSchema.jsonbSchemaType } : jsonbSchema.jsonbSchema)
|
|
45
|
-
}) + "::TEXT";
|
|
46
|
-
/** Validate default value against jsonbSchema */
|
|
47
|
-
const validationQuery = `SELECT ${validate_jsonb_schema_sql_1.VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${(0, PubSubManager_1.asValue)(colConf.defaultValue) + "::JSONB"}, ${(0, PubSubManager_1.asValue)({ table, column })}) as v`;
|
|
48
|
-
if (colConf.defaultValue) {
|
|
49
|
-
const failedDefault = (err) => {
|
|
50
|
-
return { msg: `Default value (${colConf.defaultValue}) for ${table}.${column} does not satisfy the jsonb constraint check: ${validationQuery}`, err };
|
|
51
|
-
};
|
|
52
|
-
try {
|
|
53
|
-
const row = await db.oneOrNone(validationQuery);
|
|
54
|
-
if (!row?.v) {
|
|
55
|
-
throw "Error";
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
catch (e) {
|
|
59
|
-
throw failedDefault(e);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return ` ${colNameEsc} ${getColTypeDef(colConf, "JSONB")} CHECK(${validate_jsonb_schema_sql_1.VALIDATE_SCHEMA_FUNCNAME}(${jsonbSchemaStr}, ${colNameEsc}, ${(0, PubSubManager_1.asValue)({ table, column })} ))`;
|
|
63
|
-
}
|
|
64
|
-
else if ("enum" in colConf) {
|
|
65
|
-
if (!colConf.enum?.length)
|
|
66
|
-
throw new Error("colConf.enum Must not be empty");
|
|
67
|
-
const type = colConf.enum.every(v => Number.isFinite(v)) ? "NUMERIC" : "TEXT";
|
|
68
|
-
const checks = colConf.enum.map(v => `${colNameEsc} = ${(0, PubSubManager_1.asValue)(v)}`).join(" OR ");
|
|
69
|
-
return ` ${colNameEsc} ${type} ${colConf.nullable ? "" : "NOT NULL"} ${"defaultValue" in colConf ? ` DEFAULT ${(0, PubSubManager_1.asValue)(colConf.defaultValue)}` : ""} CHECK(${checks})`;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
return undefined;
|
|
73
|
-
// throw "Unknown column config: " + JSON.stringify(colConf);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
exports.getColumnDefinitionQuery = getColumnDefinitionQuery;
|
|
77
|
-
const getTableColumns = ({ db, table }) => {
|
|
78
|
-
return db.manyOrNone(`
|
|
79
|
-
SELECT table_name,
|
|
80
|
-
table_schema, column_name,
|
|
81
|
-
column_default, udt_name,
|
|
82
|
-
is_nullable = 'YES' as nullable
|
|
83
|
-
FROM information_schema.columns
|
|
84
|
-
WHERE table_name = $1
|
|
85
|
-
`, [table]);
|
|
86
|
-
};
|
|
87
|
-
exports.getTableColumns = getTableColumns;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import pgPromise from "pg-promise";
|
|
2
|
-
import { DB } from "../Prostgles";
|
|
3
|
-
import { TableConfig } from "./TableConfig";
|
|
4
|
-
type Args = {
|
|
5
|
-
tableName: string;
|
|
6
|
-
tableConf: TableConfig[string];
|
|
7
|
-
};
|
|
8
|
-
export type ConstraintDef = {
|
|
9
|
-
/**
|
|
10
|
-
* Named constraints are used to show a relevant error message
|
|
11
|
-
*/
|
|
12
|
-
name?: string;
|
|
13
|
-
content: string;
|
|
14
|
-
alterQuery: string;
|
|
15
|
-
};
|
|
16
|
-
export declare const getConstraintDefinitionQueries: ({ tableConf, tableName }: Args) => ConstraintDef[] | undefined;
|
|
17
|
-
export type ColConstraint = {
|
|
18
|
-
name: string;
|
|
19
|
-
table: string;
|
|
20
|
-
type: "c" | "p" | "u" | "f";
|
|
21
|
-
cols: Array<string>;
|
|
22
|
-
definition: string;
|
|
23
|
-
schema: string;
|
|
24
|
-
};
|
|
25
|
-
type ColConstraintsArgs = {
|
|
26
|
-
db: DB | pgPromise.ITask<{}>;
|
|
27
|
-
table?: string;
|
|
28
|
-
column?: string;
|
|
29
|
-
types?: ColConstraint["type"][];
|
|
30
|
-
};
|
|
31
|
-
export declare const getColConstraintsQuery: ({ column, table, types }: Omit<ColConstraintsArgs, "db">) => string;
|
|
32
|
-
export declare const getColConstraints: ({ db, column, table, types }: ColConstraintsArgs) => Promise<ColConstraint[]>;
|
|
33
|
-
export {};
|
|
34
|
-
//# sourceMappingURL=getConstraintDefinitionQueries.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getConstraintDefinitionQueries.d.ts","sourceRoot":"","sources":["getConstraintDefinitionQueries.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAE/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,eAAO,MAAM,8BAA8B,6BAA8B,IAAI,KAAG,aAAa,EAAE,GAAG,SA6BjG,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC5B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAA;AACD,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;CACjC,CAAA;AACD,eAAO,MAAM,sBAAsB,6BAA8B,KAAK,kBAAkB,EAAE,IAAI,CAAC,WAyB9F,CAAA;AACD,eAAO,MAAM,iBAAiB,iCAAkC,kBAAkB,KAAI,QAAQ,aAAa,EAAE,CAG5G,CAAA"}
|