Documentation
Commentary
Execute DuckDB queries and return results as Elisp data structures.
Basic usage:
(duckdb-query "SELECT 42 as answer, 'hello' as greeting")
;; => (((answer . 42) (greeting . "hello")))
(duckdb-query "SELECT * FROM 'data.csv'" :format :columnar)
;; => ((id . [1 2 3]) (name . ["Alice" "Bob" "Carol"]))
Inline reference syntax for binding Elisp data into SQL:
(duckdb-query "SELECT * FROM @data:users WHERE age > @val:min"
:data `((users . ,my-data))
:val '((min . 18)))
Query fragment composition:
(duckdb-query "SELECT @sql:cols FROM (@sql:base)"
:sql '((cols . "id, name")
(base . "SELECT * FROM users")))
Database context management:
(duckdb-query-with-database "app.db"
(duckdb-query "SELECT * FROM users"))
Session-based execution for low-latency queries:
(duckdb-query-with-transient-session
(duckdb-query "CREATE TABLE t AS SELECT 1")
(duckdb-query "SELECT * FROM t"))
The package provides:
- `duckdb-query' - Execute queries with format conversion
- `duckdb-query-value' - Extract single scalar value
- `duckdb-query-row' - Extract single row as alist
- `duckdb-query-column' - Extract single column as list
- `duckdb-query-describe' - Schema introspection
- `duckdb-query-with-database' - Scoped database context
- `duckdb-query-with-transient-database' - Temporary file-based database
- `duckdb-query-with-session' - Scoped session execution
- `duckdb-query-with-transient-session' - Ephemeral session
Reference types in SQL strings:
- @val:name Literal value from :val parameter (safe quoting)
- @data:name Elisp data from :data parameter (serialized to JSON)
- @sql:name SQL fragment from :sql parameter (text substitution)
- @org:name Org table from current buffer
- @org:file:name Org table from specific file
Output formats via :format parameter:
- :alist (default), :plist, :hash, :vector, :columnar, :org-table
- :single, :row, :column (cardinality-enforced extraction)
- :raw (unprocessed JSON string)
Execution strategies via :executor parameter:
- :cli (default) - Direct CLI invocation
- :session - Persistent process via `duckdb-query-with-session'
- function - Custom executor function
- Custom objects via `cl-defmethod'
For fontification of references, see `duckdb-query-font-lock-mode'.
For completion of references and SQL, see `duckdb-query-complete-mode'.
For benchmarking, see duckdb-query-bench.el.
Requires
Dependencies
Consumers
Reverse Dependencies
No reverse dependencies recorded.