# sqlite/query-cols-async
Async twin of `sqlite/query-cols` — return a query's result-set column names in SELECT order off-thread, without executing the statement. Returns a Future.
## Syntax
[sqlite/query-cols-async $db $sql]
## Parameters
- `$db` — database handle
- `$sql` — SQL query; bind params are not accepted — only `$db` and `$sql` are read, extra args are ignored
## Examples
def db [sqlite/open ":memory:"] [sqlite/exec $db "CREATE TABLE t (zebra INTEGER, alpha TEXT)"] [await [sqlite/query-cols-async $db "SELECT zebra, alpha FROM t"]] # → @{zebra alpha}
## Returns
Future; `[await ...]` yields a vector of column-name strings in SELECT order — the reliable source for correctly-ordered headers, since row maps are hash-ordered. The statement is prepared but never stepped. Worker errors resolve as `%Err{:message}`; submit-time errors (bad handle, non-string SQL) return `%Err` directly. The first async call switches the handle to async-only, so later sync `sqlite/*` calls on it return `%Err`. `sqlite/close` drains queued jobs before closing.
## See Also
`sqlite/query-cols`, `sqlite/query-async`