f7d4961125
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
- SET var = value / current_setting('var') for session-scoped variables
- current_user / current_role SQL keywords with auth bridge
- server.nim + httpserver.nim populate ExecutionContext.currentUser/currentRole
- RLS policies can reference current_setting('app.tenant_id') for tenant isolation
- Fixed evalExpr to propagate ctx recursively (fixes current_user in sub-expressions)
- Fixed GROUPING SETS execution (lowerSelect checks selGroupingSetsKind)
- Fixed FTS CREATE INDEX docId mismatch (hash of tableName.$key)
- Fixed all test suites to use isolated temp directories
- Added 5 multi-tenant tests (355 total, all green)
- Updated docs: PLAN_SQL_ADVANCED.md, baraql.md, changelog.md
11 KiB
11 KiB
Changelog
All notable changes to BaraDB are documented in this file.
[Unreleased] — SQL:2023 Stabilization
Fixed
- GROUPING SETS execution —
lowerSelectnow createsirpkGroupBywhenselGroupingSetsKind != gskNone, even ifselGroupByis empty. Previously, queries likeGROUP BY GROUPING SETS ((dept), ())bypassed the grouping executor entirely. - FTS CREATE INDEX docId mismatch —
CREATE INDEX ... USING FTSnow computesdocIdas a hash oftableName.$key, consistent with DML operations (INSERT/UPDATE/DELETE). Previously, index creation used sequential IDs (0, 1, 2...), causing@@queries to never match indexed documents. - Test isolation (all suites) — All
newLSMTree("")calls replaced with unique temporary directories per suite. Eliminates WAL accumulation issues and flaky tests caused by shared database state between test runs. - Window frame parser —
parseFrameBoundaryno longer consumestkRowaftertkCurrentincorrectly (was usingtkRows). Also fixedtkRowkeyword conflict withENABLE ROW LEVEL SECURITYparsing. - ORDER BY + SELECT projection —
lowerSelectnow placesirpkSortbeforeirpkProject, enablingORDER BYon columns not present in theSELECTlist. - UNPIVOT execution — Verified and fixed missing test coverage for UNPIVOT transformation.
Added
- JSON operators —
@>(contains),<@(contained by),?(has key),?|(has any),?&(has all) now supported in lexer, parser, and executor. - Window frame execution —
ROWS BETWEEN X PRECEDING AND Y FOLLOWING/CURRENT ROWframe boundaries now respected byFIRST_VALUEandLAST_VALUE. - Session variables —
SET var_name = valueandcurrent_setting('var_name')for connection-scoped key/value storage. - Current user/role —
current_userandcurrent_roleSQL keywords evaluate to the authenticated session's user and role. - Auth-executor bridge — Wire server and HTTP server now populate
ExecutionContext.currentUserandExecutionContext.currentRoleafter JWT/SCRAM authentication. - Multi-tenant RLS — Row-Level Security policies can now reference
current_user,current_role, andcurrent_setting('app.tenant_id')for per-tenant data isolation.
[1.1.0] — 2026-05-13
Added
- Client SDKs v1.1.0 — Full-featured clients for all languages:
- JavaScript: TypeScript definitions, package.json, examples, unit & integration tests
- Python: Restructured as proper package (
baradb/with__init__.pyandcore.py), pyproject.toml, examples, tests (query builder, wire protocol, integration) - Nim: Examples, integration tests, README
- Rust: Examples, integration tests, improved Cargo.toml
- SCRAM-SHA-256 Authentication — RFC 7677 compliant authentication with PBKDF2 + HMAC + SHA-256 + nonce/salt generation
- HTTP SCRAM Endpoints —
/auth/scram/start+/auth/scram/finishin HTTP server - Docker Compose Test Configuration —
docker-compose.test.ymlfor test environments - CI/CD Clients Pipeline —
.github/workflows/clients-ci.ymlfor automated client testing
Fixed
- Query Executor — Unary minus (
irNeg) evaluation now works correctly in SELECT and WHERE clauses - Distributed Transactions — Rollback after commit attempt no longer violates atomicity
- Sharding — Data migration protocol with TCP +
scanAllon LSM - Raft — Majority calculation for even number of nodes fixed
- MVCC — Aborted transactions no longer become visible
- LSM-Tree — Data loss on immutable memtable overwrite fixed; SSTable lookup sorting fixed
- Auth — JWT signature changed to HMAC-SHA256 (no longer trivially forgeable); token expiration (
exp/nbf/iat) now validated; signature comparison is now constant-time - Recovery —
summary()no longer mutates the database - Wire Protocol — 64MB limit + bounds checking + max depth to prevent OOM/DoS
- SQL Injection —
exprToSqlnow escapes single quotes - ReDoS —
irLike/irILikenow escape regex metacharacters - Graph —
addEdgenow checks node existence - Vector — Dimension mismatch validation + HNSW locking
- FTS — UTF-8 tokenization now uses runes instead of bytes
- Build —
nim.cfgadds-d:sslsonimble buildworks without flags;--threads:onadded to all CI commands
Changed
- Version bumped to 1.1.0 across all components (server, Docker images, clients, CLI)
- README — Version badge updated; all feature tables now reference v1.1.0
- TLA+ Formal Verification — Added
crossmodal.tla,backup.tla,recovery.tla; symmetry reduction in all 9 specs - Clean build — 0 compiler warnings on Nim 2.2.10
[0.1.0] — 2025-01-15
Added
-
Core Storage Engines
- LSM-Tree with MemTable, WAL, SSTables, and size-tiered compaction
- B-Tree ordered index with range scans and MVCC copy-on-write
- Bloom filters for efficient SSTable skip
- Memory-mapped I/O for SSTable reads
- LRU page cache with hit rate tracking
-
Query Engine (BaraQL)
- SQL-compatible lexer with 80+ token types
- Recursive descent parser producing AST with 25+ node kinds
- Intermediate representation (IR) for execution plans
- Code generator translating IR to storage operations
- Adaptive query optimizer with cross-modal planning
- Query executor with parallelization
-
BaraQL Language Features
- SELECT, INSERT, UPDATE, DELETE
- WHERE, ORDER BY, LIMIT, OFFSET
- GROUP BY, HAVING, aggregate functions (count, sum, avg, min, max)
- INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN
- CTEs (Common Table Expressions) with WITH
- Subqueries (EXISTS, IN, correlated)
- CASE expressions
- UNION, INTERSECT, EXCEPT
- Schema definition: CREATE TYPE, DROP TYPE
-
Vector Engine
- HNSW index for approximate nearest neighbor search
- IVF-PQ index for large-scale vector search
- SIMD-optimized distance functions (cosine, L2, dot product, Manhattan)
- Quantization: scalar 8-bit/4-bit, product quantization, binary
- Metadata filtering during vector search
-
Graph Engine
- Adjacency list storage for directed, edge-weighted graphs
- BFS and DFS traversal
- Dijkstra shortest path
- PageRank node importance
- Louvain community detection
- Subgraph pattern matching
- Cypher-like graph query parser
-
Full-Text Search
- Inverted index with term-document mapping
- BM25 ranking algorithm
- TF-IDF scoring
- Fuzzy search with Levenshtein distance
- Wildcard/regex search
- Multi-language tokenizers (English, Bulgarian, German, French, Russian)
-
Columnar Storage
- Per-column storage for analytical queries
- RLE (Run-Length Encoding) compression
- Dictionary encoding for low-cardinality columns
- SIMD-accelerated aggregates
-
Transactions
- MVCC (Multi-Version Concurrency Control) with snapshot isolation
- Deadlock detection via wait-for graph
- Write-ahead log for durability
- Savepoints and partial rollback
-
Protocol Layer
- Binary wire protocol with 16 message types
- HTTP/REST JSON API
- WebSocket streaming
- Connection pooling
- JWT-based authentication
- Token-bucket rate limiting
- TLS/SSL with auto-generated certificates
-
Schema System
- Strong type system with 17 native types
- Type inheritance with multi-base support
- Property links between types
- Schema diffing and migrations
- Computed properties
-
Distributed Systems
- Raft consensus (leader election, log replication)
- Hash, range, and consistent-hash sharding
- Sync/async/semi-sync replication
- Gossip protocol for membership management
- Two-phase commit for distributed transactions
-
Cross-Modal Queries
- Unified query language across all storage engines
- Cross-engine predicate pushdown
- Optimized execution plans for multi-modal queries
-
Backup & Recovery
- Online snapshots without downtime
- Point-in-time recovery via WAL replay
- Incremental backups
-
Client SDKs
- JavaScript/TypeScript client with binary protocol
- Python client with sync and async APIs
- Nim embedded mode and client library
- Rust client (async)
-
Operations
- Interactive CLI shell (BaraQL REPL)
- Structured logging (JSON and text formats)
- Prometheus-compatible metrics endpoint
- Health and readiness probes
- CPU/memory profiling endpoints
-
Docker Support
- Multi-stage Dockerfile (Alpine Linux)
- Docker Compose configuration
- Health checks
Performance
- LSM-Tree: 580K writes/s, 720K reads/s
- B-Tree: 1.2M inserts/s, 1.5M lookups/s
- Vector SIMD: 850K cosine distances/s (dim=768)
- FTS: 320K docs/s indexing, 28K queries/s BM25
- Graph: 2.5M nodes/s insertion, 12K BFS traversals/s
- Binary protocol: 380K queries/s (100 concurrent connections)
Tests
- 262 tests across 56 test suites
- 100% pass rate
[Unreleased]
Added
- Vector SQL Integration — Full SQL-level vector search support:
VECTOR(n)column type inCREATE TABLEwith dimension validationCREATE INDEX ... USING hnsw/USING ivfpqfor approximate nearest neighbor indexes- SQL distance functions:
cosine_distance(),euclidean_distance(),inner_product(),l1_distance(),l2_distance() <->nearest-neighbor operator (Euclidean distance)ORDER BYsupport for vector distance expressions, including columns not inSELECT- Automatic HNSW index maintenance on
INSERTandUPDATE
- Advanced SQL Engine — Window functions, MERGE/UPSERT, LATERAL JOIN, PIVOT/UNPIVOT, SQL/PGQ Property Graph, Advanced Aggregates (ARRAY_AGG, STRING_AGG, FILTER, GROUPING SETS/ROLLUP/CUBE)
- JavaScript Client — TCP Request Queue — Internal
_requestQueue+_requestLockfor safe concurrent queries. Multiple parallelquery()/execute()/ping()calls no longer interleave binary frames on the wire.
Fixed
- Query Executor — Row Value Escaping —
execInsertnow properly escapes commas and equals signs in column values, fixing storage corruption for vector literals like[1.0, 2.0, 3.0] - Query Planner — ORDER BY Projection —
irpkSortis now placed beforeirpkProjectin the IR plan, allowingORDER BYto reference columns that are not selected - Wire Protocol — Big-Endian Float Serialization —
FLOAT32/FLOAT64and vector float values are now serialized in big-endian byte order, matching the client'sreadFloatBE()/readDoubleBE()and ensuring cross-platform numeric accuracy. - Gossip Protocol — Async UDP Socket — Replaced synchronous
newSocket+ blockingrecvFromwithnewAsyncSocket+await recvFrom, preventing the async event loop from freezing until a UDP packet arrives.
Planned
- Query plan caching
- Materialized views
- Geospatial index
- Time-series optimizations
- CDC (Change Data Capture) streaming
- Federated queries across BaraDB instances