feat: JSON/JSONB validation, multi-column indexes, CTE execution, wire protocol column types
- Add fkJson to wire protocol with serialization/deserialization - Validate JSON/JSONB on INSERT/UPDATE via std/json - Send real column type metadata in wire protocol responses - Update all 4 clients (Nim, Python, JS, Rust) for JSON and columnTypes - Implement multi-column index parser (CREATE INDEX idx ON t(a, b)) - Add ciColumns to AST nkCreateIndex - Build composite index keys as table.col1.col2 with val1|val2 - Support multi-column exact match in SELECT for AND chains - Implement non-recursive CTE execution via ctx.cteTables materialization - Add tkRecursive token and parse WITH RECURSIVE - Fix test isolation: use temp dirs for JOIN, migration, and RLS tests - All tests passing (0 failures)
This commit is contained in:
@@ -46,6 +46,7 @@ const FieldKind = {
|
||||
ARRAY: 0x0A,
|
||||
OBJECT: 0x0B,
|
||||
VECTOR: 0x0C,
|
||||
JSON: 0x0D,
|
||||
};
|
||||
|
||||
const ResultFormat = {
|
||||
@@ -57,6 +58,7 @@ const ResultFormat = {
|
||||
class QueryResult {
|
||||
constructor() {
|
||||
this.columns = [];
|
||||
this.columnTypes = [];
|
||||
this.rows = [];
|
||||
this.rowCount = 0;
|
||||
this.affectedRows = 0;
|
||||
@@ -169,6 +171,12 @@ class Client {
|
||||
pos += sLen;
|
||||
}
|
||||
result.columns = cols;
|
||||
const colTypes = [];
|
||||
for (let i = 0; i < colCount; i++) {
|
||||
colTypes.push(payload[pos]);
|
||||
pos++;
|
||||
}
|
||||
result.columnTypes = colTypes;
|
||||
const rowCount = new DataView(payload.buffer).getUint32(pos, false);
|
||||
pos += 4;
|
||||
for (let r = 0; r < rowCount; r++) {
|
||||
@@ -252,6 +260,13 @@ class Client {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case FieldKind.JSON: {
|
||||
const len = new DataView(payload.buffer).getUint32(pos, false);
|
||||
pos += 4;
|
||||
result = new TextDecoder().decode(payload.slice(pos, pos + len));
|
||||
pos += len;
|
||||
break;
|
||||
}
|
||||
default: result = null;
|
||||
}
|
||||
this._lastReadPos = pos;
|
||||
|
||||
Reference in New Issue
Block a user