Files
Baradb/docs/en/changelog.md
T
dimgigov 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
feat: Multi-tenant ERP support via session variables + RLS
- 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
2026-05-14 16:28:41 +03:00

11 KiB

Changelog

All notable changes to BaraDB are documented in this file.

[Unreleased] — SQL:2023 Stabilization

Fixed

  • GROUPING SETS executionlowerSelect now creates irpkGroupBy when selGroupingSetsKind != gskNone, even if selGroupBy is empty. Previously, queries like GROUP BY GROUPING SETS ((dept), ()) bypassed the grouping executor entirely.
  • FTS CREATE INDEX docId mismatchCREATE INDEX ... USING FTS now computes docId as a hash of tableName.$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 parserparseFrameBoundary no longer consumes tkRow after tkCurrent incorrectly (was using tkRows). Also fixed tkRow keyword conflict with ENABLE ROW LEVEL SECURITY parsing.
  • ORDER BY + SELECT projectionlowerSelect now places irpkSort before irpkProject, enabling ORDER BY on columns not present in the SELECT list.
  • 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 executionROWS BETWEEN X PRECEDING AND Y FOLLOWING / CURRENT ROW frame boundaries now respected by FIRST_VALUE and LAST_VALUE.
  • Session variablesSET var_name = value and current_setting('var_name') for connection-scoped key/value storage.
  • Current user/rolecurrent_user and current_role SQL keywords evaluate to the authenticated session's user and role.
  • Auth-executor bridge — Wire server and HTTP server now populate ExecutionContext.currentUser and ExecutionContext.currentRole after JWT/SCRAM authentication.
  • Multi-tenant RLS — Row-Level Security policies can now reference current_user, current_role, and current_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__.py and core.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/finish in HTTP server
  • Docker Compose Test Configurationdocker-compose.test.yml for test environments
  • CI/CD Clients Pipeline.github/workflows/clients-ci.yml for 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 + scanAll on 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
  • Recoverysummary() no longer mutates the database
  • Wire Protocol — 64MB limit + bounds checking + max depth to prevent OOM/DoS
  • SQL InjectionexprToSql now escapes single quotes
  • ReDoSirLike/irILike now escape regex metacharacters
  • GraphaddEdge now checks node existence
  • Vector — Dimension mismatch validation + HNSW locking
  • FTS — UTF-8 tokenization now uses runes instead of bytes
  • Buildnim.cfg adds -d:ssl so nimble build works without flags; --threads:on added 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 in CREATE TABLE with dimension validation
    • CREATE INDEX ... USING hnsw / USING ivfpq for approximate nearest neighbor indexes
    • SQL distance functions: cosine_distance(), euclidean_distance(), inner_product(), l1_distance(), l2_distance()
    • <-> nearest-neighbor operator (Euclidean distance)
    • ORDER BY support for vector distance expressions, including columns not in SELECT
    • Automatic HNSW index maintenance on INSERT and UPDATE
  • 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 + _requestLock for safe concurrent queries. Multiple parallel query() / execute() / ping() calls no longer interleave binary frames on the wire.

Fixed

  • Query Executor — Row Value EscapingexecInsert now 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 ProjectionirpkSort is now placed before irpkProject in the IR plan, allowing ORDER BY to reference columns that are not selected
  • Wire Protocol — Big-Endian Float SerializationFLOAT32/FLOAT64 and vector float values are now serialized in big-endian byte order, matching the client's readFloatBE() / readDoubleBE() and ensuring cross-platform numeric accuracy.
  • Gossip Protocol — Async UDP Socket — Replaced synchronous newSocket + blocking recvFrom with newAsyncSocket + 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