duckdb 0.5.2-dev874.0 → 0.5.2-dev880.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,209 @@
1
+ import * as duckdb from "..";
2
+ import assert from "assert";
3
+ import fs from "fs";
4
+
5
+ describe("TypeScript declarataions", function () {
6
+ var db: duckdb.Database;
7
+ before(function (done) {
8
+ db = new duckdb.Database(":memory:", done);
9
+ });
10
+
11
+ it("typescript: Database constructor no callback", (done) => {
12
+ const tdb0 = new duckdb.Database(":memory:"); // no callback argument
13
+ done();
14
+ });
15
+
16
+ it("typescript: Database constructor path error", (done) => {
17
+ const tdb0 = new duckdb.Database("./bogusPath.db", (err, res) => {
18
+ // Issue: I'm a little surprised that specifying an invalid file path
19
+ // doesn't seem to immediately signal an error here, but it doesn't.
20
+ tdb0.all(
21
+ "PRAGMA show_tables",
22
+ (err: duckdb.DuckDbError | null, res: any) => {
23
+ done();
24
+ }
25
+ );
26
+ });
27
+ });
28
+
29
+ it("typescript: query with error", (done) => {
30
+ // query with an error:
31
+ db.all(
32
+ "SELECT * FROM sometable",
33
+ (err: duckdb.DuckDbError | null, res: any) => {
34
+ assert.equal(err?.code, "DUCKDB_NODEJS_ERROR");
35
+ assert.equal(err?.errno, -1);
36
+ done();
37
+ }
38
+ );
39
+ });
40
+
41
+ it("typescript: Database#exec", function (done) {
42
+ var sql = fs.readFileSync("test/support/script.sql", "utf8");
43
+ db.exec(sql, function (err: duckdb.DuckDbError | null) {
44
+ if (err) throw err;
45
+ done();
46
+ });
47
+ });
48
+
49
+ it("typescript: retrieve database structure", function (done) {
50
+ db.all(
51
+ "SELECT type, name FROM sqlite_master ORDER BY type, name",
52
+ function (err: duckdb.DuckDbError | null, rows: duckdb.TableData) {
53
+ if (err) throw err;
54
+ assert.deepEqual(rows, [
55
+ { type: "table", name: "grid_key" },
56
+ { type: "table", name: "grid_utfgrid" },
57
+ { type: "table", name: "images" },
58
+ { type: "table", name: "keymap" },
59
+ { type: "table", name: "map" },
60
+ { type: "table", name: "metadata" },
61
+ { type: "view", name: "grid_data" },
62
+ { type: "view", name: "grids" },
63
+ { type: "view", name: "tiles" },
64
+ ]);
65
+ done();
66
+ }
67
+ );
68
+ });
69
+
70
+ it("typescript: database#all with no callback", (done) => {
71
+ db.all("select 42 as x");
72
+ done();
73
+ });
74
+
75
+ it("typescript: database#connect", (done) => {
76
+ const conn = db.connect();
77
+ assert(conn instanceof duckdb.Connection);
78
+ done();
79
+ });
80
+
81
+ it("typescript: ensure empty results work ok", (done) => {
82
+ db.all(
83
+ "create table test_table as select 42 as x",
84
+ (err: duckdb.DuckDbError | null, res: duckdb.TableData) => {
85
+ db.all(
86
+ "drop table test_table",
87
+ (err: duckdb.DuckDbError | null, res: duckdb.TableData) => {
88
+ console.log("drop table results: ", err, res);
89
+ assert.deepEqual(res, []);
90
+ done();
91
+ }
92
+ );
93
+ }
94
+ );
95
+ });
96
+
97
+ it("typescript: ternary int udf", function (done) {
98
+ db.register(
99
+ "udf",
100
+ "integer",
101
+ (x: number, y: number, z: number) => x + y + z
102
+ );
103
+ db.all(
104
+ "select udf(21, 20, 1) v",
105
+ function (err: duckdb.DuckDbError | null, rows: duckdb.TableData) {
106
+ if (err) throw err;
107
+ assert.equal(rows[0].v, 42);
108
+ }
109
+ );
110
+ db.unregister("udf", done);
111
+ });
112
+ it("typescript: retrieve 100,000 rows with Statement#each", function (done) {
113
+ var total = 100000;
114
+ var retrieved = 0;
115
+
116
+ db.each(
117
+ "SELECT * FROM range(0, ?)",
118
+ total,
119
+ function (err: duckdb.DuckDbError | null, row: any) {
120
+ if (err) throw err;
121
+ retrieved++;
122
+
123
+ if (retrieved === total) {
124
+ assert.equal(
125
+ retrieved,
126
+ total,
127
+ "Only retrieved " + retrieved + " out of " + total + " rows."
128
+ );
129
+ done();
130
+ }
131
+ }
132
+ );
133
+ });
134
+ });
135
+
136
+ describe("typescript: simple prepared statement", function () {
137
+ var db: duckdb.Database;
138
+ before(function (done) {
139
+ db = new duckdb.Database(":memory:", done);
140
+ });
141
+
142
+ it("should prepare, run and finalize the statement", function (done) {
143
+ db.prepare("CREATE TABLE foo (bar text)").run().finalize(done);
144
+ });
145
+
146
+ after(function (done) {
147
+ db.close(done);
148
+ });
149
+ });
150
+
151
+ describe("typescript: prepared statements", function () {
152
+ var db: duckdb.Database;
153
+ before(function (done) {
154
+ db = new duckdb.Database(":memory:", done);
155
+ });
156
+
157
+ var inserted = 0;
158
+ var retrieved = 0;
159
+
160
+ // We insert and retrieve that many rows.
161
+ var count = 1000;
162
+
163
+ it("typescript: should create the table", function (done) {
164
+ db.prepare("CREATE TABLE foo (txt text, num int, flt double, blb blob)")
165
+ .run()
166
+ .finalize(done);
167
+ });
168
+
169
+ it("typescript: should insert " + count + " rows", function (done) {
170
+ for (var i = 0; i < count; i++) {
171
+ db.prepare("INSERT INTO foo VALUES(?, ?, ?, ?)")
172
+ .run(
173
+ "String " + i,
174
+ i,
175
+ i * Math.PI,
176
+ null,
177
+ function (err: duckdb.DuckDbError | null) {
178
+ if (err) throw err;
179
+ inserted++;
180
+ }
181
+ )
182
+ .finalize(function (err) {
183
+ if (err) throw err;
184
+ if (inserted == count) done();
185
+ });
186
+ }
187
+ });
188
+ });
189
+
190
+ describe("typescript: stream and QueryResult", function () {
191
+ const total = 1000;
192
+
193
+ let db: duckdb.Database;
194
+ let conn: duckdb.Connection;
195
+ before((done) => {
196
+ db = new duckdb.Database(":memory:", () => {
197
+ conn = new duckdb.Connection(db, done);
198
+ });
199
+ });
200
+
201
+ it("streams results", async () => {
202
+ let retrieved = 0;
203
+ const stream = conn.stream("SELECT * FROM range(0, ?)", total);
204
+ for await (const row of stream) {
205
+ retrieved++;
206
+ }
207
+ assert.equal(total, retrieved);
208
+ });
209
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "allowJs": false,
4
+ "esModuleInterop": true,
5
+ "noImplicitAny": true,
6
+ "strict": true,
7
+ "outDir": "./dist",
8
+ "types": ["node", "mocha"]
9
+ },
10
+ "include": ["test/**/*"],
11
+ "exclude": ["node_modules"]
12
+ }