@quereus/quereus 4.13.0 → 4.13.1

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.
@@ -67,6 +67,15 @@ export declare function makeEmptyFilterInfo(): FilterInfo;
67
67
  *
68
68
  * Used by the isolation layer's primary-key point lookups and by any caller that must
69
69
  * drive an O(log n) seek instead of a scan.
70
+ *
71
+ * The result is a seek REQUEST, not a negotiated access plan. `aConstraintUsage[].omit`
72
+ * is an OUTPUT of `getBestAccessPlan` — the module's own claim that it applied a filter,
73
+ * which is what earns the engine the right to drop the residual. A hand-built FilterInfo
74
+ * never ran that negotiation, so this builder cannot assert `omit` on the module's
75
+ * behalf: it reports `false`, and the caller driving `query()` directly owns re-checking
76
+ * every returned row (there is no engine above the call to reapply anything). The
77
+ * negotiated path in `rule-select-access-path` builds its own `aConstraintUsage` inline
78
+ * and still sets `omit: true`, where it is earned.
70
79
  */
71
80
  export declare function makeIndexEqSeekFilterInfo(index: IndexDescriptor, seekColumnIndexes: readonly number[], values: readonly SqlValue[]): FilterInfo;
72
81
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"filter-info.d.ts","sourceRoot":"","sources":["../../../src/vtab/filter-info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,WAAW,EAAE,aAAa,CAAC;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B;;;;OAIG;IACH,eAAe,EAAE,SAAS,CAAC;IAE3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAEjC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,SAAY,EAAE,IAAI,SAAY,GAAG,UAAU,CAsBrF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAsBhD;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,eAAe,EACtB,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,MAAM,EAAE,SAAS,QAAQ,EAAE,GACzB,UAAU,CA4BZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAehG"}
1
+ {"version":3,"file":"filter-info.d.ts","sourceRoot":"","sources":["../../../src/vtab/filter-info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oEAAoE;IACpE,WAAW,EAAE,aAAa,CAAC;QAAE,UAAU,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,8DAA8D;IAC9D,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9B;;;;OAIG;IACH,eAAe,EAAE,SAAS,CAAC;IAE3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAEjC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,SAAY,EAAE,IAAI,SAAY,GAAG,UAAU,CAsBrF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAsBhD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,eAAe,EACtB,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,MAAM,EAAE,SAAS,QAAQ,EAAE,GACzB,UAAU,CA4BZ;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAehG"}
@@ -67,6 +67,15 @@ export function makeEmptyFilterInfo() {
67
67
  *
68
68
  * Used by the isolation layer's primary-key point lookups and by any caller that must
69
69
  * drive an O(log n) seek instead of a scan.
70
+ *
71
+ * The result is a seek REQUEST, not a negotiated access plan. `aConstraintUsage[].omit`
72
+ * is an OUTPUT of `getBestAccessPlan` — the module's own claim that it applied a filter,
73
+ * which is what earns the engine the right to drop the residual. A hand-built FilterInfo
74
+ * never ran that negotiation, so this builder cannot assert `omit` on the module's
75
+ * behalf: it reports `false`, and the caller driving `query()` directly owns re-checking
76
+ * every returned row (there is no engine above the call to reapply anything). The
77
+ * negotiated path in `rule-select-access-path` builds its own `aConstraintUsage` inline
78
+ * and still sets `omit: true`, where it is earned.
70
79
  */
71
80
  export function makeIndexEqSeekFilterInfo(index, seekColumnIndexes, values) {
72
81
  const constraints = seekColumnIndexes.map((columnIndex, i) => ({
@@ -86,7 +95,7 @@ export function makeIndexEqSeekFilterInfo(index, seekColumnIndexes, values) {
86
95
  nOrderBy: 0,
87
96
  aOrderBy: [],
88
97
  colUsed: 0n,
89
- aConstraintUsage: constraints.map(c => ({ argvIndex: c.argvIndex, omit: true })),
98
+ aConstraintUsage: constraints.map(c => ({ argvIndex: c.argvIndex, omit: false })),
90
99
  idxNum: 0,
91
100
  idxStr,
92
101
  orderByConsumed: false,
@@ -1 +1 @@
1
- {"version":3,"file":"filter-info.js","sourceRoot":"","sources":["../../../src/vtab/filter-info.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter-info.js","sourceRoot":"","sources":["../../../src/vtab/filter-info.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/quereus",
3
- "version": "4.13.0",
3
+ "version": "4.13.1",
4
4
  "type": "module",
5
5
  "description": "Pure TypeScript SQL engine — no WASM, no native bindings. Runs in browsers, Node.js, React Native, edge workers, and anywhere JS runs.",
6
6
  "keywords": [
@@ -72,9 +72,9 @@
72
72
  "mutation:subsystem": "node mutation-subsystem.mjs"
73
73
  },
74
74
  "devDependencies": {
75
- "@quereus/plugin-leveldb": "^4.13.0",
75
+ "@quereus/plugin-leveldb": "^4.13.1",
76
76
  "@quereus/plugin-loader": "*",
77
- "@quereus/store": "^4.13.0",
77
+ "@quereus/store": "^4.13.1",
78
78
  "@stryker-mutator/core": "^9.6.1",
79
79
  "@stryker-mutator/mocha-runner": "^9.6.1",
80
80
  "@stryker-mutator/typescript-checker": "^9.6.1",