@peerbit/indexer-sqlite3 3.0.2 → 3.0.4

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/src/engine.ts CHANGED
@@ -12,6 +12,8 @@ import {
12
12
  MissingFieldError,
13
13
  type Table,
14
14
  buildJoin,
15
+ coerceLocalQueries,
16
+ coerceLocalSorts,
15
17
  convertCountRequestToQuery,
16
18
  convertDeleteRequestToQuery,
17
19
  convertFromSQLType,
@@ -582,8 +584,8 @@ export class SQLiteIndex<T extends Record<string, any>>
582
584
  let sqlFetch: string | undefined = undefined;
583
585
 
584
586
  const normalizedQuery = new PlannableQuery({
585
- query: types.toQuery(request?.query),
586
- sort: request?.sort,
587
+ query: coerceLocalQueries(request?.query),
588
+ sort: coerceLocalSorts(request?.sort),
587
589
  });
588
590
  let planningScope: ReturnType<QueryPlanner["scope"]>;
589
591
 
package/src/schema.ts CHANGED
@@ -58,6 +58,53 @@ export type BindableValue =
58
58
  let JSON_GROUP_ARRAY = "json_group_array";
59
59
  let JSON_OBJECT = "distinct json_object";
60
60
 
61
+ const coerceLocalQuery = (query: types.Query): types.Query => {
62
+ if (query instanceof types.Query) {
63
+ return query;
64
+ }
65
+ return deserialize(serialize(query), types.Query);
66
+ };
67
+
68
+ export const coerceLocalQueries = (
69
+ query?:
70
+ | types.Query[]
71
+ | types.Query
72
+ | Record<string, string | number | bigint | Uint8Array | boolean | null | undefined>,
73
+ ): types.Query[] => {
74
+ if (!query) {
75
+ return [];
76
+ }
77
+ if (Array.isArray(query)) {
78
+ return query.map((entry) => coerceLocalQuery(entry));
79
+ }
80
+ if (query instanceof types.Query) {
81
+ return [query];
82
+ }
83
+ try {
84
+ return [coerceLocalQuery(query as unknown as types.Query)];
85
+ } catch {
86
+ return types.toQuery(query).map((entry) => coerceLocalQuery(entry));
87
+ }
88
+ };
89
+
90
+ export const coerceLocalSorts = (
91
+ sort?: types.Sort[] | types.Sort,
92
+ ): types.Sort[] | types.Sort | undefined => {
93
+ if (!sort) {
94
+ return undefined;
95
+ }
96
+ if (Array.isArray(sort)) {
97
+ return sort.map((entry) =>
98
+ entry instanceof types.Sort
99
+ ? entry
100
+ : deserialize(serialize(entry), types.Sort),
101
+ );
102
+ }
103
+ return sort instanceof types.Sort
104
+ ? sort
105
+ : deserialize(serialize(sort), types.Sort);
106
+ };
107
+
61
108
  export const u64ToI64 = (u64: bigint | number) => {
62
109
  return (typeof u64 === "number" ? BigInt(u64) : u64) - 9223372036854775808n;
63
110
  };
@@ -1521,7 +1568,7 @@ export const convertDeleteRequestToQuery = (
1521
1568
  ): { sql: string; bindable: any[] } => {
1522
1569
  const { query, bindable } = convertRequestToQuery(
1523
1570
  "delete",
1524
- { query: types.toQuery(request.query) },
1571
+ { query: coerceLocalQueries(request.query) },
1525
1572
  tables,
1526
1573
  table,
1527
1574
  );
@@ -1538,7 +1585,7 @@ export const convertSumRequestToQuery = (
1538
1585
  ): { sql: string; bindable: any[] } => {
1539
1586
  const { query, bindable } = convertRequestToQuery(
1540
1587
  "sum",
1541
- { query: types.toQuery(request.query), key: request.key },
1588
+ { query: coerceLocalQueries(request.query), key: request.key },
1542
1589
  tables,
1543
1590
  table,
1544
1591
  );
@@ -1563,7 +1610,7 @@ export const convertCountRequestToQuery = (
1563
1610
  ): { sql: string; bindable: any[] } => {
1564
1611
  const { query, bindable } = convertRequestToQuery(
1565
1612
  "count",
1566
- { query: request?.query ? types.toQuery(request.query) : undefined },
1613
+ { query: coerceLocalQueries(request?.query) },
1567
1614
  tables,
1568
1615
  table,
1569
1616
  );
@@ -1645,6 +1692,12 @@ export const convertSearchRequestToQuery = (
1645
1692
  planner?: PlanningSession;
1646
1693
  },
1647
1694
  ): { sql: string; bindable: any[] } => {
1695
+ const normalizedRequest = request
1696
+ ? {
1697
+ query: coerceLocalQueries(request.query),
1698
+ sort: coerceLocalSorts(request.sort),
1699
+ }
1700
+ : undefined;
1648
1701
  let unionBuilder = "";
1649
1702
  let orderByClause: string = "";
1650
1703
 
@@ -1659,7 +1712,7 @@ export const convertSearchRequestToQuery = (
1659
1712
 
1660
1713
  try {
1661
1714
  const { orderByBuilder } = buildOrderBy(
1662
- request?.sort,
1715
+ normalizedRequest?.sort,
1663
1716
  tables,
1664
1717
  table,
1665
1718
  joins,
@@ -1689,7 +1742,7 @@ export const convertSearchRequestToQuery = (
1689
1742
 
1690
1743
  const selectQuery = generateSelectQuery(table, selects);
1691
1744
 
1692
- for (const flattenRequest of flattenQuery(request)) {
1745
+ for (const flattenRequest of flattenQuery(normalizedRequest)) {
1693
1746
  try {
1694
1747
  const { query, bindable } = convertRequestToQuery(
1695
1748
  "iterate",
@@ -1799,7 +1852,7 @@ const convertRequestToQuery = <
1799
1852
 
1800
1853
  getOrSetRootTable(joinBuilder, table);
1801
1854
 
1802
- const coercedQuery = types.toQuery(request?.query);
1855
+ const coercedQuery = coerceLocalQueries(request?.query);
1803
1856
  if (coercedQuery.length === 1) {
1804
1857
  const { where, bindable } = convertQueryToSQLQuery(
1805
1858
  coercedQuery[0],