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,773 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.tryRunP = exports.tryRun = void 0;
|
|
27
|
-
const assert_1 = require("assert");
|
|
28
|
-
const fs = __importStar(require("fs"));
|
|
29
|
-
async function tryRun(desc, func, log) {
|
|
30
|
-
try {
|
|
31
|
-
await func();
|
|
32
|
-
}
|
|
33
|
-
catch (err) {
|
|
34
|
-
console.error(desc + " FAILED:", err);
|
|
35
|
-
log?.("FAIL: ", err);
|
|
36
|
-
console.trace(err);
|
|
37
|
-
setTimeout(() => {
|
|
38
|
-
throw err;
|
|
39
|
-
}, 2000);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.tryRun = tryRun;
|
|
43
|
-
function tryRunP(desc, func, opts) {
|
|
44
|
-
return new Promise(async (rv, rj) => {
|
|
45
|
-
const tout = Number.isFinite(opts?.timeout) ? setTimeout(() => {
|
|
46
|
-
const errMsg = `${desc} failed. Reason: Timout reached: ${opts.timeout}ms`;
|
|
47
|
-
opts?.log?.(errMsg);
|
|
48
|
-
rj(errMsg);
|
|
49
|
-
}, opts.timeout) : undefined;
|
|
50
|
-
try {
|
|
51
|
-
await func(rv, rj);
|
|
52
|
-
clearTimeout(tout);
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
opts?.log?.(`${desc} failed: ` + JSON.stringify(err));
|
|
56
|
-
setTimeout(() => {
|
|
57
|
-
throw err;
|
|
58
|
-
}, 1000);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
exports.tryRunP = tryRunP;
|
|
63
|
-
async function isomorphic(db) {
|
|
64
|
-
console.log("Starting isomorphic queries");
|
|
65
|
-
if (await db.items.count()) {
|
|
66
|
-
console.log("DELETING items");
|
|
67
|
-
/* Access controlled */
|
|
68
|
-
await db.items4.delete({});
|
|
69
|
-
await db.items4_pub.delete({});
|
|
70
|
-
await db.items3.delete({});
|
|
71
|
-
await db.items2.delete({});
|
|
72
|
-
await db.items.delete({});
|
|
73
|
-
}
|
|
74
|
-
await tryRun("Prepare data", async () => {
|
|
75
|
-
await db.items.insert([{ name: "a" }, { name: "a" }, { name: "b" }]);
|
|
76
|
-
console.log(await db.items.find());
|
|
77
|
-
await db.items2.insert([{ name: "a", items_id: 1 }]);
|
|
78
|
-
await db.items3.insert([{ name: "a" }, { name: "za123" }]);
|
|
79
|
-
await db.items4.insert([
|
|
80
|
-
{ name: "abc1", public: "public data", added: new Date('04 Dec 1995 00:12:00 GMT') },
|
|
81
|
-
{ name: "abc2", public: "public data", added: new Date('04 Dec 1995 00:12:00 GMT') },
|
|
82
|
-
{ name: "abcd", public: "public data d", added: new Date('04 Dec 1996 00:12:00 GMT') }
|
|
83
|
-
]);
|
|
84
|
-
/* Ensure */
|
|
85
|
-
await db["*"].insert([{ "*": "a" }, { "*": "a" }, { "*": "b" }]);
|
|
86
|
-
await db[`"*"`].insert([{ [`"*"`]: "a" }, { [`"*"`]: "a" }, { [`"*"`]: "b" }]);
|
|
87
|
-
await db.various.insert([
|
|
88
|
-
{ name: "abc9", added: new Date('04 Dec 1995 00:12:00 GMT'), jsn: { "a": { "b": 2 } } },
|
|
89
|
-
{ name: "abc1", added: new Date('04 Dec 1996 00:12:00 GMT'), jsn: { "a": { "b": 3 } } },
|
|
90
|
-
{ name: "abc81 here", added: new Date('04 Dec 1997 00:12:00 GMT'), jsn: { "a": { "b": 2 } } }
|
|
91
|
-
]);
|
|
92
|
-
// console.log(await db["*"].find())
|
|
93
|
-
});
|
|
94
|
-
await tryRun("getColumns definition", async () => {
|
|
95
|
-
const res = await db.tr2.getColumns("fr");
|
|
96
|
-
// console.log(JSON.stringify(res, null, 2))
|
|
97
|
-
const expected = [
|
|
98
|
-
{
|
|
99
|
-
"label": "Id",
|
|
100
|
-
"name": "id",
|
|
101
|
-
"data_type": "integer",
|
|
102
|
-
"udt_name": "int4",
|
|
103
|
-
"element_type": null,
|
|
104
|
-
is_updatable: true,
|
|
105
|
-
"element_udt_name": null,
|
|
106
|
-
"is_pkey": true,
|
|
107
|
-
"column_default": null,
|
|
108
|
-
"comment": null,
|
|
109
|
-
"ordinal_position": 1,
|
|
110
|
-
"is_nullable": false,
|
|
111
|
-
"references": null,
|
|
112
|
-
"has_default": true,
|
|
113
|
-
"tsDataType": "number",
|
|
114
|
-
"insert": true,
|
|
115
|
-
"select": true,
|
|
116
|
-
"orderBy": true,
|
|
117
|
-
"filter": true,
|
|
118
|
-
"update": true,
|
|
119
|
-
"delete": true
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
"label": "Tr1 id",
|
|
123
|
-
"name": "tr1_id",
|
|
124
|
-
"data_type": "integer",
|
|
125
|
-
"udt_name": "int4",
|
|
126
|
-
"element_type": null,
|
|
127
|
-
is_updatable: true,
|
|
128
|
-
"element_udt_name": null,
|
|
129
|
-
"is_pkey": false,
|
|
130
|
-
"column_default": null,
|
|
131
|
-
"comment": null,
|
|
132
|
-
"ordinal_position": 2,
|
|
133
|
-
"is_nullable": true,
|
|
134
|
-
"references": [{
|
|
135
|
-
"ftable": "tr1",
|
|
136
|
-
"fcols": [
|
|
137
|
-
"id"
|
|
138
|
-
],
|
|
139
|
-
"cols": [
|
|
140
|
-
"tr1_id"
|
|
141
|
-
]
|
|
142
|
-
}],
|
|
143
|
-
"has_default": false,
|
|
144
|
-
"tsDataType": "number",
|
|
145
|
-
"insert": true,
|
|
146
|
-
"select": true,
|
|
147
|
-
"orderBy": true,
|
|
148
|
-
"filter": true,
|
|
149
|
-
"update": true,
|
|
150
|
-
"delete": true
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"label": "fr_t1",
|
|
154
|
-
hint: "hint...",
|
|
155
|
-
min: "a",
|
|
156
|
-
max: "b",
|
|
157
|
-
"name": "t1",
|
|
158
|
-
"data_type": "text",
|
|
159
|
-
"udt_name": "text",
|
|
160
|
-
"element_type": null,
|
|
161
|
-
is_updatable: true,
|
|
162
|
-
"element_udt_name": null,
|
|
163
|
-
"is_pkey": false,
|
|
164
|
-
"column_default": null,
|
|
165
|
-
"comment": null,
|
|
166
|
-
"ordinal_position": 3,
|
|
167
|
-
"is_nullable": true,
|
|
168
|
-
"references": null,
|
|
169
|
-
"has_default": false,
|
|
170
|
-
"tsDataType": "string",
|
|
171
|
-
"insert": true,
|
|
172
|
-
"select": true,
|
|
173
|
-
"orderBy": true,
|
|
174
|
-
"filter": true,
|
|
175
|
-
"update": true,
|
|
176
|
-
"delete": true
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
"label": "en_t2",
|
|
180
|
-
"name": "t2",
|
|
181
|
-
"data_type": "text",
|
|
182
|
-
"udt_name": "text",
|
|
183
|
-
"element_type": null,
|
|
184
|
-
is_updatable: true,
|
|
185
|
-
"element_udt_name": null,
|
|
186
|
-
"is_pkey": false,
|
|
187
|
-
"column_default": null,
|
|
188
|
-
"comment": null,
|
|
189
|
-
"ordinal_position": 4,
|
|
190
|
-
"is_nullable": true,
|
|
191
|
-
"references": null,
|
|
192
|
-
"has_default": false,
|
|
193
|
-
"tsDataType": "string",
|
|
194
|
-
"insert": true,
|
|
195
|
-
"select": true,
|
|
196
|
-
"orderBy": true,
|
|
197
|
-
"filter": true,
|
|
198
|
-
"update": true,
|
|
199
|
-
"delete": true
|
|
200
|
-
}
|
|
201
|
-
];
|
|
202
|
-
assert_1.strict.deepStrictEqual(res, expected);
|
|
203
|
-
const resDynamic = await db.tr2.getColumns("fr", { rule: "update", filter: {}, data: { t2: "a" } });
|
|
204
|
-
assert_1.strict.deepStrictEqual(resDynamic, expected);
|
|
205
|
-
});
|
|
206
|
-
await tryRun("Table config triggers", async () => {
|
|
207
|
-
const tr1 = await db.tr1.insert({});
|
|
208
|
-
const tr2 = await db.tr2.insert({
|
|
209
|
-
tr1_id: 1,
|
|
210
|
-
t1: "a",
|
|
211
|
-
t2: "b"
|
|
212
|
-
});
|
|
213
|
-
try {
|
|
214
|
-
await db.tr2.delete();
|
|
215
|
-
}
|
|
216
|
-
catch (e) {
|
|
217
|
-
}
|
|
218
|
-
const one = await db.tr2.findOne({
|
|
219
|
-
t1: "a",
|
|
220
|
-
t2: "b"
|
|
221
|
-
});
|
|
222
|
-
if (!one) {
|
|
223
|
-
throw "Row missing";
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
await tryRun("$unnest_words", async () => {
|
|
227
|
-
const res = await db.various.find({}, { returnType: "values", select: { name: "$unnest_words" } });
|
|
228
|
-
assert_1.strict.deepStrictEqual(res, [
|
|
229
|
-
'abc9',
|
|
230
|
-
'abc1',
|
|
231
|
-
'abc81',
|
|
232
|
-
'here'
|
|
233
|
-
]);
|
|
234
|
-
});
|
|
235
|
-
/**
|
|
236
|
-
* Group by/Distinct
|
|
237
|
-
*/
|
|
238
|
-
await tryRun("Group by/Distinct", async () => {
|
|
239
|
-
const res = await db.items.find({}, { select: { name: 1 }, groupBy: true });
|
|
240
|
-
const resV = await db.items.find({}, { select: { name: 1 }, groupBy: true, returnType: "values" });
|
|
241
|
-
assert_1.strict.deepStrictEqual(res, [
|
|
242
|
-
{ name: 'a' },
|
|
243
|
-
{ name: 'b' },
|
|
244
|
-
]);
|
|
245
|
-
assert_1.strict.deepStrictEqual(resV, ["a", "b"]);
|
|
246
|
-
});
|
|
247
|
-
/**
|
|
248
|
-
* returnType "value"
|
|
249
|
-
*/
|
|
250
|
-
await tryRun("returnType: value", async () => {
|
|
251
|
-
const resVl = await db.items.find({}, { select: { name: { $array_agg: ["name"] } }, returnType: "value" });
|
|
252
|
-
assert_1.strict.deepStrictEqual(resVl, ["a", "a", "b"]);
|
|
253
|
-
});
|
|
254
|
-
// add getInfo and getCols tests
|
|
255
|
-
// console.log(await db.items.getInfo(), await db.items.getColumns())
|
|
256
|
-
/**
|
|
257
|
-
* TODO -> ADD ALL FILTER TYPES
|
|
258
|
-
*/
|
|
259
|
-
await tryRun("FTS filtering", async () => {
|
|
260
|
-
const res = await db.various.count({ "tsv.@@.to_tsquery": ["a"] });
|
|
261
|
-
assert_1.strict.equal(res, 0);
|
|
262
|
-
const d = await db.various.findOne({ "name.@@.to_tsquery": ["abc81"] }, { select: {
|
|
263
|
-
h: { "$ts_headline_simple": ["name", { plainto_tsquery: "abc81" }] },
|
|
264
|
-
hh: { "$ts_headline": ["name", "abc81"] },
|
|
265
|
-
added: "$date_trunc_2hour",
|
|
266
|
-
addedY: { "$date_trunc_5minute": ["added"] }
|
|
267
|
-
} });
|
|
268
|
-
// console.log(d);
|
|
269
|
-
await db.various.findOne({}, { select: {
|
|
270
|
-
h: { "$ts_headline_simple": ["name", { plainto_tsquery: "abc81" }] },
|
|
271
|
-
hh: { "$ts_headline": ["name", "abc81"] },
|
|
272
|
-
added: "$date_trunc_2hour",
|
|
273
|
-
addedY: { "$date_trunc_5millisecond": ["added"] }
|
|
274
|
-
} });
|
|
275
|
-
/* Dates become strings after reaching client.
|
|
276
|
-
* Serialize col dataTypes and then recast ??
|
|
277
|
-
*/
|
|
278
|
-
assert_1.strict.deepStrictEqual(JSON.parse(JSON.stringify(d)), {
|
|
279
|
-
h: '<b>abc81</b> here',
|
|
280
|
-
hh: '<b>abc81</b> here',
|
|
281
|
-
added: '1997-12-04 00:00:00',
|
|
282
|
-
addedY: '1997-12-04 00:10:00',
|
|
283
|
-
// added: new Date('1997-12-04T00:00:00.000Z'),
|
|
284
|
-
// addedY: new Date('1997-12-04T00:10:00.000Z'),
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
await tryRun("$term_highlight", async () => {
|
|
288
|
-
const term = "abc81";
|
|
289
|
-
const res = await db.various.find({ "hIdx.>": -2 }, { select: {
|
|
290
|
-
h: { $term_highlight: [["name"], term, {}] },
|
|
291
|
-
hFull: { $term_highlight: ["*", "81", {}] },
|
|
292
|
-
hOrdered: { $term_highlight: [["name", "id"], "81", {}] },
|
|
293
|
-
hIdx: { $term_highlight: [["name"], term, { returnType: "index" }] },
|
|
294
|
-
hBool: { $term_highlight: [["name"], term, { returnType: "boolean" }] },
|
|
295
|
-
hObj: { $term_highlight: [["name"], term, { returnType: "object" }] },
|
|
296
|
-
hObjAll: { $term_highlight: ["*", term, { returnType: "object" }] },
|
|
297
|
-
},
|
|
298
|
-
orderBy: { hIdx: -1 }
|
|
299
|
-
});
|
|
300
|
-
// console.log(res[0])
|
|
301
|
-
// console.log(res.map(r => JSON.stringify(r)).join("\n"));//, null, 2))
|
|
302
|
-
assert_1.strict.deepStrictEqual(res[0], {
|
|
303
|
-
h: ["name: ", ["abc81"], " here"],
|
|
304
|
-
/* Search all allowed fields using "*" */
|
|
305
|
-
hFull: [
|
|
306
|
-
'id: 3, h: , name: abc',
|
|
307
|
-
['81'],
|
|
308
|
-
' here, tsv: , jsn: {"a":{"b":2}}, added: 1997-12-04 00:12:00'
|
|
309
|
-
],
|
|
310
|
-
/* Search specific fields in specific order */
|
|
311
|
-
hOrdered: ["name: abc", ["81"], " here, id: 3"],
|
|
312
|
-
hIdx: 6,
|
|
313
|
-
hBool: true,
|
|
314
|
-
hObj: {
|
|
315
|
-
name: [
|
|
316
|
-
'', ['abc81'], ' here'
|
|
317
|
-
]
|
|
318
|
-
},
|
|
319
|
-
hObjAll: {
|
|
320
|
-
name: [
|
|
321
|
-
'', ['abc81'], ' here'
|
|
322
|
-
]
|
|
323
|
-
},
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
await tryRun("funcFilters: $term_highlight", async () => {
|
|
327
|
-
const term = "abc81";
|
|
328
|
-
const res = await db.various.count({ $term_highlight: [["*"], term, { returnType: "boolean" }] });
|
|
329
|
-
assert_1.strict.equal(+res, 1);
|
|
330
|
-
});
|
|
331
|
-
await tryRunP("subscribe", async (resolve, reject) => {
|
|
332
|
-
await db.various.insert({ id: 99 });
|
|
333
|
-
console.log("subscribing");
|
|
334
|
-
const sub = await db.various.subscribe({ id: 99 }, {}, async (items) => {
|
|
335
|
-
const item = items[0];
|
|
336
|
-
if (item && item.name === "zz3zz3") {
|
|
337
|
-
await db.various.delete({ name: "zz3zz3" });
|
|
338
|
-
sub.unsubscribe();
|
|
339
|
-
resolve(true);
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
await db.various.update({ id: 99 }, { name: "zz3zz1" });
|
|
343
|
-
await db.various.update({ id: 99 }, { name: "zz3zz2" });
|
|
344
|
-
await db.various.update({ id: 99 }, { name: "zz3zz3" });
|
|
345
|
-
}, { timeout: 4000 });
|
|
346
|
-
await tryRunP("subscribeOne with throttle", async (resolve, reject) => {
|
|
347
|
-
await db.various.insert({ id: 99 });
|
|
348
|
-
const start = Date.now(); // name: "zz3zz"
|
|
349
|
-
const sub = await db.various.subscribeOne({ id: 99 }, { throttle: 1700 }, async (item) => {
|
|
350
|
-
// const item = items[0]
|
|
351
|
-
// console.log(item)
|
|
352
|
-
const now = Date.now();
|
|
353
|
-
if (item && item.name === "zz3zz2" && now - start > 1600 && now - start < 1800) {
|
|
354
|
-
await db.various.delete({ name: "zz3zz2" });
|
|
355
|
-
sub.unsubscribe();
|
|
356
|
-
resolve(true);
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
await db.various.update({ id: 99 }, { name: "zz3zz1" });
|
|
360
|
-
await db.various.update({ id: 99 }, { name: "zz3zz2" });
|
|
361
|
-
}, { timeout: 4000 });
|
|
362
|
-
await tryRun("JSON filtering", async () => {
|
|
363
|
-
const res = await db.various.count({ "jsn->a->>b": '3' });
|
|
364
|
-
assert_1.strict.equal(res, 1);
|
|
365
|
-
});
|
|
366
|
-
await tryRun("Complex filtering", async () => {
|
|
367
|
-
const res = await db.various.count({
|
|
368
|
-
$and: [
|
|
369
|
-
{
|
|
370
|
-
$filter: [
|
|
371
|
-
{ $year: ["added"] },
|
|
372
|
-
"=",
|
|
373
|
-
'1996'
|
|
374
|
-
]
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
$filter: [
|
|
378
|
-
{ $Mon: ["added"] },
|
|
379
|
-
"=",
|
|
380
|
-
'Dec'
|
|
381
|
-
]
|
|
382
|
-
}
|
|
383
|
-
]
|
|
384
|
-
});
|
|
385
|
-
assert_1.strict.equal(res, 1);
|
|
386
|
-
});
|
|
387
|
-
await tryRun("template_string function", async () => {
|
|
388
|
-
const res = await db.various.findOne({ name: 'abc9' }, { select: { tstr: { $template_string: ["{name} is hehe"] } } });
|
|
389
|
-
const res2 = await db.various.findOne({ name: 'abc9' }, { select: { tstr: { $template_string: ["is hehe"] } } });
|
|
390
|
-
assert_1.strict.equal(res.tstr, "abc9 is hehe");
|
|
391
|
-
assert_1.strict.equal(res2.tstr, "is hehe");
|
|
392
|
-
});
|
|
393
|
-
await tryRun("Between filtering", async () => {
|
|
394
|
-
const res = await db.various.count({
|
|
395
|
-
added: { $between: [
|
|
396
|
-
new Date('06 Dec 1995 00:12:00 GMT'),
|
|
397
|
-
new Date('03 Dec 1997 00:12:00 GMT')
|
|
398
|
-
] }
|
|
399
|
-
});
|
|
400
|
-
assert_1.strict.equal(res, 1);
|
|
401
|
-
});
|
|
402
|
-
await tryRun("In filtering", async () => {
|
|
403
|
-
const res = await db.various.count({
|
|
404
|
-
added: { $in: [
|
|
405
|
-
new Date('04 Dec 1996 00:12:00 GMT')
|
|
406
|
-
] }
|
|
407
|
-
});
|
|
408
|
-
assert_1.strict.equal(res, 1);
|
|
409
|
-
});
|
|
410
|
-
await tryRun("Order by", async () => {
|
|
411
|
-
const res = await db.items.find({}, { select: { name: 1 }, orderBy: [{ key: "name", asc: false, nulls: "first", nullEmpty: true }] });
|
|
412
|
-
assert_1.strict.deepStrictEqual(res, [{ name: 'b' }, { name: 'a' }, { name: 'a' }]);
|
|
413
|
-
});
|
|
414
|
-
await tryRun("Order by aliased func", async () => {
|
|
415
|
-
const res = await db.items.find({}, { select: { uname: { $upper: ["name"] }, count: { $countAll: [] } }, orderBy: { uname: -1 } });
|
|
416
|
-
assert_1.strict.deepStrictEqual(res, [{ uname: 'B', count: '1' }, { uname: 'A', count: '2' }]);
|
|
417
|
-
});
|
|
418
|
-
await tryRun("Order by aggregation", async () => {
|
|
419
|
-
const res = await db.items.find({}, { select: { name: 1, count: { $countAll: [] } }, orderBy: { count: -1 } });
|
|
420
|
-
assert_1.strict.deepStrictEqual(res, [{ name: 'a', count: '2' }, { name: 'b', count: '1' }]);
|
|
421
|
-
});
|
|
422
|
-
await tryRun("Order by colliding alias name", async () => {
|
|
423
|
-
const res = await db.items.find({}, { select: { name: { $countAll: [] }, n: { $left: ["name", 1] } }, orderBy: { name: -1 } });
|
|
424
|
-
assert_1.strict.deepStrictEqual(res, [{ name: '2', n: 'a' }, { name: '1', n: 'b' }]);
|
|
425
|
-
});
|
|
426
|
-
await tryRun("Update batch example", async () => {
|
|
427
|
-
await db.items4.updateBatch([
|
|
428
|
-
[{ name: "abc1" }, { name: "abc" }],
|
|
429
|
-
[{ name: "abc2" }, { name: "abc" }]
|
|
430
|
-
]);
|
|
431
|
-
assert_1.strict.equal(await db.items4.count({ name: "abc" }), 2);
|
|
432
|
-
});
|
|
433
|
-
await tryRun("Function example", async () => {
|
|
434
|
-
const f = await db.items4.findOne({}, { select: { public: 1, p_5: { $left: ["public", 3] } } });
|
|
435
|
-
assert_1.strict.equal(f.p_5.length, 3);
|
|
436
|
-
assert_1.strict.equal(f.p_5, f.public.substr(0, 3));
|
|
437
|
-
// Nested function
|
|
438
|
-
const fg = await db.items2.findOne({}, { select: { id: 1, name: 1, items3: { name: "$upper" } } }); // { $upper: ["public"] } } });
|
|
439
|
-
assert_1.strict.deepStrictEqual(fg, { id: 1, name: 'a', items3: [{ name: 'A' }] });
|
|
440
|
-
// Date utils
|
|
441
|
-
const Mon = await db.items4.findOne({ name: "abc" }, { select: { added: "$Mon" } });
|
|
442
|
-
assert_1.strict.deepStrictEqual(Mon, { added: "Dec" });
|
|
443
|
-
// Date + agg
|
|
444
|
-
const MonAgg = await db.items4.find({ name: "abc" }, { select: { added: "$Mon", public: "$count" } });
|
|
445
|
-
assert_1.strict.deepStrictEqual(MonAgg, [{ added: "Dec", public: '2' }]);
|
|
446
|
-
// Returning
|
|
447
|
-
const returningParam = { returning: { id: 1, name: 1, public: 1, $rowhash: 1, added_day: { "$day": ["added"] } } }; // ctid: 1,
|
|
448
|
-
let i = await db.items4_pub.insert({ name: "abc123", public: "public data", added: new Date('04 Dec 1995 00:12:00 GMT') }, returningParam);
|
|
449
|
-
assert_1.strict.deepStrictEqual(i, { id: 1, name: 'abc123', public: 'public data', $rowhash: '347c26babad535aa697a794af89195fe', added_day: 'monday' }); // , ctid: '(0,1)'
|
|
450
|
-
let u = await db.items4_pub.update({ name: "abc123" }, { public: "public data2" }, returningParam);
|
|
451
|
-
assert_1.strict.deepStrictEqual(u, [{ id: 1, name: 'abc123', public: 'public data2', $rowhash: '9d18ddfbff9e13411d13f82d414644de', added_day: 'monday' }]);
|
|
452
|
-
let d = await db.items4_pub.delete({ name: "abc123" }, returningParam);
|
|
453
|
-
assert_1.strict.deepStrictEqual(d, [{ id: 1, name: 'abc123', public: 'public data2', $rowhash: '9d18ddfbff9e13411d13f82d414644de', added_day: 'monday' }]);
|
|
454
|
-
console.log("TODO: socket.io stringifies dates");
|
|
455
|
-
});
|
|
456
|
-
await tryRun("JSONB filtering", async () => {
|
|
457
|
-
const obj = { propName: 3232 };
|
|
458
|
-
const row = await db.obj_table.insert({ obj }, { returning: "*" });
|
|
459
|
-
const sameRow = await db.obj_table.findOne({ obj });
|
|
460
|
-
const sameRow1 = await db.obj_table.findOne({ obj: { "=": obj } });
|
|
461
|
-
const sameRow2 = await db.obj_table.findOne({ "obj.=": obj });
|
|
462
|
-
const count = await db.obj_table.count({ obj });
|
|
463
|
-
assert_1.strict.deepStrictEqual(row, sameRow);
|
|
464
|
-
assert_1.strict.deepStrictEqual(row, sameRow1);
|
|
465
|
-
assert_1.strict.deepStrictEqual(row, sameRow2);
|
|
466
|
-
assert_1.strict.deepStrictEqual(+count, 1);
|
|
467
|
-
});
|
|
468
|
-
await tryRun("Postgis examples", async () => {
|
|
469
|
-
await db.shapes.delete();
|
|
470
|
-
const p1 = { ST_GeomFromText: ["POINT(-1 1)", 4326] }, p2 = { ST_GeomFromText: ["POINT(-2 2)", 4326] };
|
|
471
|
-
await db.shapes.insert([
|
|
472
|
-
{ geom: p1, geog: p1 },
|
|
473
|
-
{ geom: p2, geog: p2 },
|
|
474
|
-
]);
|
|
475
|
-
/** Basic functions and extent filters */
|
|
476
|
-
const f = await db.shapes.findOne({ $and: [
|
|
477
|
-
{ "geom.&&.st_makeenvelope": [
|
|
478
|
-
-3, 2,
|
|
479
|
-
-2, 2
|
|
480
|
-
] },
|
|
481
|
-
{ "geog.&&.st_makeenvelope": [
|
|
482
|
-
-3, 2,
|
|
483
|
-
-2, 2
|
|
484
|
-
] }
|
|
485
|
-
]
|
|
486
|
-
}, {
|
|
487
|
-
select: {
|
|
488
|
-
geomTxt: { "$ST_AsText": ["geom"] },
|
|
489
|
-
geomGeo: { "$ST_AsGeoJSON": ["geom"] },
|
|
490
|
-
},
|
|
491
|
-
orderBy: "geom"
|
|
492
|
-
});
|
|
493
|
-
assert_1.strict.deepStrictEqual(f, {
|
|
494
|
-
geomGeo: {
|
|
495
|
-
coordinates: [-2, 2],
|
|
496
|
-
type: 'Point'
|
|
497
|
-
},
|
|
498
|
-
geomTxt: 'POINT(-2 2)'
|
|
499
|
-
});
|
|
500
|
-
/**Aggregate functions */
|
|
501
|
-
const aggs = await db.shapes.findOne({}, {
|
|
502
|
-
select: {
|
|
503
|
-
xMin: { "$ST_XMin_Agg": ["geom"] },
|
|
504
|
-
xMax: { "$ST_XMax_Agg": ["geom"] },
|
|
505
|
-
yMin: { "$ST_YMin_Agg": ["geom"] },
|
|
506
|
-
yMax: { "$ST_YMax_Agg": ["geom"] },
|
|
507
|
-
zMin: { "$ST_ZMin_Agg": ["geom"] },
|
|
508
|
-
zMax: { "$ST_ZMax_Agg": ["geom"] },
|
|
509
|
-
extent: { "$ST_Extent": ["geom"] },
|
|
510
|
-
// extent3D: { "$ST_3DExtent": ["geom"] },
|
|
511
|
-
},
|
|
512
|
-
});
|
|
513
|
-
assert_1.strict.deepStrictEqual(aggs, {
|
|
514
|
-
xMax: -1,
|
|
515
|
-
xMin: -2,
|
|
516
|
-
yMax: 2,
|
|
517
|
-
yMin: 1,
|
|
518
|
-
zMax: 0,
|
|
519
|
-
zMin: 0,
|
|
520
|
-
extent: 'BOX(-2 1,-1 2)',
|
|
521
|
-
// extent3D: 'BOX3D(-2 1 0,-1 2 6.952908662134e-310)' <-- looks like a value that will fail tests at some point
|
|
522
|
-
});
|
|
523
|
-
});
|
|
524
|
-
const fileName = "sample_file.txt";
|
|
525
|
-
await tryRun("Local file upload", async () => {
|
|
526
|
-
let str = "This is a string", data = Buffer.from(str, "utf-8"), mediaFile = { data, name: fileName };
|
|
527
|
-
const file = await db.media.insert(mediaFile, { returning: "*" });
|
|
528
|
-
const _data = fs.readFileSync(__dirname + "/server/media/" + file.name);
|
|
529
|
-
assert_1.strict.equal(str, _data.toString('utf8'));
|
|
530
|
-
await tryRun("Nested insert", async () => {
|
|
531
|
-
const { name, media: { extension, content_type, original_name } } = await db.items_with_one_media.insert({ name: "somename.txt", media: mediaFile }, { returning: "*" });
|
|
532
|
-
assert_1.strict.deepStrictEqual({ extension, content_type, original_name }, {
|
|
533
|
-
extension: 'txt',
|
|
534
|
-
content_type: 'text/plain',
|
|
535
|
-
original_name: 'sample_file.txt',
|
|
536
|
-
});
|
|
537
|
-
// const _data = fs.readFileSync(__dirname + "/server/media/"+file.name);
|
|
538
|
-
assert_1.strict.equal(name, "somename.txt");
|
|
539
|
-
});
|
|
540
|
-
// await tryRun("Media col insert", async () => {
|
|
541
|
-
// const resp = await db.items_with_media_cols.insert({ desc: "description", file_id: mediaFile }, { returning: "*" });
|
|
542
|
-
// assert.equal(
|
|
543
|
-
// +(await db.items_with_media_cols.count(resp)),
|
|
544
|
-
// 1
|
|
545
|
-
// );
|
|
546
|
-
// assert.equal(
|
|
547
|
-
// +(await db.media.count({ original_name: 'sample_file.txt', id: resp.file_id })),
|
|
548
|
-
// 1
|
|
549
|
-
// );
|
|
550
|
-
// });
|
|
551
|
-
});
|
|
552
|
-
await tryRun("Local file delete", async () => {
|
|
553
|
-
const file = {
|
|
554
|
-
data: Buffer.from("str", "utf-8"),
|
|
555
|
-
name: "will delete.txt"
|
|
556
|
-
};
|
|
557
|
-
await db.media.insert(file);
|
|
558
|
-
const files = await db.media.find({ original_name: file.name });
|
|
559
|
-
assert_1.strict.equal(files.length, 1);
|
|
560
|
-
const exists0 = fs.existsSync(__dirname + "/server/media/" + files[0].name);
|
|
561
|
-
assert_1.strict.equal(exists0, true);
|
|
562
|
-
await db.media.delete({ original_name: file.name }, { returning: "*" });
|
|
563
|
-
const exists = fs.existsSync(__dirname + "/server/media/" + files[0].name);
|
|
564
|
-
assert_1.strict.equal(exists, false);
|
|
565
|
-
});
|
|
566
|
-
await tryRun("Local file update", async () => {
|
|
567
|
-
const initialStr = "str";
|
|
568
|
-
const newStr = "str new";
|
|
569
|
-
const file = {
|
|
570
|
-
data: Buffer.from(initialStr, "utf-8"),
|
|
571
|
-
name: "will update.txt"
|
|
572
|
-
};
|
|
573
|
-
const newFile = {
|
|
574
|
-
data: Buffer.from(newStr, "utf-8"),
|
|
575
|
-
name: "will update new.txt"
|
|
576
|
-
};
|
|
577
|
-
await db.media.insert(file);
|
|
578
|
-
const original = await db.media.findOne({ original_name: file.name });
|
|
579
|
-
const initialFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
|
|
580
|
-
assert_1.strict.equal(initialStr, initialFileStr);
|
|
581
|
-
await db.media.update({ id: original.id }, newFile);
|
|
582
|
-
const newFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
|
|
583
|
-
assert_1.strict.equal(newStr, newFileStr);
|
|
584
|
-
const newF = await db.media.findOne({ id: original.id });
|
|
585
|
-
assert_1.strict.equal(newF.original_name, newFile.name);
|
|
586
|
-
});
|
|
587
|
-
await tryRun("jsonbSchema validation", async () => {
|
|
588
|
-
/**
|
|
589
|
-
*
|
|
590
|
-
tjson: {
|
|
591
|
-
json: { jsonbSchema: {
|
|
592
|
-
a: { type: "boolean" },
|
|
593
|
-
arr: { enum: ["1", "2", "3"] },
|
|
594
|
-
arr1: { enum: [1, 2, 3] },
|
|
595
|
-
arr2: { type: "integer[]" },
|
|
596
|
-
o: { oneOf: [{ o1: { type: "integer" } }, { o2: { type: "boolean" } }], optional: true },
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
},
|
|
600
|
-
*/
|
|
601
|
-
const json = { a: true, arr: "2", arr1: 3, arr2: [1], arrStr: ["1123.string"] };
|
|
602
|
-
const fo = await db.tjson.insert({ colOneOf: "a", json }, { returning: "*" });
|
|
603
|
-
// assert.deepStrictEqual(fo.json, json);
|
|
604
|
-
await db.tjson.insert({ colOneOf: "a", json: { ...json, o: { o1: 2 } } });
|
|
605
|
-
try {
|
|
606
|
-
await db.tjson.insert({ colOneOf: "a", json: { a: true, arr: "22" } });
|
|
607
|
-
throw "Should have failed";
|
|
608
|
-
}
|
|
609
|
-
catch (e) {
|
|
610
|
-
console.log("Perfect fail");
|
|
611
|
-
// Perfect
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
await tryRun("Exists filter example", async () => {
|
|
615
|
-
const fo = await db.items.findOne(), f = await db.items.find();
|
|
616
|
-
assert_1.strict.deepStrictEqual(fo, { h: null, id: 1, name: 'a' }, "findOne query failed");
|
|
617
|
-
assert_1.strict.deepStrictEqual(f[0], { h: null, id: 1, name: 'a' }, "findOne query failed");
|
|
618
|
-
});
|
|
619
|
-
await tryRun("Result size", async () => {
|
|
620
|
-
const is75bits = await db.items.size({}, { select: { name: 1 } });
|
|
621
|
-
assert_1.strict.equal(is75bits, '75', "Result size query failed");
|
|
622
|
-
});
|
|
623
|
-
await tryRun("Basic exists", async () => {
|
|
624
|
-
const expect0 = await db.items.count({
|
|
625
|
-
$and: [
|
|
626
|
-
{ $exists: { items2: { name: "a" } } },
|
|
627
|
-
{ $exists: { items3: { name: "b" } } },
|
|
628
|
-
]
|
|
629
|
-
});
|
|
630
|
-
assert_1.strict.equal(expect0, 0, "$exists query failed");
|
|
631
|
-
});
|
|
632
|
-
await tryRun("Basic fts with shorthand notation", async () => {
|
|
633
|
-
const res = await db.items.count({
|
|
634
|
-
$and: [
|
|
635
|
-
{ $exists: { items2: { "name.@@.to_tsquery": ["a"] } } },
|
|
636
|
-
{ $exists: { items3: { "name.@@.to_tsquery": ["b"] } } },
|
|
637
|
-
]
|
|
638
|
-
});
|
|
639
|
-
// assert.deepStrictEqual(res, { name: 'a'})
|
|
640
|
-
assert_1.strict.equal(res, 0, "FTS query failed");
|
|
641
|
-
});
|
|
642
|
-
await tryRun("Exists with shortest path wildcard filter example", async () => {
|
|
643
|
-
const expect2 = await db.items.find({
|
|
644
|
-
$and: [
|
|
645
|
-
{ $existsJoined: { "**.items3": { name: "a" } } },
|
|
646
|
-
{ $existsJoined: { items2: { name: "a" } } }
|
|
647
|
-
]
|
|
648
|
-
});
|
|
649
|
-
assert_1.strict.equal(expect2.length, 2, "$existsJoined query failed");
|
|
650
|
-
});
|
|
651
|
-
await tryRun("Exists with exact path filter example", async () => {
|
|
652
|
-
const _expect2 = await db.items.find({
|
|
653
|
-
$and: [
|
|
654
|
-
// { "items2": { name: "a" } },
|
|
655
|
-
// { "items2.items3": { name: "a" } },
|
|
656
|
-
{ $existsJoined: { items2: { name: "a" } } }
|
|
657
|
-
]
|
|
658
|
-
});
|
|
659
|
-
assert_1.strict.equal(_expect2.length, 2, "$existsJoined query failed");
|
|
660
|
-
});
|
|
661
|
-
await tryRun("Not Exists with exact path filter example", async () => {
|
|
662
|
-
const _expect1 = await db.items.find({
|
|
663
|
-
$and: [
|
|
664
|
-
// { "items2": { name: "a" } },
|
|
665
|
-
// { "items2.items3": { name: "a" } },
|
|
666
|
-
{ $notExistsJoined: { items2: { name: "a" } } }
|
|
667
|
-
]
|
|
668
|
-
});
|
|
669
|
-
assert_1.strict.equal(_expect1.length, 1, "$notExistsJoined query failed");
|
|
670
|
-
});
|
|
671
|
-
/* Upsert */
|
|
672
|
-
await tryRun("Upsert example", async () => {
|
|
673
|
-
await db.items.upsert({ name: "tx" }, { name: "tx" });
|
|
674
|
-
await db.items.upsert({ name: "tx" }, { name: "tx" });
|
|
675
|
-
assert_1.strict.equal(await db.items.count({ name: "tx" }), 1, "upsert command failed");
|
|
676
|
-
});
|
|
677
|
-
/* Joins example */
|
|
678
|
-
await tryRun("Joins example", async () => {
|
|
679
|
-
const items = await db.items.find({}, {
|
|
680
|
-
select: {
|
|
681
|
-
"*": 1,
|
|
682
|
-
items3: "*",
|
|
683
|
-
items22: db.leftJoin.items2({}, "*")
|
|
684
|
-
}
|
|
685
|
-
});
|
|
686
|
-
if (!items.length || !items.every(it => Array.isArray(it.items3) && Array.isArray(it.items22))) {
|
|
687
|
-
console.log(items[0].items3);
|
|
688
|
-
throw "Joined select query failed";
|
|
689
|
-
}
|
|
690
|
-
});
|
|
691
|
-
/* Joins duplicate table example */
|
|
692
|
-
await tryRun("Joins repeating table example", async () => {
|
|
693
|
-
const items2 = await db.items.find({}, {
|
|
694
|
-
select: {
|
|
695
|
-
"*": 1,
|
|
696
|
-
items2: "*"
|
|
697
|
-
}
|
|
698
|
-
});
|
|
699
|
-
const items2j = await db.items.find({}, {
|
|
700
|
-
select: {
|
|
701
|
-
"*": 1,
|
|
702
|
-
items2: "*",
|
|
703
|
-
items2j: db.leftJoin.items2({}, "*")
|
|
704
|
-
}
|
|
705
|
-
});
|
|
706
|
-
items2.forEach((d, i) => {
|
|
707
|
-
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2, "Joins duplicate aliased table query failed");
|
|
708
|
-
assert_1.strict.deepStrictEqual(d.items2, items2j[i].items2j, "Joins duplicate aliased table query failed");
|
|
709
|
-
});
|
|
710
|
-
});
|
|
711
|
-
await tryRun("Join aggregate functions example", async () => {
|
|
712
|
-
const singleShortHandAgg = await db.items.findOne({}, { select: { id: "$max" } });
|
|
713
|
-
const singleAgg = await db.items.findOne({}, { select: { id: { "$max": ["id"] } } });
|
|
714
|
-
assert_1.strict.deepStrictEqual(singleShortHandAgg, { id: 4 });
|
|
715
|
-
assert_1.strict.deepStrictEqual(singleAgg, { id: 4 });
|
|
716
|
-
const shortHandAggJoined = await db.items.findOne({ id: 4 }, { select: { id: 1, items2: { name: "$max" } } });
|
|
717
|
-
assert_1.strict.deepStrictEqual(shortHandAggJoined, { id: 4, items2: [] });
|
|
718
|
-
});
|
|
719
|
-
/* $rowhash -> Custom column that returms md5(ctid + allowed select columns). Used in joins & CRUD to bypass PKey details */
|
|
720
|
-
await tryRun("$rowhash example", async () => {
|
|
721
|
-
const rowhash = await db.items.findOne({}, { select: { $rowhash: 1, "*": 1 } });
|
|
722
|
-
const f = { $rowhash: rowhash.$rowhash };
|
|
723
|
-
const rowhashView = await db.v_items.findOne({}, { select: { $rowhash: 1 } });
|
|
724
|
-
const rh1 = await db.items.findOne({ $rowhash: rowhash.$rowhash }, { select: { $rowhash: 1 } });
|
|
725
|
-
const rhView = await db.v_items.findOne({ $rowhash: rowhashView.$rowhash }, { select: { $rowhash: 1 } });
|
|
726
|
-
// console.log({ rowhash, f });
|
|
727
|
-
await db.items.update(f, { name: 'a' });
|
|
728
|
-
// console.log(rowhash, rh1)
|
|
729
|
-
// console.log(rowhashView, rhView)
|
|
730
|
-
if (typeof rowhash.$rowhash !== "string" ||
|
|
731
|
-
typeof rowhashView.$rowhash !== "string" ||
|
|
732
|
-
rowhash.$rowhash !== rh1.$rowhash ||
|
|
733
|
-
rowhashView.$rowhash !== rhView.$rowhash) {
|
|
734
|
-
throw "$rowhash query failed";
|
|
735
|
-
}
|
|
736
|
-
});
|
|
737
|
-
await tryRun("Reference column nested insert", async () => {
|
|
738
|
-
const nestedRow = { name: "nested_insert" };
|
|
739
|
-
const parentRow = { name: "parent insert" };
|
|
740
|
-
const pr = await db.items2.insert({ items_id: nestedRow, ...parentRow }, { returning: "*" });
|
|
741
|
-
const childRows = await db.items.find(nestedRow);
|
|
742
|
-
assert_1.strict.equal(childRows.length, 1);
|
|
743
|
-
assert_1.strict.deepStrictEqual(await db.items2.findOne(parentRow), { hh: null, id: pr.id, ...parentRow, items_id: childRows[0].id });
|
|
744
|
-
});
|
|
745
|
-
await tryRun("Reference column deep nested insert", async () => {
|
|
746
|
-
const pr = await db.items4a.insert({
|
|
747
|
-
items_id: { name: "it" },
|
|
748
|
-
items2_id: { name: "it2", items_id: { name: "it" } },
|
|
749
|
-
name: "it4a"
|
|
750
|
-
}, { returning: "*" });
|
|
751
|
-
const itemsCount = await db.items.count({ name: "it" });
|
|
752
|
-
const items2Count = await db.items2.count({ name: "it2" });
|
|
753
|
-
const items4aCount = await db.items4a.count({ name: "it4a" });
|
|
754
|
-
assert_1.strict.equal(+itemsCount, 2);
|
|
755
|
-
assert_1.strict.equal(+items2Count, 1);
|
|
756
|
-
assert_1.strict.equal(+items4aCount, 1);
|
|
757
|
-
});
|
|
758
|
-
await tryRun("Multi reference column nested insert", async () => {
|
|
759
|
-
await db.items_multi.insert({
|
|
760
|
-
items0_id: { name: "multi" },
|
|
761
|
-
items1_id: { name: "multi" },
|
|
762
|
-
items2_id: { name: "multi" },
|
|
763
|
-
items3_id: { name: "multi" },
|
|
764
|
-
name: "root_multi"
|
|
765
|
-
}, { returning: "*" });
|
|
766
|
-
const itemsCount = await db.items.count({ name: "multi" });
|
|
767
|
-
const multiItem = await db.items_multi.findOne({ name: "root_multi" }, { select: { "*": 1, items: "*" } });
|
|
768
|
-
assert_1.strict.equal(+itemsCount, 4);
|
|
769
|
-
assert_1.strict.equal(multiItem?.name, "root_multi");
|
|
770
|
-
assert_1.strict.equal(multiItem?.items.filter(d => d.name === "multi").length, 4);
|
|
771
|
-
});
|
|
772
|
-
}
|
|
773
|
-
exports.default = isomorphic;
|