@peers-app/peers-sdk 0.14.0 → 0.15.0
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/context/data-context.d.ts +4 -4
- package/dist/context/data-context.js +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/context/index.js +4 -0
- package/dist/context/user-context-singleton.js +13 -14
- package/dist/context/user-context.d.ts +4 -4
- package/dist/context/user-context.js +48 -31
- package/dist/data/assistants.d.ts +1 -1
- package/dist/data/assistants.js +35 -24
- package/dist/data/change-tracking.d.ts +8 -8
- package/dist/data/change-tracking.js +45 -39
- package/dist/data/channels.js +5 -5
- package/dist/data/data-locks.d.ts +2 -2
- package/dist/data/data-locks.js +21 -23
- package/dist/data/data-locks.test.js +73 -75
- package/dist/data/device-sync-info.d.ts +1 -1
- package/dist/data/device-sync-info.js +4 -4
- package/dist/data/devices.d.ts +1 -1
- package/dist/data/devices.js +9 -12
- package/dist/data/embeddings.js +14 -11
- package/dist/data/files/file-read-stream.d.ts +2 -2
- package/dist/data/files/file-read-stream.js +23 -14
- package/dist/data/files/file-write-stream.d.ts +2 -2
- package/dist/data/files/file-write-stream.js +8 -8
- package/dist/data/files/file.types.d.ts +2 -2
- package/dist/data/files/file.types.js +17 -11
- package/dist/data/files/files.d.ts +6 -6
- package/dist/data/files/files.js +17 -19
- package/dist/data/files/files.test.js +213 -214
- package/dist/data/files/index.d.ts +4 -4
- package/dist/data/files/index.js +4 -4
- package/dist/data/group-member-roles.js +2 -2
- package/dist/data/group-members.d.ts +5 -5
- package/dist/data/group-members.js +27 -18
- package/dist/data/group-members.test.js +73 -73
- package/dist/data/group-permissions.d.ts +3 -3
- package/dist/data/group-permissions.js +13 -11
- package/dist/data/group-share.d.ts +2 -2
- package/dist/data/group-share.js +29 -24
- package/dist/data/groups.d.ts +4 -4
- package/dist/data/groups.js +27 -19
- package/dist/data/groups.test.js +44 -44
- package/dist/data/index.d.ts +6 -6
- package/dist/data/index.js +6 -6
- package/dist/data/knowledge/peer-types.js +9 -9
- package/dist/data/messages.d.ts +5 -5
- package/dist/data/messages.js +43 -30
- package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
- package/dist/data/orm/client-proxy.data-source.js +10 -12
- package/dist/data/orm/cursor.d.ts +1 -1
- package/dist/data/orm/cursor.js +2 -2
- package/dist/data/orm/cursor.test.js +92 -93
- package/dist/data/orm/data-query.d.ts +3 -3
- package/dist/data/orm/data-query.js +24 -18
- package/dist/data/orm/data-query.mongo.d.ts +1 -1
- package/dist/data/orm/data-query.mongo.js +49 -51
- package/dist/data/orm/data-query.mongo.test.js +173 -204
- package/dist/data/orm/data-query.sqlite.d.ts +1 -1
- package/dist/data/orm/data-query.sqlite.js +84 -73
- package/dist/data/orm/data-query.sqlite.test.js +164 -176
- package/dist/data/orm/data-query.test.js +216 -224
- package/dist/data/orm/decorators.js +3 -3
- package/dist/data/orm/dependency-injection.test.js +53 -56
- package/dist/data/orm/doc.d.ts +4 -4
- package/dist/data/orm/doc.js +17 -21
- package/dist/data/orm/event-registry.d.ts +1 -1
- package/dist/data/orm/event-registry.test.js +16 -16
- package/dist/data/orm/factory.d.ts +2 -2
- package/dist/data/orm/factory.js +33 -33
- package/dist/data/orm/index.d.ts +10 -10
- package/dist/data/orm/index.js +10 -10
- package/dist/data/orm/multi-cursors.d.ts +1 -1
- package/dist/data/orm/multi-cursors.js +6 -6
- package/dist/data/orm/multi-cursors.test.js +152 -144
- package/dist/data/orm/sql.data-source.d.ts +7 -7
- package/dist/data/orm/sql.data-source.js +88 -93
- package/dist/data/orm/sql.data-source.test.js +109 -101
- package/dist/data/orm/subscribable.data-source.d.ts +4 -4
- package/dist/data/orm/subscribable.data-source.js +5 -5
- package/dist/data/orm/table-container-events.test.js +34 -26
- package/dist/data/orm/table-container.d.ts +6 -6
- package/dist/data/orm/table-container.js +33 -21
- package/dist/data/orm/table-container.test.js +64 -53
- package/dist/data/orm/table-definitions.system.d.ts +3 -3
- package/dist/data/orm/table-definitions.system.js +3 -3
- package/dist/data/orm/table-definitions.type.d.ts +5 -5
- package/dist/data/orm/table-dependencies.d.ts +2 -2
- package/dist/data/orm/table.d.ts +5 -5
- package/dist/data/orm/table.event-source.test.js +105 -115
- package/dist/data/orm/table.js +35 -34
- package/dist/data/orm/types.d.ts +3 -3
- package/dist/data/orm/types.js +26 -25
- package/dist/data/orm/types.test.js +166 -92
- package/dist/data/package-permissions.d.ts +1 -1
- package/dist/data/package-permissions.js +2 -2
- package/dist/data/package-version-permissions.d.ts +1 -1
- package/dist/data/package-version-permissions.js +2 -2
- package/dist/data/package-versions.d.ts +9 -9
- package/dist/data/package-versions.js +47 -33
- package/dist/data/packages.d.ts +2 -2
- package/dist/data/packages.js +36 -18
- package/dist/data/packages.utils.d.ts +2 -2
- package/dist/data/packages.utils.js +4 -4
- package/dist/data/persistent-vars.d.ts +15 -15
- package/dist/data/persistent-vars.js +165 -154
- package/dist/data/table-definitions-table.d.ts +5 -5
- package/dist/data/table-definitions-table.js +13 -12
- package/dist/data/tool-tests.js +6 -6
- package/dist/data/tools.js +29 -19
- package/dist/data/user-permissions.d.ts +1 -1
- package/dist/data/user-permissions.js +5 -5
- package/dist/data/user-permissions.test.js +90 -88
- package/dist/data/user-trust-levels.js +10 -10
- package/dist/data/users.d.ts +4 -4
- package/dist/data/users.js +16 -15
- package/dist/data/voice-messages.d.ts +2 -2
- package/dist/data/voice-messages.js +13 -13
- package/dist/data/welcome-modal.pvar.js +3 -1
- package/dist/data/workflow-logs.js +26 -18
- package/dist/data/workflow-runs.d.ts +6 -6
- package/dist/data/workflow-runs.js +70 -44
- package/dist/data/workflows.d.ts +2 -2
- package/dist/data/workflows.js +7 -9
- package/dist/device/binary-peer-connection-v2.d.ts +7 -7
- package/dist/device/binary-peer-connection-v2.js +32 -28
- package/dist/device/binary-peer-connection-v2.test.js +80 -67
- package/dist/device/binary-peer-connection.d.ts +7 -7
- package/dist/device/binary-peer-connection.js +29 -28
- package/dist/device/binary-peer-connection.test.js +35 -31
- package/dist/device/connection.d.ts +5 -5
- package/dist/device/connection.js +59 -48
- package/dist/device/connection.test.js +74 -68
- package/dist/device/device-election.d.ts +2 -2
- package/dist/device/device-election.js +25 -20
- package/dist/device/device-election.test.js +35 -36
- package/dist/device/device.d.ts +2 -2
- package/dist/device/device.js +10 -4
- package/dist/device/device.test.js +16 -17
- package/dist/device/get-trust-level-fn.d.ts +2 -2
- package/dist/device/get-trust-level-fn.js +22 -11
- package/dist/device/get-trust-level-fn.test.js +58 -58
- package/dist/device/socket-io-binary-peer.d.ts +1 -1
- package/dist/device/socket-io-binary-peer.js +16 -13
- package/dist/device/socket.type.d.ts +2 -2
- package/dist/device/streamed-socket.d.ts +2 -2
- package/dist/device/streamed-socket.js +8 -8
- package/dist/device/streamed-socket.test.js +40 -40
- package/dist/device/tx-encoding.test.js +77 -77
- package/dist/events.d.ts +1 -1
- package/dist/events.js +5 -2
- package/dist/group-invite/group-invite.js +110 -19
- package/dist/group-invite/group-invite.pvars.d.ts +2 -2
- package/dist/group-invite/group-invite.pvars.js +21 -13
- package/dist/group-invite/group-invite.types.d.ts +1 -1
- package/dist/group-invite/index.d.ts +3 -3
- package/dist/group-invite/index.js +1 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +30 -25
- package/dist/keys.d.ts +3 -3
- package/dist/keys.js +31 -30
- package/dist/keys.test.js +69 -61
- package/dist/logging/console-logger.d.ts +1 -1
- package/dist/logging/console-logger.js +35 -40
- package/dist/logging/console-logger.test.js +115 -115
- package/dist/logging/console-logs.table.d.ts +3 -3
- package/dist/logging/console-logs.table.js +28 -23
- package/dist/mentions.js +16 -12
- package/dist/observable.d.ts +2 -2
- package/dist/observable.js +15 -9
- package/dist/observable.test.js +47 -47
- package/dist/package-loader/get-require.js +3 -4
- package/dist/package-loader/package-loader.d.ts +2 -2
- package/dist/package-loader/package-loader.js +52 -34
- package/dist/peers-ui/peers-ui.d.ts +2 -2
- package/dist/peers-ui/peers-ui.js +2 -4
- package/dist/peers-ui/peers-ui.types.d.ts +3 -3
- package/dist/peers-ui/peers-ui.types.js +0 -1
- package/dist/rpc-types.d.ts +61 -59
- package/dist/rpc-types.js +61 -55
- package/dist/serial-json.d.ts +1 -1
- package/dist/serial-json.js +50 -43
- package/dist/serial-json.test.js +22 -22
- package/dist/system-ids.js +8 -8
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/tools-factory.d.ts +1 -1
- package/dist/tools/tools-factory.js +2 -2
- package/dist/types/assistant-runner-args.d.ts +3 -3
- package/dist/types/peer-device.d.ts +1 -1
- package/dist/types/peers-package.d.ts +3 -3
- package/dist/types/workflow-logger.d.ts +1 -1
- package/dist/types/workflow-run-context.d.ts +4 -4
- package/dist/types/workflow.d.ts +4 -4
- package/dist/types/workflow.js +27 -14
- package/dist/types/zod-types.d.ts +2 -1
- package/dist/types/zod-types.js +9 -3
- package/dist/user-connect/connection-code.d.ts +1 -1
- package/dist/user-connect/connection-code.js +7 -7
- package/dist/user-connect/connection-code.test.js +106 -106
- package/dist/user-connect/index.d.ts +3 -3
- package/dist/user-connect/index.js +1 -1
- package/dist/user-connect/user-connect.pvars.js +13 -11
- package/dist/user-connect/user-connect.types.d.ts +3 -3
- package/dist/users.query.d.ts +2 -2
- package/dist/users.query.js +40 -30
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +34 -32
- package/dist/utils.test.js +12 -8
- package/dist/workflow-log-formatter.d.ts +1 -1
- package/dist/workflow-log-formatter.js +17 -18
- package/package.json +14 -8
|
@@ -15,29 +15,29 @@ function dataFilterToSqlWhere(filter) {
|
|
|
15
15
|
return handleFilterObject(filter);
|
|
16
16
|
}
|
|
17
17
|
function handleOrArray(filters) {
|
|
18
|
-
const conditions = filters.map(f => dataFilterToSqlWhere(f));
|
|
19
|
-
const orStatement = conditions.join(
|
|
20
|
-
return `(${orStatement ||
|
|
18
|
+
const conditions = filters.map((f) => dataFilterToSqlWhere(f));
|
|
19
|
+
const orStatement = conditions.join(" OR ").trim();
|
|
20
|
+
return `(${orStatement || "1=1"})`;
|
|
21
21
|
}
|
|
22
22
|
function handleFilterObject(filter) {
|
|
23
23
|
const fieldNames = Object.keys(filter);
|
|
24
24
|
if (!fieldNames.length) {
|
|
25
|
-
return
|
|
25
|
+
return "(1=1)";
|
|
26
26
|
}
|
|
27
|
-
const conditions = fieldNames.map(name => handleFilterField(name, filter[name]));
|
|
28
|
-
return `(${conditions.join(
|
|
27
|
+
const conditions = fieldNames.map((name) => handleFilterField(name, filter[name]));
|
|
28
|
+
return `(${conditions.join(" AND ")})`;
|
|
29
29
|
}
|
|
30
30
|
function handleFilterField(name, value) {
|
|
31
|
-
if (name ===
|
|
31
|
+
if (name === "$or") {
|
|
32
32
|
return handleOrOperator(value);
|
|
33
33
|
}
|
|
34
|
-
if (name ===
|
|
34
|
+
if (name === "$and") {
|
|
35
35
|
return handleAndOperator(value);
|
|
36
36
|
}
|
|
37
|
-
if (name ===
|
|
37
|
+
if (name === "$substr") {
|
|
38
38
|
return substrDirectiveToSqlite(value);
|
|
39
39
|
}
|
|
40
|
-
if (name ===
|
|
40
|
+
if (name === "$expr") {
|
|
41
41
|
return handleExprOperator(value);
|
|
42
42
|
}
|
|
43
43
|
return handleFieldCondition(name, value);
|
|
@@ -48,16 +48,19 @@ function handleFieldCondition(fieldName, value) {
|
|
|
48
48
|
return `"${escapedName}" IS NULL`;
|
|
49
49
|
}
|
|
50
50
|
if ((0, lodash_1.isArray)(value)) {
|
|
51
|
-
throw new Error(`Invalid filter: Arrays are not allowed as direct field values. Use $in instead: { ${fieldName}: { $in: [${value
|
|
51
|
+
throw new Error(`Invalid filter: Arrays are not allowed as direct field values. Use $in instead: { ${fieldName}: { $in: [${value
|
|
52
|
+
.slice(0, 2)
|
|
53
|
+
.map((v) => (typeof v === "string" ? `'${v}'` : v))
|
|
54
|
+
.join(", ")}${value.length > 2 ? ", ..." : ""}] } }`);
|
|
52
55
|
}
|
|
53
|
-
if (typeof value ===
|
|
56
|
+
if (typeof value === "object") {
|
|
54
57
|
return handleObjectValue(escapedName, value);
|
|
55
58
|
}
|
|
56
59
|
return `"${escapedName}" = ${dataFieldScalarToSqlValue(value)}`;
|
|
57
60
|
}
|
|
58
61
|
function handleObjectValue(fieldName, value) {
|
|
59
62
|
const keys = Object.keys(value);
|
|
60
|
-
if (keys.length !== 1 || !keys[0].startsWith(
|
|
63
|
+
if (keys.length !== 1 || !keys[0].startsWith("$")) {
|
|
61
64
|
throw new Error(`Invalid object value for field ${fieldName}`);
|
|
62
65
|
}
|
|
63
66
|
const operator = keys[0];
|
|
@@ -66,40 +69,40 @@ function handleObjectValue(fieldName, value) {
|
|
|
66
69
|
}
|
|
67
70
|
function handleFieldOperator(fieldName, operator, value) {
|
|
68
71
|
switch (operator) {
|
|
69
|
-
case
|
|
72
|
+
case "$in":
|
|
70
73
|
return handleInOperator(fieldName, value);
|
|
71
|
-
case
|
|
74
|
+
case "$nin":
|
|
72
75
|
return handleNinOperator(fieldName, value);
|
|
73
|
-
case
|
|
76
|
+
case "$matchWords":
|
|
74
77
|
return handleMatchWordsOperator(fieldName, value);
|
|
75
|
-
case
|
|
78
|
+
case "$exists":
|
|
76
79
|
return handleExistsOperator(fieldName, value);
|
|
77
|
-
case
|
|
80
|
+
case "$ne":
|
|
78
81
|
return handleNeOperator(fieldName, value);
|
|
79
|
-
case
|
|
80
|
-
case
|
|
81
|
-
case
|
|
82
|
-
case
|
|
83
|
-
case
|
|
82
|
+
case "$eq":
|
|
83
|
+
case "$gt":
|
|
84
|
+
case "$gte":
|
|
85
|
+
case "$lt":
|
|
86
|
+
case "$lte":
|
|
84
87
|
return handleComparisonOperator(fieldName, operator, value);
|
|
85
88
|
default:
|
|
86
89
|
throw new Error(`Unknown operator: ${operator}`);
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
function handleOrOperator(value) {
|
|
90
|
-
const conditions = value.map(f => dataFilterToSqlWhere(f));
|
|
91
|
-
const orStatement = conditions.join(
|
|
92
|
-
return `(${orStatement ||
|
|
93
|
+
const conditions = value.map((f) => dataFilterToSqlWhere(f));
|
|
94
|
+
const orStatement = conditions.join(" OR ").trim();
|
|
95
|
+
return `(${orStatement || "1=1"})`;
|
|
93
96
|
}
|
|
94
97
|
function handleAndOperator(value) {
|
|
95
98
|
if (value.length === 0) {
|
|
96
|
-
return
|
|
99
|
+
return "(1=1)";
|
|
97
100
|
}
|
|
98
|
-
const conditions = value.map(f => dataFilterToSqlWhere(f));
|
|
99
|
-
return `(${conditions.join(
|
|
101
|
+
const conditions = value.map((f) => dataFilterToSqlWhere(f));
|
|
102
|
+
return `(${conditions.join(" AND ")})`;
|
|
100
103
|
}
|
|
101
104
|
function handleExprOperator(value) {
|
|
102
|
-
let expr =
|
|
105
|
+
let expr = "";
|
|
103
106
|
let lhsSet = false;
|
|
104
107
|
for (const exprPart of Object.values(value)) {
|
|
105
108
|
if (!lhsSet) {
|
|
@@ -118,24 +121,27 @@ function handleInOperator(fieldName, value) {
|
|
|
118
121
|
if (!(0, lodash_1.isArray)(value)) {
|
|
119
122
|
throw new Error(`$in value must be an array`);
|
|
120
123
|
}
|
|
121
|
-
const inValues = value.map(v => dataFilterToSqlWhere(v)).join(
|
|
124
|
+
const inValues = value.map((v) => dataFilterToSqlWhere(v)).join(", ");
|
|
122
125
|
return `"${fieldName}" IN (${inValues})`;
|
|
123
126
|
}
|
|
124
127
|
function handleNinOperator(fieldName, value) {
|
|
125
128
|
if (!(0, lodash_1.isArray)(value)) {
|
|
126
129
|
throw new Error(`$nin value must be an array`);
|
|
127
130
|
}
|
|
128
|
-
const ninValues = value.map(v => dataFilterToSqlWhere(v)).join(
|
|
131
|
+
const ninValues = value.map((v) => dataFilterToSqlWhere(v)).join(", ");
|
|
129
132
|
return `"${fieldName}" NOT IN (${ninValues})`;
|
|
130
133
|
}
|
|
131
134
|
function handleMatchWordsOperator(fieldName, value) {
|
|
132
|
-
if (typeof value !==
|
|
135
|
+
if (typeof value !== "string") {
|
|
133
136
|
throw new Error(`$matchWords value must be a string`);
|
|
134
137
|
}
|
|
135
|
-
return value
|
|
138
|
+
return value
|
|
139
|
+
.split(" ")
|
|
140
|
+
.map((word) => {
|
|
136
141
|
const escapedWord = word.replace(/'/g, "''");
|
|
137
142
|
return `"${fieldName}" LIKE '%${escapedWord}%'`;
|
|
138
|
-
})
|
|
143
|
+
})
|
|
144
|
+
.join(" AND ");
|
|
139
145
|
}
|
|
140
146
|
function handleExistsOperator(fieldName, value) {
|
|
141
147
|
if (value) {
|
|
@@ -151,12 +157,12 @@ function handleNeOperator(fieldName, value) {
|
|
|
151
157
|
}
|
|
152
158
|
function handleComparisonOperator(fieldName, operator, value) {
|
|
153
159
|
const sqlOperator = {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
+
$eq: "=",
|
|
161
|
+
$ne: "<>",
|
|
162
|
+
$gt: ">",
|
|
163
|
+
$gte: ">=",
|
|
164
|
+
$lt: "<",
|
|
165
|
+
$lte: "<=",
|
|
160
166
|
}[operator];
|
|
161
167
|
if (!sqlOperator) {
|
|
162
168
|
throw new Error(`Unknown operator: ${operator}`);
|
|
@@ -168,28 +174,26 @@ function escapeFieldName(name) {
|
|
|
168
174
|
return name.replace(/"/g, `""`);
|
|
169
175
|
}
|
|
170
176
|
function isScalarValue(value) {
|
|
171
|
-
return
|
|
172
|
-
(0, lodash_1.isDate)(value) ||
|
|
173
|
-
value === null);
|
|
177
|
+
return typeof value !== "object" || (0, lodash_1.isDate)(value) || value === null;
|
|
174
178
|
}
|
|
175
179
|
function dataFieldScalarToSqlValue(value) {
|
|
176
180
|
if (value === undefined || value === null) {
|
|
177
|
-
return
|
|
181
|
+
return "NULL";
|
|
178
182
|
}
|
|
179
|
-
else if (typeof value ===
|
|
180
|
-
return value ?
|
|
183
|
+
else if (typeof value === "boolean") {
|
|
184
|
+
return value ? "1" : "0";
|
|
181
185
|
}
|
|
182
|
-
else if (typeof value ===
|
|
186
|
+
else if (typeof value === "number") {
|
|
183
187
|
return String(value);
|
|
184
188
|
}
|
|
185
|
-
else if (typeof value ===
|
|
186
|
-
if (value.startsWith(
|
|
189
|
+
else if (typeof value === "string") {
|
|
190
|
+
if (value.startsWith("$")) {
|
|
187
191
|
const escapedValue = value.substring(1).replace(/"/g, `""`);
|
|
188
192
|
return `"${escapedValue}"`;
|
|
189
193
|
}
|
|
190
194
|
else {
|
|
191
195
|
let processedValue = value;
|
|
192
|
-
if (value.startsWith(
|
|
196
|
+
if (value.startsWith("\\$")) {
|
|
193
197
|
processedValue = value.substring(1);
|
|
194
198
|
}
|
|
195
199
|
const escapedValue = processedValue.replace(/'/g, "''");
|
|
@@ -210,21 +214,23 @@ function dataQueryToSqliteQuery(dataQuery) {
|
|
|
210
214
|
let orderBy = "1";
|
|
211
215
|
const sortBy = dataQuery.sortBy;
|
|
212
216
|
if (sortBy?.length) {
|
|
213
|
-
const sortBys = sortBy.map(s => String(s));
|
|
214
|
-
orderBy = sortBys
|
|
215
|
-
|
|
217
|
+
const sortBys = sortBy.map((s) => String(s));
|
|
218
|
+
orderBy = sortBys
|
|
219
|
+
.map((s) => {
|
|
220
|
+
if (s.startsWith("-")) {
|
|
216
221
|
return `"${s.substring(1)}" DESC`;
|
|
217
222
|
}
|
|
218
223
|
else {
|
|
219
224
|
return `"${s}" ASC`;
|
|
220
225
|
}
|
|
221
|
-
})
|
|
226
|
+
})
|
|
227
|
+
.join(", ");
|
|
222
228
|
}
|
|
223
|
-
let where = dataFilterToSqlWhere(dataQuery.filter || {}) ||
|
|
229
|
+
let where = dataFilterToSqlWhere(dataQuery.filter || {}) || "(1=1)";
|
|
224
230
|
if (dataQuery.textSearch?.trim()) {
|
|
225
231
|
const textSearch = dataFilterToSqliteTextSearch(dataQuery);
|
|
226
232
|
if (textSearch) {
|
|
227
|
-
if (where ===
|
|
233
|
+
if (where === "(1=1)") {
|
|
228
234
|
where = textSearch;
|
|
229
235
|
}
|
|
230
236
|
else {
|
|
@@ -232,9 +238,9 @@ function dataQueryToSqliteQuery(dataQuery) {
|
|
|
232
238
|
}
|
|
233
239
|
}
|
|
234
240
|
}
|
|
235
|
-
if (
|
|
241
|
+
if (!where.trim() || where === "()") {
|
|
236
242
|
console.warn(`dataQueryToSqliteQuery: where clause is empty, using '1=1'`);
|
|
237
|
-
where =
|
|
243
|
+
where = "(1=1)";
|
|
238
244
|
}
|
|
239
245
|
let sql = `
|
|
240
246
|
SELECT
|
|
@@ -251,9 +257,7 @@ function dataQueryToSqliteQuery(dataQuery) {
|
|
|
251
257
|
OFFSET ${pageSize * (page - 1)}
|
|
252
258
|
`.substring(3);
|
|
253
259
|
}
|
|
254
|
-
sql = sql
|
|
255
|
-
.trim()
|
|
256
|
-
.replace(/ /g, '');
|
|
260
|
+
sql = sql.trim().replace(/ {4}/g, "");
|
|
257
261
|
return sql;
|
|
258
262
|
}
|
|
259
263
|
/**
|
|
@@ -262,27 +266,34 @@ function dataQueryToSqliteQuery(dataQuery) {
|
|
|
262
266
|
function dataFilterToSqliteTextSearch(query) {
|
|
263
267
|
const textSearch = query.textSearch;
|
|
264
268
|
if (!textSearch?.trim()) {
|
|
265
|
-
return
|
|
269
|
+
return "";
|
|
266
270
|
}
|
|
267
|
-
const fieldNames = query.table.metaData.fields.map(f => f.name);
|
|
271
|
+
const fieldNames = query.table.metaData.fields.map((f) => f.name);
|
|
268
272
|
// escape single quotes
|
|
269
273
|
const escapedTextSearch = textSearch.replace(/'/g, "''");
|
|
270
274
|
if (query.textSearchExact) {
|
|
271
|
-
const strFilter = fieldNames
|
|
275
|
+
const strFilter = fieldNames
|
|
276
|
+
.map((name) => {
|
|
272
277
|
return `"${name}" LIKE '%${escapedTextSearch}%'`;
|
|
273
|
-
})
|
|
278
|
+
})
|
|
279
|
+
.join(" OR ");
|
|
274
280
|
return `(${strFilter})`;
|
|
275
281
|
}
|
|
276
282
|
else {
|
|
277
|
-
const words = escapedTextSearch
|
|
283
|
+
const words = escapedTextSearch
|
|
284
|
+
.replace(/\s/gm, " ")
|
|
285
|
+
.split(" ")
|
|
286
|
+
.filter((s) => s);
|
|
278
287
|
const strFilters = [];
|
|
279
288
|
for (const word of words) {
|
|
280
|
-
const strFilter = fieldNames
|
|
289
|
+
const strFilter = fieldNames
|
|
290
|
+
.map((name) => {
|
|
281
291
|
return `"${name}" LIKE '%${word}%'`;
|
|
282
|
-
})
|
|
292
|
+
})
|
|
293
|
+
.join(" OR ");
|
|
283
294
|
strFilters.push(`(${strFilter})`);
|
|
284
295
|
}
|
|
285
|
-
return `(${strFilters.join(
|
|
296
|
+
return `(${strFilters.join(" AND ")})`;
|
|
286
297
|
}
|
|
287
298
|
}
|
|
288
299
|
/**
|
|
@@ -290,8 +301,8 @@ function dataFilterToSqliteTextSearch(query) {
|
|
|
290
301
|
*/
|
|
291
302
|
function substrDirectiveToSqlite(substrArgs) {
|
|
292
303
|
const args = substrArgs;
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
304
|
+
const arg0 = dataFilterToSqlWhere(args[0]);
|
|
305
|
+
const arg1 = dataFilterToSqlWhere(args[1]);
|
|
306
|
+
const arg2 = dataFilterToSqlWhere(args[2]);
|
|
296
307
|
return `substr(${arg0}, ${arg1}, ${arg2})`;
|
|
297
308
|
}
|