Query builder that generates dllb SQL strings.
Provides functions to construct CREATE, SELECT, UPDATE, DELETE, RELATE, and DEFINE statements for the dllb query language. All functions return plain query strings ready to be sent over the wire.
Summary
Functions
Builds a CREATE statement for inserting a new record.
Builds a CREATE statement with an explicit record ID.
Builds a DEFINE FIELD statement.
Builds a DEFINE INDEX statement.
Builds a DEFINE TABLE statement.
Builds a DELETE statement for a record.
Passes through a raw query string without modification.
Builds a RELATE statement to create a graph edge between two records.
Builds a SELECT statement with optional clauses.
Builds an UPDATE statement for an existing record.
Types
Functions
Builds a CREATE statement for inserting a new record.
Examples
iex> Dllb.Query.create("user", %{name: "Alice", age: 30})
"CREATE user SET age = 30, name = 'Alice'"
Builds a CREATE statement with an explicit record ID.
Examples
iex> Dllb.Query.create_with_id("user", "u1", %{name: "Alice"})
"CREATE user:u1 SET name = 'Alice'"
Builds a DEFINE FIELD statement.
Options
:required- iftrue, appends ASSERT $value IS NOT NONE
Examples
iex> Dllb.Query.define_field("user", "name", "string", required: true)
"DEFINE FIELD name ON user TYPE string ASSERT $value IS NOT NONE"
Builds a DEFINE INDEX statement.
Supported index types: :btree, :fulltext, :hnsw.
Options (for HNSW vector indexes)
:dimension- vector dimension:dist- distance metric (e.g."COSINE","EUCLIDEAN")
Examples
iex> Dllb.Query.define_index("user", "idx_name", ["name"], :btree)
"DEFINE INDEX idx_name ON user FIELDS name SEARCH ANALYZER btree"
iex> Dllb.Query.define_index("ast_node", "idx_src_embed", ["source_embedding"], :hnsw, dimension: 768, dist: "COSINE")
"DEFINE INDEX idx_src_embed ON ast_node FIELDS source_embedding HNSW DIMENSION 768 DIST COSINE"
Builds a DEFINE TABLE statement.
Mode can be :schemafull or :schemaless.
Examples
iex> Dllb.Query.define_table("user", :schemafull)
"DEFINE TABLE user SCHEMAFULL"
Builds a DELETE statement for a record.
Examples
iex> Dllb.Query.delete("user:u1")
"DELETE user:u1"
Passes through a raw query string without modification.
Examples
iex> Dllb.Query.raw("INFO FOR DB")
"INFO FOR DB"
Builds a RELATE statement to create a graph edge between two records.
Examples
iex> Dllb.Query.relate("user:a", "follows", "user:b", %{since: "2024"})
"RELATE user:a->follows->user:b SET since = '2024'"
@spec select(String.t(), select_opts()) :: String.t()
Builds a SELECT statement with optional clauses.
Options
:fields- list of field names to select (default["*"]):where- WHERE clause string:order- ORDER BY clause string:limit- LIMIT value:fetch- graph traversal fetch clause (e.g."->calls->fn_node")
Examples
iex> Dllb.Query.select("user", where: "age > 25", limit: 10)
"SELECT * FROM user WHERE age > 25 LIMIT 10"
Builds an UPDATE statement for an existing record.
Examples
iex> Dllb.Query.update("user:u1", %{name: "Bob"})
"UPDATE user:u1 SET name = 'Bob'"