1.1. postgres_boost — runner, CRUD, transactions, _sql runtime
The PostgreSQL runtime layer for daslang’s SQL machinery. A connection is a
SqlRunner — open one with with_postgres(conninfo) $(db) { ... } (RAII;
conninfo is a libpq connection string like "host=localhost dbname=mydb"
or a postgres:// URL) — 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.
PostgreSQL-specific behavior worth knowing (versus the SQLite reference
provider): every statement’s ? placeholders are renumbered to libpq’s
$1, $2, ... in one quote-aware pass at execute time (user-facing SQL keeps
the portable ? spelling; don’t mix dollar-quoted $tag$...$tag$ bodies
with ? binds in raw SQL); parameters travel in text format with explicit
type OIDs, so $n type inference never fails server-side; create_table
renders strict PostgreSQL types (BIGINT / DOUBLE PRECISION / TEXT /
BYTEA) and declares a single integer primary key GENERATED BY DEFAULT AS
IDENTITY; insert reports the new primary key via INSERT ... RETURNING;
nested with_transaction scopes compose as SAVEPOINT / RELEASE (same
as the SQLite reference), with in_transaction reading the connection’s live
PQtransactionStatus; _each_sql iterates a materialized result (libpq
materializes query results anyway). Client-side [sql_function] UDFs are not
available — PostgreSQL runs no client code; use server-side functions from raw
SQL instead.
1.1.1. Structures
- SqlRunner
struct SqlRunner
1.1.2. Runner & lifecycle
- finalize(db: SqlRunner )
def finalize (var db: SqlRunner)
- Arguments:
db : SqlRunner
- in_transaction(db: SqlRunner ): bool
def in_transaction (db: SqlRunner) : bool
- Arguments:
db : SqlRunner
- libpq_version(): int
def libpq_version () : int
- open_postgres(conninfo: string ): SqlRunner
def open_postgres (conninfo: string) : SqlRunner
- Arguments:
conninfo : string
- postgres_server_version(db: SqlRunner ): int
def postgres_server_version (db: SqlRunner) : int
- Arguments:
db : SqlRunner
- try_open_postgres(conninfo: string ): tuple<_is_ok:bool;_value:SqlRunner;_error:string>
def try_open_postgres (conninfo: string) : tuple<_is_ok:bool;_value:SqlRunner;_error:string>
- Arguments:
conninfo : string
- with_postgres(conninfo: string; blk: block<(db:SqlRunner):void> )
def with_postgres (conninfo: string; blk: block<(db:SqlRunner):void>)
- Arguments:
conninfo : string
blk : block<(db: SqlRunner):void>
1.1.3. Raw SQL
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))
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.3.1. exec
- exec(db: SqlRunner; sql: string )
def exec (db: SqlRunner; sql: string)
- Arguments:
db : SqlRunner
sql : string
- 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) )
- renumber_placeholders(sql: string ): string
def renumber_placeholders (sql: string) : string
- Arguments:
sql : string
1.1.3.2. try_exec
- try_exec(db: SqlRunner; sql: string ): SqlError
def try_exec (db: SqlRunner; sql: string) : SqlError
- Arguments:
db : SqlRunner
sql : string
- 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
create_table (db: SqlRunner; t: type<auto(TT) const>; name: string)
delete_by_id (db: SqlRunner; t: type<auto(TT) const>; id: auto(K)) : int
select_from (db: SqlRunner; t: type<auto(TT) const>) : array<TT>
try_check_schema (db: SqlRunner; t: type<auto(TT) const>) : SqlError
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>)
try_drop_table_if_exists (db: SqlRunner; t: auto(TT)) : SqlError
try_drop_view_if_exists (db: SqlRunner; t: auto(TT)) : SqlError
try_insert (db: SqlRunner; row: auto(TT)) : $Result(type<int64>,type<string>)
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_update (db: SqlRunner; row: auto(TT)) : $Result(type<int>,type<string>)
- check_schema(db: SqlRunner; t: type<auto(TT) const> ): auto
def check_schema (db: SqlRunner; t: type<auto(TT) const>) : auto
- Arguments:
db : SqlRunner
t : auto(TT)
1.1.4.1. create_table
- create_table(db: SqlRunner; t: auto(TT) )
def create_table (db: SqlRunner; t: auto(TT))
- Arguments:
db : SqlRunner
t : auto(TT)
- 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:
db : SqlRunner
row : auto(TT)
- 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:
db : SqlRunner
t : auto(TT)
id : auto(K)
- drop_table_if_exists(db: SqlRunner; t: auto(TT) )
def drop_table_if_exists (db: SqlRunner; t: auto(TT))
- Arguments:
db : SqlRunner
t : auto(TT)
- drop_view_if_exists(db: SqlRunner; t: auto(TT) )
def drop_view_if_exists (db: SqlRunner; t: auto(TT))
- Arguments:
db : SqlRunner
t : auto(TT)
1.1.4.2. insert
- insert(db: SqlRunner; row: auto(TT) ): int64
def insert (db: SqlRunner; row: auto(TT)) : int64
- Arguments:
db : SqlRunner
row : auto(TT)
- 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:
db : SqlRunner
t : auto(TT)
- try_check_schema(db: SqlRunner; t: type<auto(TT) const> ): SqlError
def try_check_schema (db: SqlRunner; t: type<auto(TT) const>) : SqlError
- Arguments:
db : SqlRunner
t : auto(TT)
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:
db : SqlRunner
t : auto(TT)
- 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:
db : SqlRunner
row : auto(TT)
- 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:
db : SqlRunner
t : auto(TT)
id : auto(K)
- try_drop_table_if_exists(db: SqlRunner; t: auto(TT) ): SqlError
def try_drop_table_if_exists (db: SqlRunner; t: auto(TT)) : SqlError
- Arguments:
db : SqlRunner
t : auto(TT)
- try_drop_view_if_exists(db: SqlRunner; t: auto(TT) ): SqlError
def try_drop_view_if_exists (db: SqlRunner; t: auto(TT)) : SqlError
- Arguments:
db : SqlRunner
t : auto(TT)
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:
db : SqlRunner
row : auto(TT)
- 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:
db : SqlRunner
t : auto(TT)
- 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:
db : SqlRunner
row : auto(TT)
- update(db: SqlRunner; row: auto(TT) ): int
def update (db: SqlRunner; row: auto(TT)) : int
- Arguments:
db : SqlRunner
row : auto(TT)
1.1.5. Transactions
- try_transaction(db: SqlRunner; blk: block<():void> ): SqlError
def try_transaction (db: SqlRunner; blk: block<():void>) : SqlError
- Arguments:
db : SqlRunner
blk : block<void>
- with_transaction(db: SqlRunner; blk: block<():void> )
def with_transaction (db: SqlRunner; blk: block<():void>)
- Arguments:
db : SqlRunner
blk : block<void>
1.1.6. _sql runtime helpers
- run_dml(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void> ): int
def run_dml (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>) : int
- run_dml_returning(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)> ): array<TT>
def run_dml_returning (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : array<TT>
- Arguments:
- run_each_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_lam: lambda<(var stmt:PgStmt?):auto(TT)> ): auto
def run_each_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; var row_lam: lambda<(var stmt:PgStmt?):auto(TT)>) : auto
- Arguments:
- run_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)> ): array<TT>
def run_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : array<TT>
- Arguments:
- run_select_one(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)> ): TT
def run_select_one (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : TT
- Arguments:
- run_select_one_opt(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Option(type<TT -const -#> )
def run_select_one_opt (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Option(type<TT -const -#>)
- Arguments:
- try_run_dml(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void> ): tuple<_is_ok:bool;_value:int;_error:string>
def try_run_dml (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>) : tuple<_is_ok:bool;_value:int;_error:string>
- try_run_dml_returning(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string> )
def try_run_dml_returning (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string>)
- Arguments:
- try_run_select(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string> )
def try_run_select (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<array<TT -const -#>>,type<string>)
- Arguments:
- try_run_select_one(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<TT -const -#>,type<string> )
def try_run_select_one (db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<TT -const -#>,type<string>)
- Arguments:
- try_run_select_one_opt(db: SqlRunner; sql: string; bind_blk: block<(var stmt:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):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:PgStmt?):void>; row_blk: block<(var stmt:PgStmt?):auto(TT)>) : $Result(type<$Option(type<TT -const -#>)>”Option”type<TT -const -#>,type<string>)
1.1.7. Storage-class bridge
read_via_adapter (stmt: PgStmt?; col: int; t: type<auto(TT) const>) : TT
sql_bind_to_stmt (var stmt: PgStmt?; idx: int; v: $Option(type<auto(TT)>))
sql_bind_to_stmt (var stmt: PgStmt?; idx: int; v: array<uint8>)
sql_read_witness (stmt: PgStmt?; col: int; witness: array<uint8>) : array<uint8>
sql_read_witness (stmt: PgStmt?; col: int; witness: auto(SS)) : SS
sql_read_witness (stmt: PgStmt?; col: int; witness: double) : double
sql_read_witness (stmt: PgStmt?; col: int; witness: int64) : int64
sql_read_witness (stmt: PgStmt?; col: int; witness: string) : string
1.1.7.1. read_via_adapter
- read_via_adapter(stmt: PgStmt?; col: int; t: type<$Option(type<auto(TT)>) const>) : $Option(type<TT -const -#> )
def read_via_adapter (stmt: PgStmt?; col: int; t: type<$Option(type<auto(TT)>) const>) : $Option(type<TT -const -#>)
- Arguments:
stmt : PgStmt?
col : int
t : typemacro
- read_via_adapter(stmt: PgStmt?; col: int; t: type<auto(TT) const> ): TT
1.1.7.2. sql_bind_to_stmt
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: $Option(type<auto(TT)>) )
def sql_bind_to_stmt (var stmt: PgStmt?; idx: int; v: $Option(type<auto(TT)>))
- Arguments:
stmt : PgStmt?
idx : int
v : typemacro
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: array<uint8> )
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: auto(TT) )
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: double )
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: int64 )
- sql_bind_to_stmt(stmt: PgStmt?; idx: int; v: string )
1.1.7.3. sql_read_witness
- sql_read_witness(stmt: PgStmt?; col: int; witness: array<uint8> ): array<uint8>
def sql_read_witness (stmt: PgStmt?; col: int; witness: array<uint8>) : array<uint8>
- Arguments:
stmt : PgStmt?
col : int
witness : array<uint8>
- sql_read_witness(stmt: PgStmt?; col: int; witness: auto(SS) ): SS
- sql_read_witness(stmt: PgStmt?; col: int; witness: double ): double
- sql_read_witness(stmt: PgStmt?; col: int; witness: int64 ): int64
- sql_read_witness(stmt: PgStmt?; col: int; witness: string ): string