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:
in_transaction(db: SqlRunner ): bool

def in_transaction (db: SqlRunner) : bool

Arguments:
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:
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

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) )

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:
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:PgStmt?):void> ): int

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

Arguments:
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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_lam : lambda<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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>

Arguments:
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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

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>)

Arguments:
  • db : SqlRunner

  • sql : string

  • bind_blk : block<(stmt: PgStmt?):void>

  • row_blk : block<(stmt: PgStmt?):auto(TT)>

1.1.7. Storage-class bridge

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