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:
@@ -1,6 +1,7 @@
|
||||
import std/unittest
|
||||
import std/os
|
||||
import std/strutils
|
||||
import std/times
|
||||
import barabadb/core/types
|
||||
import barabadb/query/executor as qexec
|
||||
import barabadb/query/parser
|
||||
@@ -14,9 +15,12 @@ proc execSql(ctx: qexec.ExecutionContext, sql: string): qexec.ExecResult =
|
||||
suite "JOIN execution":
|
||||
var db: LSMTree
|
||||
var ctx: qexec.ExecutionContext
|
||||
var testDir: string
|
||||
|
||||
setup:
|
||||
db = newLSMTree("")
|
||||
testDir = getTempDir() / "baradb_join_test_" & $getCurrentProcessId() & "_" & $getTime().toUnix()
|
||||
createDir(testDir)
|
||||
db = newLSMTree(testDir)
|
||||
ctx = qexec.newExecutionContext(db)
|
||||
discard execSql(ctx, "CREATE TABLE users (id INT, name TEXT)")
|
||||
discard execSql(ctx, "CREATE TABLE orders (id INT, user_id INT, total REAL)")
|
||||
@@ -27,7 +31,7 @@ suite "JOIN execution":
|
||||
discard execSql(ctx, "INSERT INTO orders (id, user_id, total) VALUES (30, 3, 150.0)")
|
||||
|
||||
teardown:
|
||||
discard
|
||||
removeDir(testDir)
|
||||
|
||||
test "INNER JOIN returns matching rows only":
|
||||
let r = execSql(ctx, "SELECT * FROM users u JOIN orders o ON u.id = o.user_id")
|
||||
|
||||
Reference in New Issue
Block a user