Skip to content

Commit ff15d1a

Browse files
committed
extracted statements tests
1 parent 884c95f commit ff15d1a

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import duckdb from '@duckdb/node-bindings';
2+
import { expect, suite, test } from 'vitest';
3+
import { expectResult } from './utils/expectResult';
4+
import { INTEGER } from './utils/expectedLogicalTypes';
5+
import { data } from './utils/expectedVectors';
6+
import { withConnection } from './utils/withConnection';
7+
8+
suite('extracted statements', () => {
9+
test('no statements', async () => {
10+
await withConnection(async (connection) => {
11+
const { extracted_statements, statement_count } = await duckdb.extract_statements(connection, '');
12+
try {
13+
expect(statement_count).toBe(0);
14+
} finally {
15+
duckdb.destroy_extracted(extracted_statements);
16+
}
17+
});
18+
});
19+
test('error', async () => {
20+
await withConnection(async (connection) => {
21+
const { extracted_statements, statement_count } = await duckdb.extract_statements(connection, 'x');
22+
try {
23+
expect(statement_count).toBe(0);
24+
expect(duckdb.extract_statements_error(extracted_statements)).toBe('Parser Error: syntax error at or near "x"');
25+
} finally {
26+
duckdb.destroy_extracted(extracted_statements);
27+
}
28+
});
29+
});
30+
test('one statement', async () => {
31+
await withConnection(async (connection) => {
32+
const { extracted_statements, statement_count } = await duckdb.extract_statements(connection, 'select 11 as a');
33+
try {
34+
expect(statement_count).toBe(1);
35+
const prepared = await duckdb.prepare_extracted_statement(connection, extracted_statements, 0);
36+
const result = await duckdb.execute_prepared(prepared);
37+
try {
38+
await expectResult(result, {
39+
columns: [
40+
{ name: 'a', logicalType: INTEGER },
41+
],
42+
chunks: [
43+
{ rowCount: 1, vectors: [data(4, [true], [11])]},
44+
],
45+
});
46+
} finally {
47+
duckdb.destroy_result(result);
48+
}
49+
} finally {
50+
duckdb.destroy_extracted(extracted_statements);
51+
}
52+
});
53+
});
54+
test('multiple statements', async () => {
55+
await withConnection(async (connection) => {
56+
const { extracted_statements, statement_count } = await duckdb.extract_statements(connection,
57+
'select 11 as a; select 22 as b; select 33 as c'
58+
);
59+
try {
60+
expect(statement_count).toBe(3);
61+
62+
const prepared0 = await duckdb.prepare_extracted_statement(connection, extracted_statements, 0);
63+
const result0 = await duckdb.execute_prepared(prepared0);
64+
try {
65+
await expectResult(result0, {
66+
columns: [
67+
{ name: 'a', logicalType: INTEGER },
68+
],
69+
chunks: [
70+
{ rowCount: 1, vectors: [data(4, [true], [11])]},
71+
],
72+
});
73+
} finally {
74+
duckdb.destroy_result(result0);
75+
}
76+
77+
const prepared1 = await duckdb.prepare_extracted_statement(connection, extracted_statements, 1);
78+
const result1 = await duckdb.execute_prepared(prepared1);
79+
try {
80+
await expectResult(result1, {
81+
columns: [
82+
{ name: 'b', logicalType: INTEGER },
83+
],
84+
chunks: [
85+
{ rowCount: 1, vectors: [data(4, [true], [22])]},
86+
],
87+
});
88+
} finally {
89+
duckdb.destroy_result(result1);
90+
}
91+
92+
const prepared2 = await duckdb.prepare_extracted_statement(connection, extracted_statements, 2);
93+
const result2 = await duckdb.execute_prepared(prepared2);
94+
try {
95+
await expectResult(result2, {
96+
columns: [
97+
{ name: 'c', logicalType: INTEGER },
98+
],
99+
chunks: [
100+
{ rowCount: 1, vectors: [data(4, [true], [33])]},
101+
],
102+
});
103+
} finally {
104+
duckdb.destroy_result(result2);
105+
}
106+
107+
} finally {
108+
duckdb.destroy_extracted(extracted_statements);
109+
}
110+
});
111+
});
112+
});

0 commit comments

Comments
 (0)