1.1. duckdb_boost — runner, CRUD, transactions, _sql runtime

The DuckDB runtime layer for daslang’s SQL machinery. A connection is a SqlRunner — open one with with_duckdb(path) $(db) { ... } (RAII; use ":memory:" for an in-memory database) — and everything else takes it as the first argument: raw exec / try_exec, typed CRUD over [sql_table] structs (create_table / insert / update / delete_ / check_schema), with_transaction / try_transaction, and the run_select family that _sql(...) chains compile into.

DuckDB-specific behavior worth knowing (versus the SQLite reference provider): create_table renders strict DuckDB types (BIGINT / DOUBLE / VARCHAR / BLOB) and pairs a single integer primary key with a CREATE SEQUENCE + DEFAULT nextval(...) since DuckDB has no rowid; insert reports the new primary key via INSERT ... RETURNING; nested with_transaction scopes JOIN the outer transaction (DuckDB has no savepoints — depth is tracked on the runner, and mixing raw exec("BEGIN") with the tracked helpers desyncs it); _each_sql iterates a materialized result (DuckDB materializes query results anyway). [sql_function] registers a daslang function as a scalar UDF on every subsequently opened connection and makes it usable inside _sql chains.

1.1.1. Structures

SqlRunner

struct SqlRunner

1.1.2. Runner & lifecycle

duckdb_version(): string

def duckdb_version () : string

finalize(db: SqlRunner )

def finalize (var db: SqlRunner)

Arguments:
in_transaction(db: SqlRunner ): bool

def in_transaction (db: SqlRunner) : bool

Arguments:
open_duckdb(path: string ): SqlRunner

def open_duckdb (path: string) : SqlRunner

Arguments:
  • path : string

try_open_duckdb(path: string ): tuple<_is_ok:bool;_value:SqlRunner;_error:string>

def try_open_duckdb (path: string) : tuple<_is_ok:bool;_value:SqlRunner;_error:string>

Arguments:
  • path : string

with_duckdb(path: string; blk: block<(db:SqlRunner):void> )

def with_duckdb (path: string; blk: block<(db:SqlRunner):void>)

Arguments:
  • path : string

  • blk : block<(db: SqlRunner):void>

1.1.3. Raw SQL

1.1.3.1. exec

exec(db: SqlRunner; sql: string )

def exec (db: SqlRunner; sql: string)

Arguments:
exec(db: SqlRunner; sql: string; arg0: auto(A0) )
exec(db: SqlRunner; sql: string; arg0: auto(A0); arg1: auto(A1) )
exec(db: SqlRunner; sql: string; arg0: auto(A0); arg1: auto(A1); arg2: auto(A2) )

1.1.3.2. try_exec

try_exec(db: SqlRunner; sql: string ): SqlError

def try_exec (db: SqlRunner; sql: string) : SqlError

Arguments:
try_exec(db: SqlRunner; sql: string; arg0: auto(A0) ): SqlError
try_exec(db: SqlRunner; sql: string; arg0: auto(A0); arg1: auto(A1) ): SqlError
try_exec(db: SqlRunner; sql: string; arg0: auto(A0); arg1: auto(A1); arg2: auto(A2) ): SqlError

1.1.4. CRUD over [sql_table] structs

check_schema(db: SqlRunner; t: type<auto(TT) const> ): auto

def check_schema (db: SqlRunner; t: type<auto(TT) const>) : auto

Arguments:

1.1.4.1. create_table

create_table(db: SqlRunner; t: auto(TT) )

def create_table (db: SqlRunner; t: auto(TT))

Arguments:
create_table(db: SqlRunner; t: type<auto(TT) const>; name: string )

delete_(db: SqlRunner; row: auto(TT) ): int

def delete_ (db: SqlRunner; row: auto(TT)) : int

Arguments:
delete_by_id(db: SqlRunner; t: type<auto(TT) const>; id: auto(K) ): int

def delete_by_id (db: SqlRunner; t: type<auto(TT) const>; id: auto(K)) : int

Arguments:
drop_table_if_exists(db: SqlRunner; t: auto(TT) )

def drop_table_if_exists (db: SqlRunner; t: auto(TT))

Arguments:
drop_view_if_exists(db: SqlRunner; t: auto(TT) )

def drop_view_if_exists (db: SqlRunner; t: auto(TT))

Arguments:

1.1.4.2. insert

insert(db: SqlRunner; row: auto(TT) ): int64

def insert (db: SqlRunner; row: auto(TT)) : int64

Arguments:
insert(db: SqlRunner; row: auto(TT); name: string ): int64
insert(db: SqlRunner; rows: array<auto(TT)> ): int64

select_from(db: SqlRunner; t: type<auto(TT) const> ): array<TT>

def select_from (db: SqlRunner; t: type<auto(TT) const>) : array<TT>

Arguments:
try_check_schema(db: SqlRunner; t: type<auto(TT) const> ): SqlError

def try_check_schema (db: SqlRunner; t: type<auto(TT) const>) : SqlError

Arguments:

1.1.4.3. try_create_table

try_create_table(db: SqlRunner; t: auto(TT) ): SqlError

def try_create_table (db: SqlRunner; t: auto(TT)) : SqlError

Arguments:
try_create_table(db: SqlRunner; t: type<auto(TT) const>; name: string ): SqlError

try_delete_(db: SqlRunner; row: auto(TT)) : $Result(type<int>,type<string> )

def try_delete_ (db: SqlRunner; row: auto(TT)) : $Result(type<int>,type<string>)

Arguments:
try_delete_by_id(db: SqlRunner; t: type<auto(TT) const>; id: auto(K)) : $Result(type<int>,type<string> )

def try_delete_by_id (db: SqlRunner; t: type<auto(TT) const>; id: auto(K)) : $Result(type<int>,type<string>)

Arguments:
try_drop_table_if_exists(db: SqlRunner; t: auto(TT) ): SqlError

def try_drop_table_if_exists (db: SqlRunner; t: auto(TT)) : SqlError

Arguments:
try_drop_view_if_exists(db: SqlRunner; t: auto(TT) ): SqlError

def try_drop_view_if_exists (db: SqlRunner; t: auto(TT)) : SqlError

Arguments:

1.1.4.4. try_insert

try_insert(db: SqlRunner; row: auto(TT)) : $Result(type<int64>,type<string> )

def try_insert (db: SqlRunner; row: auto(TT)) : $Result(type<int64>,type<string>)

Arguments:
try_insert(db: SqlRunner; row: auto(TT); name: string) : $Result(type<int64>,type<string> )
try_insert(db: SqlRunner; rows: array<auto(TT)>) : $Result(type<int64>,type<string> )

try_select_from(db: SqlRunner; t: type<auto(TT) const>) : $Result(type<array<TT -const -#>>,type<string> )

def try_select_from (db: SqlRunner; t: type<auto(TT) const>) : $Result(type<array<TT -const -#>>,type<string>)

Arguments:
try_update(db: SqlRunner; row: auto(TT)) : $Result(type<int>,type<string> )

def try_update (db: SqlRunner; row: auto(TT)) : $Result(type<int>,type<string>)

Arguments:
update(db: SqlRunner; row: auto(TT) ): int

def update (db: SqlRunner; row: auto(TT)) : int

Arguments:

1.1.5. Transactions

try_transaction(db: SqlRunner; blk: block<():void> ): SqlError

def try_transaction (db: SqlRunner; blk: block<():void>) : SqlError

Arguments:
with_transaction(db: SqlRunner; blk: block<():void> )

def with_transaction (db: SqlRunner; blk: block<():void>)

Arguments:

1.1.6. _sql runtime helpers

run_dml(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void> ): int

def run_dml (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>) : int

Arguments:
run_dml_returning(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)> ): array<TT>

def run_dml_returning (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : array<TT>

Arguments:
run_each_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_lam: lambda<(var stmt:DuckStmt?):auto(TT)> ): auto

def run_each_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; var row_lam: lambda<(var stmt:DuckStmt?):auto(TT)>) : auto

Arguments:
run_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)> ): array<TT>

def run_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : array<TT>

Arguments:
run_select_one(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)> ): TT

def run_select_one (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : TT

Arguments:
run_select_one_opt(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Option(type<TT -const -#> )

def run_select_one_opt (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Option(type<TT -const -#>)

Arguments:
try_run_dml(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void> ): tuple<_is_ok:bool;_value:int;_error:string>

def try_run_dml (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>) : tuple<_is_ok:bool;_value:int;_error:string>

Arguments:
try_run_dml_returning(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string> )

def try_run_dml_returning (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string>)

Arguments:
try_run_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string> )

def try_run_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string>)

Arguments:
try_run_select_one(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<TT -const -#>,type<string> )

def try_run_select_one (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<TT -const -#>,type<string>)

Arguments:
try_run_select_one_opt(db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<$Option(type<TT -const -#>)>"Option"type<TT -const -#>,type<string> )

def try_run_select_one_opt (db: SqlRunner; sql: string; bind_blk: block<(var stmt:DuckStmt?):void>; row_blk: block<(var stmt:DuckStmt?):auto(TT)>) : $Result(type<$Option(type<TT -const -#>)>”Option”type<TT -const -#>,type<string>)

Arguments:

1.1.7. Storage-class bridge

1.1.7.1. read_via_adapter

read_via_adapter(stmt: DuckStmt?; col: int; t: type<$Option(type<auto(TT)>) const>) : $Option(type<TT -const -#> )

def read_via_adapter (stmt: DuckStmt?; col: int; t: type<$Option(type<auto(TT)>) const>) : $Option(type<TT -const -#>)

Arguments:
  • stmt : DuckStmt?

  • col : int

  • t : typemacro

read_via_adapter(stmt: DuckStmt?; col: int; t: type<auto(TT) const> ): TT

1.1.7.2. sql_bind_to_stmt

sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: $Option(type<auto(TT)>) )

def sql_bind_to_stmt (var stmt: DuckStmt?; idx: int; v: $Option(type<auto(TT)>))

Arguments:
  • stmt : DuckStmt?

  • idx : int

  • v : typemacro

sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: array<uint8> )
sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: auto(TT) )
sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: double )
sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: int64 )
sql_bind_to_stmt(stmt: DuckStmt?; idx: int; v: string )

1.1.7.3. sql_read_witness

sql_read_witness(stmt: DuckStmt?; col: int; witness: array<uint8> ): array<uint8>

def sql_read_witness (stmt: DuckStmt?; col: int; witness: array<uint8>) : array<uint8>

Arguments:
  • stmt : DuckStmt?

  • col : int

  • witness : array<uint8>

sql_read_witness(stmt: DuckStmt?; col: int; witness: auto(SS) ): SS
sql_read_witness(stmt: DuckStmt?; col: int; witness: double ): double
sql_read_witness(stmt: DuckStmt?; col: int; witness: int64 ): int64
sql_read_witness(stmt: DuckStmt?; col: int; witness: string ): string