Skip to content

Commit 61d0095

Browse files
committed
destroy internally-created prepared statements
1 parent f977dd5 commit 61d0095

File tree

1 file changed

+37
-18
lines changed

1 file changed

+37
-18
lines changed

api/src/DuckDBConnection.ts

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,13 @@ export class DuckDBConnection {
4646
types?: DuckDBType[] | Record<string, DuckDBType | undefined>
4747
): Promise<DuckDBMaterializedResult> {
4848
if (values) {
49-
const prepared = await this.prepare(sql);
50-
prepared.bind(values, types);
51-
return prepared.run();
49+
const prepared = await this.createPrepared(sql);
50+
try {
51+
prepared.bind(values, types);
52+
return prepared.run();
53+
} finally {
54+
prepared.destroySync();
55+
}
5256
} else {
5357
return new DuckDBMaterializedResult(
5458
await duckdb.query(this.connection, sql)
@@ -86,11 +90,15 @@ export class DuckDBConnection {
8690
values?: DuckDBValue[] | Record<string, DuckDBValue>,
8791
types?: DuckDBType[] | Record<string, DuckDBType | undefined>
8892
): Promise<DuckDBResult> {
89-
const prepared = await this.prepare(sql);
90-
if (values) {
91-
prepared.bind(values, types);
93+
const prepared = await this.createPrepared(sql);
94+
try {
95+
if (values) {
96+
prepared.bind(values, types);
97+
}
98+
return prepared.stream();
99+
} finally {
100+
prepared.destroySync();
92101
}
93-
return prepared.stream();
94102
}
95103
public async streamAndRead(
96104
sql: string,
@@ -127,30 +135,41 @@ export class DuckDBConnection {
127135
values?: DuckDBValue[] | Record<string, DuckDBValue>,
128136
types?: DuckDBType[] | Record<string, DuckDBType | undefined>
129137
): Promise<DuckDBPendingResult> {
130-
const prepared = await this.prepare(sql);
131-
if (values) {
132-
prepared.bind(values, types);
138+
const prepared = await this.createPrepared(sql);
139+
try {
140+
if (values) {
141+
prepared.bind(values, types);
142+
}
143+
return prepared.start();
144+
} finally {
145+
prepared.destroySync();
133146
}
134-
return prepared.start();
135147
}
136148
public async startStream(
137149
sql: string,
138150
values?: DuckDBValue[] | Record<string, DuckDBValue>,
139151
types?: DuckDBType[] | Record<string, DuckDBType | undefined>
140152
): Promise<DuckDBPendingResult> {
141-
const prepared = await this.prepare(sql);
142-
if (values) {
143-
prepared.bind(values, types);
153+
const prepared = await this.createPrepared(sql);
154+
try {
155+
if (values) {
156+
prepared.bind(values, types);
157+
}
158+
return prepared.startStream();
159+
} finally {
160+
prepared.destroySync();
144161
}
145-
return prepared.startStream();
146162
}
147163
public async prepare(sql: string): Promise<DuckDBPreparedStatement> {
148-
const prepared = new DuckDBPreparedStatement(
149-
await duckdb.prepare(this.connection, sql)
150-
);
164+
const prepared = await this.createPrepared(sql);
151165
this.preparedStatements.add(prepared);
152166
return prepared;
153167
}
168+
private async createPrepared(sql: string): Promise<DuckDBPreparedStatement> {
169+
return new DuckDBPreparedStatement(
170+
await duckdb.prepare(this.connection, sql)
171+
);
172+
}
154173
public async extractStatements(
155174
sql: string
156175
): Promise<DuckDBExtractedStatements> {

0 commit comments

Comments
 (0)