ef264d7d69
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
New src/barabadb/search/ module with 9 components: - priority_queue.nim: BoundedHeap for O(log n) search - hnsw_opt.nim: heap-based searchLayer (2.4x faster, 92-99% recall@10) - inverted.nim: segment-based index with soft-delete and compaction - phrase.nim: positional phrase + proximity search - boolean.nim: recursive descent parser (AND/OR/NOT/ranges/wildcards) - ngram.nim: trigram index for O(1) fuzzy/prefix/wildcard - stemmer.nim: Porter2 stemmers (EN/BG/DE/FR/RU) - facet.nim: faceted search with filter pushdown - engine.nim: UnifiedSearchEngine combining all search types Performance (dim=128, efConstruction=200): N=1K: 0.30ms search, 99.6% recall@10 N=10K: 1.09ms search, 92.6% recall@10 N=50K: 2.26ms search, 75.5% recall@10 Includes search benchmarks (benchmarks/search_bench.nim), updated docs (en/bg fts.md, en/bg search.md), and crossmodal engine integration.
5.9 KiB
5.9 KiB
Changelog
All notable changes to BaraDB are documented in this file.
[1.2.0] — Unreleased
Search Module (new)
A unified search module combining vector similarity, full-text, and structured search into a single high-performance engine.
- Heap-optimized HNSW search — priority-queue-based candidate selection, 2.4x faster than baseline (
search/hnsw_opt.nim) - Segment-based inverted indexing — partitioned posting lists for concurrent indexing and reduced lock contention (
search/inverted.nim) - Phrase and proximity search — ordered phrase matching with configurable slop distance (
search/phrase.nim) - Boolean query parser — full boolean algebra with AND, OR, NOT, and range expressions (e.g.
price:[10 TO 100]) (search/boolean.nim) - N-gram fuzzy search — character n-gram index for typo-tolerant retrieval (
search/ngram.nim) - Faceted search — filter results and aggregate counts by arbitrary field values (
search/facet.nim) - Porter2 stemmers — morphological stemming for English, Bulgarian, German, French, and Russian (
search/stemmer.nim) - UnifiedSearchEngine API — single entry point combining all search modes with consistent scoring (
search/engine.nim) - Search benchmarks — reproducible performance measurement suite (
benchmarks/bench_search.nim)
[1.1.7] — 2026-05-29
Security (5 critical + 5 high)
- Fix REP/DISTTXN protocol auth bypass (
server.nim) — unauthenticated TCP clients could write data or manipulate distributed transactions - Fix HTTP backup/restore path traversal (
httpserver.nim) —..and absolute paths rejected - Fix empty JWT secret when auth enabled (
server.nim) — server now refuses to start withauthEnabled: trueand nojwtSecret - Fix HTTP admin panel served without auth (
httpserver.nim) — admin UI now requires authentication whenauthEnabled - Fix timing attacks on HMAC/SCRAM comparison (
auth.nim,scram.nim) — constant-time comparison - Fix WebSocket JWT expiration not validated (
websocket.nim) —expclaim now checked - Fix sync replication returning success on partial ack (
replication.nim) — returns 0 when not all replicas acknowledge - Fix SSL verifyPeer not applied (
ssl.nim) —verifyModenow passed tonewContext() - Fix JWT JSON parser missing escape handling (
auth.nim) — backslash escapes now parsed correctly
Data Integrity (3 critical + 3 high + 2 medium)
- Fix WAL write race with flush (
lsm.nim) — WAL write now underdb.lock, preventing data loss after crash - Fix 2PC marking uncontacted participants as prepared/committed (
disttxn.nim) — only contacted nodes are marked - Fix Raft commit index for even-sized clusters (
raft.nim) — correct majority calculation - Fix MVCC savepoint/rollback no-op (
mvcc.nim) — deep copy writeSet at savepoint time - Fix table mutation during iteration (
mvcc.nim) — collect stale txns before deleting - Fix B-tree leaf merge phantom separator key (
btree.nim) — no longer inserts empty-valued separator at leaf level - Fix writeSSTable partial file on crash (
lsm.nim) — write to.tmpthen atomic rename - Fix compaction mmap leak (
compaction.nim) — close SSTables after reading
Query Correctness (1 high + 2 medium)
- Fix LIMIT 0 returning all rows (
executor.nim) — now returns empty result - Fix COUNT(col) counting NULL values (
executor.nim) — 3 locations fixed to checkv.kind != vkNull - Fix EXISTS subquery always false (
executor.nim) — lowering now setsexistsSubqueryplan - Fix multi-CTE queries losing earlier CTE tables (
executor.nim) — save/restorecteTablesaround inner execution - Fix JSON injection in hybrid_search_filtered (
executor.nim) — escape quotes/backslashes in ID
Raft Consensus (3 high + 1 low)
- Fix Raft appendEntries using array index instead of log-index (
raft.nim) — usesfindLogEntryByIndex - Fix Raft applyCommitted using logical index as array position (
raft.nim) — usesfindLogEntryByIndex - Fix Raft loadState silently swallowing errors (
raft.nim) — now logs warning
Storage Engine (2 medium)
- Fix loadSSTable missing minimum file-size check (
lsm.nim) — rejects files < 40 bytes - Fix substr(s, start) returning single char (
udf.nim) — now returns rest-of-string
Distributed Systems (2 high + 1 medium)
- Fix sharding connectWithTimeout missing SO_ERROR check (
sharding.nim) — verifies connection actually succeeded - Fix replication healthCheck double-close socket (
replication.nim) — safe close with try/except
Resource Management (3 medium)
- Fix unbounded plan cache (
adaptive.nim) — max 10000 entries, auto-evict - Fix MVCC unbounded committedTxns/abortedTxns (
mvcc.nim) — prune entries older than oldest active snapshot - Fix connection pool not checking maxLifetime (
pool.nim) — lifetime check added toacquire
Operations (1 medium)
- Fix migration lock persisting after crash (
executor.nim) — stores timestamp, auto-releases after 1 hour
Other
- Fix nl_to_sql DML validation (
executor.nim) — requiresis_superusersession variable for DML - Fix lexer readIdent double column counting (
lexer.nim) — removed manualinc l.col - Fix WebSocket frame 32-bit overflow (
websocket.nim) — guard againstlen > high(int) - Fix admin panel auth (
httpserver.nim) — check auth whenauthEnabled - Fix unused imports (
backup.nim,repair.nim,raft.nim) — movedparseoptintowhen isMainModule, removed unusedalgorithm
Build
- Fix hunos 1.3.1 compatibility with Nim 2.2.x — patched
getRandomBytes→urandominhunos/sessions.nimandhunos/csrf.nim(seeHUNOS_ISSUE.md) - Updated
baradadb.nimbleversion to1.1.7
Tests
- All 448 tests passing, 0 failures
[1.1.6] — previous
See git log for changes prior to this release.