Skip to content

Commit ed79fcf

Browse files
authored
Update duckdb example (#1659)
1 parent 3ee4cca commit ed79fcf

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

examples/scripts/duckdb.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,42 @@
33
* @difficulty intermediate
44
* @tags cli, deploy
55
* @run --allow-read --allow-write --allow-env --allow-net --allow-ffi <url>
6-
* @resource {https://deno.land/x/duckdb} Deno DuckDB on deno.land/x
76
* @resource {https://duckdb.org/} DuckDB - An in-process SQL OLAP database management system
8-
* @resource {https://github.com/suketa/ruby-duckdb?tab=readme-ov-file#pre-requisite-setup-linux} DuckDB Pre-requisite setup (Linux)
7+
* @resource {https://www.npmjs.com/package/@duckdb/node-api} npm:@duckdb/node-api
98
* @group Databases
109
*
1110
* Using Deno with DuckDB, you can connect to memory or a persistent
1211
* database with a filename.
1312
*/
1413

15-
import { open } from "jsr:@divy/duckdb";
14+
import { DuckDBInstance } from "npm:@duckdb/node-api";
1615

17-
// const db = open("./example.db");
18-
const db = open(":memory:");
16+
// For graceful cleanup of resources
17+
using stack = new DisposableStack();
1918

20-
const connection = db.connect();
19+
// Create an in-memory database
20+
const instance = await DuckDBInstance.create(":memory:");
2121

22-
for (const row of connection.stream("select 42 as number")) {
23-
console.debug(`Row Number: ${row.number}`); // -> { number: 42 }
24-
}
22+
// Close the instance when `stack` gets out of scope
23+
stack.defer(() => instance.closeSync());
2524

26-
const prepared = connection.prepare(
27-
"SELECT ?::INTEGER AS number, ?::VARCHAR AS text;",
28-
);
25+
// Connect to the database
26+
const connection = await instance.connect();
2927

30-
const result = prepared.query(1337, "foo"); // [{ number: 1337, text: 'foo' }]
28+
// Close the connection when `stack` gets out of scope
29+
stack.defer(() => connection.closeSync());
3130

32-
console.debug(`Number: ${result[0].number}`);
33-
console.debug(`Text: ${result[0].text}`);
31+
// Simple select query
32+
const reader = await connection.runAndReadAll("select 10, 'foo'");
33+
const rows = reader.getRows();
3434

35-
connection.close();
36-
db.close();
35+
console.debug(rows); // [ [ 10, "foo" ] ]
36+
37+
// Prepared statement
38+
const prepared = await connection.prepare("select $1, $2");
39+
prepared.bindInteger(1, 20);
40+
prepared.bindVarchar(2, "bar");
41+
const reader2 = await prepared.runAndReadAll();
42+
const rows2 = reader2.getRows();
43+
44+
console.debug(rows2); // [ [ 20, "bar" ] ]

0 commit comments

Comments
 (0)