@naturalcycles/datastore-lib 3.35.2 → 3.36.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/query.util.js +16 -7
- package/package.json +1 -1
- package/src/query.util.ts +14 -10
package/dist/query.util.js
CHANGED
|
@@ -13,16 +13,25 @@ const OP_MAP = {
|
|
|
13
13
|
function dbQueryToDatastoreQuery(dbQuery, emptyQuery) {
|
|
14
14
|
let q = emptyQuery;
|
|
15
15
|
// filter
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
for (const f of dbQuery._filters) {
|
|
17
|
+
// keeping "previous syntax" commented out
|
|
18
|
+
// (q, f) => q.filter(f.name as string, OP_MAP[f.op] || (f.op as any), f.val),
|
|
19
|
+
// Datastore doesn't allow `undefined` as filter value.
|
|
20
|
+
// We don't want to throw on it, so instead we'll replace it with valid value of `null`.
|
|
21
|
+
// `a > null` will return anything that's indexed
|
|
22
|
+
// `a < null` should return nothing
|
|
23
|
+
// `a == null` will return just that - rows with null values
|
|
24
|
+
let { op, val } = f;
|
|
25
|
+
if (val === undefined)
|
|
26
|
+
val = null;
|
|
27
|
+
q = q.filter(new datastore_1.PropertyFilter(f.name, OP_MAP[op] || op, val));
|
|
28
|
+
}
|
|
21
29
|
// limit
|
|
22
30
|
q = q.limit(dbQuery._limitValue || 0);
|
|
23
31
|
// order
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
for (const ord of dbQuery._orders) {
|
|
33
|
+
q = q.order(ord.name, { descending: ord.descending });
|
|
34
|
+
}
|
|
26
35
|
// select
|
|
27
36
|
if (dbQuery._selectedFieldNames) {
|
|
28
37
|
const fields = dbQuery._selectedFieldNames.map(f => FNAME_MAP[f] || f);
|
package/package.json
CHANGED
package/src/query.util.ts
CHANGED
|
@@ -19,23 +19,27 @@ export function dbQueryToDatastoreQuery<ROW extends ObjectWithId>(
|
|
|
19
19
|
let q = emptyQuery
|
|
20
20
|
|
|
21
21
|
// filter
|
|
22
|
-
|
|
23
|
-
q = dbQuery._filters.reduce(
|
|
22
|
+
for (const f of dbQuery._filters) {
|
|
24
23
|
// keeping "previous syntax" commented out
|
|
25
24
|
// (q, f) => q.filter(f.name as string, OP_MAP[f.op] || (f.op as any), f.val),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
|
|
26
|
+
// Datastore doesn't allow `undefined` as filter value.
|
|
27
|
+
// We don't want to throw on it, so instead we'll replace it with valid value of `null`.
|
|
28
|
+
// `a > null` will return anything that's indexed
|
|
29
|
+
// `a < null` should return nothing
|
|
30
|
+
// `a == null` will return just that - rows with null values
|
|
31
|
+
let { op, val } = f
|
|
32
|
+
if (val === undefined) val = null
|
|
33
|
+
q = q.filter(new PropertyFilter(f.name as string, OP_MAP[op] || (op as any), val))
|
|
34
|
+
}
|
|
29
35
|
|
|
30
36
|
// limit
|
|
31
37
|
q = q.limit(dbQuery._limitValue || 0)
|
|
32
38
|
|
|
33
39
|
// order
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
q,
|
|
38
|
-
)
|
|
40
|
+
for (const ord of dbQuery._orders) {
|
|
41
|
+
q = q.order(ord.name as string, { descending: ord.descending })
|
|
42
|
+
}
|
|
39
43
|
|
|
40
44
|
// select
|
|
41
45
|
if (dbQuery._selectedFieldNames) {
|