Skip to content

Commit 353a66c

Browse files
committed
getTableNames to pass strings via malloc
1 parent 01e69d5 commit 353a66c

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

lib/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ if(EMSCRIPTEN)
316316
_duckdb_web_get_feature_flags, \
317317
_duckdb_web_get_global_file_info, \
318318
_duckdb_web_get_tablenames, \
319+
_duckdb_web_get_tablenames_buffer, \
319320
_duckdb_web_get_version, \
320321
_duckdb_web_insert_arrow_from_ipc_stream, \
321322
_duckdb_web_insert_csv_from_path, \

lib/src/webdb_api.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,13 @@ void duckdb_web_get_tablenames(WASMResponse* packed, ConnectionHdl connHdl, cons
248248
auto r = c->GetTableNames(query);
249249
WASMResponseBuffer::Get().Store(*packed, std::move(r));
250250
}
251+
/// Get table names
252+
void duckdb_web_get_tablenames_buffer(WASMResponse* packed, ConnectionHdl connHdl, const uint8_t* buffer, size_t buffer_length) {
253+
auto c = reinterpret_cast<WebDB::Connection*>(connHdl);
254+
std::string_view query(reinterpret_cast<const char*>(buffer), buffer_length);
255+
auto r = c->GetTableNames(query);
256+
WASMResponseBuffer::Get().Store(*packed, std::move(r));
257+
}
251258
/// Insert arrow from an ipc stream
252259
void duckdb_web_insert_arrow_from_ipc_stream(WASMResponse* packed, ConnectionHdl connHdl, const uint8_t* buffer,
253260
size_t buffer_length, const char* options) {

packages/duckdb-wasm/src/bindings/bindings_base.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,12 @@ export abstract class DuckDBBindingsBase implements DuckDBBindings {
233233
}
234234
/** Get table names */
235235
public getTableNames(conn: number, text: string): string[] {
236-
const [s, d, n] = callSRet(this.mod, 'duckdb_web_get_tablenames', ['number', 'string'], [conn, text]);
236+
const BUF = TEXT_ENCODER.encode(text);
237+
const bufferPtr = this.mod._malloc(BUF.length);
238+
const bufferOfs = this.mod.HEAPU8.subarray(bufferPtr, bufferPtr + BUF.length);
239+
bufferOfs.set(BUF);
240+
const [s, d, n] = callSRet(this.mod, 'duckdb_web_get_tablenames_buffer', ['number', 'number', 'number'], [conn, bufferPtr, BUF.length]);
241+
this.mod._free(bufferPtr);
237242
if (s !== StatusCode.SUCCESS) {
238243
throw new Error(readString(this.mod, d, n));
239244
}

0 commit comments

Comments
 (0)