All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.7.0] - 2026-06-13
Extends the client to cover the engine's new query-layer features: scoped search, server-side aggregation and deletion, hybrid search, and graph analytics verbs.
Added
Dllb.Query.search/4andDllb.Query.vector_search/4accept a:whereoption that scopes ranked hits server-side (SEARCH ... WHERE ... LIMIT,VECTOR SEARCH ... WHERE ... K).Dllb.Query.count/2accepts a:group_byoption, buildingCOUNT <table> [WHERE ...] GROUP BY <field>. Grouped counts come back as aDllb.Result.Rows, one row per distinct value with acount.Dllb.Query.delete_where/2buildsDELETE <table> [WHERE ...], removing every matching row server-side in a single operation (engine-maintained secondary, full-text, and vector indexes).Dllb.Query.hybrid_search/6buildsHYBRID SEARCH <table> TEXT <field> '<q>' VECTOR <field> [..] [ALPHA a] [WHERE ..] [LIMIT n], fusing BM25 and HNSW scores. Each row carriesscore,text_score, andvector_score.- Graph analytics verbs:
Dllb.Query.graph_pagerank/2(DAMPING/MAX_ITER/LIMIT),Dllb.Query.graph_centrality/2(:degree/:indegree/:outdegree,LIMIT),Dllb.Query.graph_path/4(GRAPH PATH <src> -> <dst> ON <table> [MAX_DEPTH n]), andDllb.Query.graph_edges/2(GRAPH EDGES <table> [WHERE ...], surfacing the stored edgeweight, default1.0). Dllb.Result.DeletedManystruct, parsed from{"status":"deleted_many"}, reporting the number of rows removed byDELETE ... WHERE.
Changed
Dllb.MetaAST.Querynow builds on the native verbs instead of the previous client-side workarounds:similar_to/2,search_source/2,search_docs/2, andhybrid_search/3emitVECTOR SEARCH/SEARCH/HYBRID SEARCH, with optional:kind/:file_path/:language/:project_pathscope filters for multi-project isolation.delete_by_file/1anddelete_by_project/1build a singleDELETE ... WHERE;exec_delete_by_file/2andexec_delete_by_project/2issue one statement and read the deleted count fromDeletedMany(previously a SELECT followed by N point deletes).stats_query/0buildsCOUNT ast_node GROUP BY kind;exec_stats/1reads the grouped rows server-side instead of aggregating client-side.
Removed
- BREAKING:
Dllb.MetaAST.Query.delete_by_file_select/1is removed. Use the nativedelete_by_file/1(orexec_delete_by_file/2) instead.
[0.6.0] - 2026-06-13
Adds client support for the engine's full-text (Tantivy/BM25) and vector (HNSW) index creation and search, now wired into the query layer.
Added
Dllb.Query.define_fulltext_index/4buildsDEFINE FULLTEXT INDEX <name> ON TABLE <table> FIELDS <field> [ANALYZER <a>], with an optional:analyzer(default,simple, or a language).Dllb.Query.define_vector_index/5buildsDEFINE VECTOR INDEX <name> ON TABLE <table> FIELDS <field> DIMENSION <n> [METRIC <m>], with an optional:metric(cosine,euclidean/l2, ordot).Dllb.Query.search/4buildsSEARCH <table> <field> '<query>' [LIMIT n](BM25 full-text). Results are rows ranked best-first, each with ascore.Dllb.Query.vector_search/4buildsVECTOR SEARCH <table> <field> [v, ...] [K n](approximate KNN). Results are rows ordered nearest-first, each with adistance.Dllb.Schema.ast_node_search_indexes/0defines the full-text indexes onsource_text/docstringand the vector indexes onsource_embedding(768, cosine) /structure_embedding(384, cosine).
Changed
Dllb.Schema.all_statements/0now also emits the full-text and vector search index definitions, sobootstrap/1provisions them. These require a dllb server with search services enabled (the default server build).
[0.5.0] - 2026-06-13
Synchronizes the client with the dllb engine's persisted secondary-index catalog and related query features.
Added
Dllb.Query.define_index/4builds the engine's catalog-backed secondary index DDL:DEFINE INDEX <name> ON TABLE <table> FIELDS <field>[, ...]. It supports composite (multi-field) indexes with leftmost-prefix planning and an optionalunique: trueconstraint over the full indexed tuple.Dllb.Query.remove_index/2buildsREMOVE INDEX <name> ON TABLE <table>.Dllb.Query.upsert/4accepts an explicitupdate_fieldsmap, emittingCREATE ... ON CONFLICT UPDATE SET <update_fields>. The existingupsert/3behavior is unchanged.
Changed
Dllb.Schema.ast_node_indexes/0now emits the new secondary-index DDL and definesidx_kind,idx_language,idx_file_path,idx_module,idx_project_path, and the compositeidx_file_kindonfile_path, kind.- Equality and range predicates on indexed fields are now transparently accelerated by the engine; no client query changes are required to benefit.
Removed
- BREAKING: the typed
Dllb.Query.define_index/5variants (:btree,:fulltext,:hnsw) are removed. They generated DDL (SEARCH ANALYZER ...,HNSW DIMENSION ... DIST ...) that the current engine parser rejects. Usedefine_index/4for secondary indexes. Dllb.Schema.ast_node_indexes/0no longer emits the non-functional HNSW (idx_source_embedding,idx_structure_embedding) and full-text (idx_source_text,idx_docstring) index definitions, because vector and full-text index creation are not exposed by the engine's query protocol.