@zvndev/powdb-client 0.13.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/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.15.0 - 2026-07-16
4
+
5
+ - Version-alignment release in lockstep with workspace v0.15.0 (per-index
6
+ statistics and cardinality-aware conjunction index choice). No TypeScript
7
+ API changes; `explain` result rows now include selectivity tokens
8
+ (`est_rows=... entries=... distinct=...`) on chosen index-scan lines.
9
+
10
+ ## 0.14.0 - 2026-07-16
11
+
12
+ - Version-alignment release in lockstep with workspace v0.14.0 (conjunction
13
+ index selection, embedded typed results, read-only snapshot serving). No
14
+ TypeScript API changes; servers in read-only mode return a terminal
15
+ "readonly mode: statement requires a writer" error for mutations, which
16
+ surfaces through the existing error path.
17
+
18
+ ## 0.13.0 - 2026-07-15
19
+
20
+ - Added the **lossless native typed result API**: `queryNative(powql)`,
21
+ `querySqlNative(sql)`, and low-level `queryNativeRaw(...)` returning tagged
22
+ `WireValue` cells. Native results preserve exact cell types: 64-bit ints as
23
+ `bigint`, raw `bytes`, and JSON documents as parsed values plus the exact
24
+ PJ1 bytes (`pj1`). Empty (SQL NULL / missing) is distinct from JSON `null`
25
+ and from the string `"null"` in raw results.
26
+ - Added native parameterized queries over the new typed request frames.
27
+ - Added `SUPPORTED_CATALOG_VERSION` and `assertServerCatalogVersionSupported`
28
+ so clients fail with a clear error against servers newer than they support.
29
+ - Legacy `query()` / `querySql()` string results are unchanged and remain
30
+ byte-compatible; see README for when to prefer the native API.
31
+
32
+ ## 0.12.0 - 2026-07-14
33
+
34
+ - Typed API: `"json"` column kind for the server's native JSON (PJ1) type.
35
+ JSON cells arrive as canonical JSON text on the legacy protocol.
36
+ - No breaking changes; released in lockstep with workspace v0.12.0.
37
+
38
+ ## 0.11.0 - 2026-07-13
39
+
40
+ - Version-alignment release in lockstep with workspace v0.11.0 (overflow
41
+ pages, grouped aggregates). No TypeScript API changes.
42
+
43
+ ## 0.10.0 - 2026-07-13
44
+
45
+ - Version-alignment release in lockstep with workspace v0.10.0. No
46
+ TypeScript API changes.
47
+
48
+ ## 0.9.0 - 2026-07-12
49
+
50
+ - Added `execScript(...)`: transactional, statement-aware script execution
51
+ with all-or-nothing semantics.
52
+ - Connect is now pipelined and eager, reducing first-query latency.
53
+
3
54
  ## 0.8.0 - 2026-07-02
4
55
 
5
56
  - Released in lockstep with PowDB workspace v0.8.0 (Embedded Sync Milestone 0).
package/README.md CHANGED
@@ -357,6 +357,22 @@ Reach for `queryNativeRaw` when you need:
357
357
  It accepts the same `$N` parameter array and `AbortSignal` options as
358
358
  `queryNative`. For ordinary reads, prefer `queryNative`.
359
359
 
360
+ ### Null vs missing: which API sees what
361
+
362
+ The legacy string protocol renders an absent value, a JSON `null`, and the
363
+ string `"null"` as the identical string `null`. This is frozen wire behavior:
364
+ existing decoders depend on it, so it will not change. If your application
365
+ (or a driver you maintain) needs to tell these apart, migrate reads to
366
+ `queryNativeRaw`, which is the sanctioned lossless surface.
367
+
368
+ One engine-level caveat applies to every API, native included: extracting a
369
+ scalar with `->` (for example `.data->maybe->leaf`) collapses "path missing"
370
+ and "explicit JSON null at the leaf" into the same empty value before results
371
+ are produced. When that distinction matters, either project the enclosing
372
+ JSON value (a `json` cell preserves `null` exactly) or ask the engine with
373
+ `json_type(.data->maybe->leaf)`, which returns the string `"null"` for an
374
+ explicit JSON null and an empty value for a missing path.
375
+
360
376
  ## Schema-coerced rows
361
377
 
362
378
  The legacy wire protocol serialises every value as a string. If you want JS
@@ -19,7 +19,7 @@ import { EventEmitter } from "node:events";
19
19
  import { type NativeJson, type SyncRepairAction, type WireRetainedUnit, type WireSyncStatus, type WireValue } from "./protocol.js";
20
20
  import { type TypedRow, type TypedSchema } from "./typed.js";
21
21
  /** Client library version. Compared to the server's reported version. */
22
- export declare const CLIENT_VERSION = "0.13.0";
22
+ export declare const CLIENT_VERSION = "0.15.0";
23
23
  /**
24
24
  * The maximum catalog format version this client can read. State this as the
25
25
  * `catalogVersion` in sync pull requests: the server accepts any replica whose
package/dist/cjs/index.js CHANGED
@@ -59,7 +59,7 @@ const errors_js_1 = require("./errors.js");
59
59
  const script_js_1 = require("./script.js");
60
60
  const typed_js_1 = require("./typed.js");
61
61
  /** Client library version. Compared to the server's reported version. */
62
- exports.CLIENT_VERSION = "0.13.0";
62
+ exports.CLIENT_VERSION = "0.15.0";
63
63
  /**
64
64
  * The maximum catalog format version this client can read. State this as the
65
65
  * `catalogVersion` in sync pull requests: the server accepts any replica whose
package/dist/index.d.ts CHANGED
@@ -19,7 +19,7 @@ import { EventEmitter } from "node:events";
19
19
  import { type NativeJson, type SyncRepairAction, type WireRetainedUnit, type WireSyncStatus, type WireValue } from "./protocol.js";
20
20
  import { type TypedRow, type TypedSchema } from "./typed.js";
21
21
  /** Client library version. Compared to the server's reported version. */
22
- export declare const CLIENT_VERSION = "0.13.0";
22
+ export declare const CLIENT_VERSION = "0.15.0";
23
23
  /**
24
24
  * The maximum catalog format version this client can read. State this as the
25
25
  * `catalogVersion` in sync pull requests: the server accepts any replica whose
package/dist/index.js CHANGED
@@ -22,7 +22,7 @@ import { PowDBError, PowDBScriptError, isPowDBError } from "./errors.js";
22
22
  import { splitStatements } from "./script.js";
23
23
  import { coerceRows, } from "./typed.js";
24
24
  /** Client library version. Compared to the server's reported version. */
25
- export const CLIENT_VERSION = "0.13.0";
25
+ export const CLIENT_VERSION = "0.15.0";
26
26
  /**
27
27
  * The maximum catalog format version this client can read. State this as the
28
28
  * `catalogVersion` in sync pull requests: the server accepts any replica whose
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zvndev/powdb-client",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "TypeScript client for PowDB (PowQL wire protocol)",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.29.3",