diff --git a/lib/include/duckdb/web/io/web_filesystem.h b/lib/include/duckdb/web/io/web_filesystem.h index 96638f992..55ee50076 100644 --- a/lib/include/duckdb/web/io/web_filesystem.h +++ b/lib/include/duckdb/web/io/web_filesystem.h @@ -141,7 +141,7 @@ class WebFileSystem : public duckdb::FileSystem { /// Delete copy constructor WebFileHandle(const WebFileHandle &) = delete; /// Destructor - virtual ~WebFileHandle() { Close(); } + virtual ~WebFileHandle() { try { Close(); } catch (...) {} } /// Get the file name auto &GetName() const { return file_->file_name_; } /// Resolve readahead diff --git a/packages/duckdb-wasm/src/bindings/runtime_browser.ts b/packages/duckdb-wasm/src/bindings/runtime_browser.ts index 8e46955fe..8099acde7 100644 --- a/packages/duckdb-wasm/src/bindings/runtime_browser.ts +++ b/packages/duckdb-wasm/src/bindings/runtime_browser.ts @@ -475,6 +475,7 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { closeFile: (mod: DuckDBModule, fileId: number) => { const file = BROWSER_RUNTIME.getFileInfo(mod, fileId); BROWSER_RUNTIME._fileInfoCache.delete(fileId); + try { switch (file?.dataProtocol) { case DuckDBDataProtocol.BUFFER: case DuckDBDataProtocol.HTTP: @@ -492,6 +493,10 @@ export const BROWSER_RUNTIME: DuckDBRuntime & { return handle.flush(); } } + } catch (e: any) { + console.log(e); + failWith(mod, e.toString()); + } }, dropFile: (mod: DuckDBModule, fileNamePtr: number, fileNameLen: number) => { const fileName = readString(mod, fileNamePtr, fileNameLen); diff --git a/packages/duckdb-wasm/test/opfs.test.ts b/packages/duckdb-wasm/test/opfs.test.ts index 47b9e2497..eaf1a0fcc 100644 --- a/packages/duckdb-wasm/test/opfs.test.ts +++ b/packages/duckdb-wasm/test/opfs.test.ts @@ -201,6 +201,7 @@ export function testOPFS(baseDir: string, bundle: () => duckdb.DuckDBBundle): vo await db.registerFileHandle('test.csv', testHandle, duckdb.DuckDBDataProtocol.BROWSER_FSACCESS, true); await conn.send(`CREATE TABLE zzz AS SELECT * FROM "${baseDir}/tpch/0_01/parquet/lineitem.parquet"`); await conn.send(`COPY (SELECT * FROM zzz) TO 'test.csv'`); + await conn.send(`COPY (SELECT * FROM zzz) TO 'non_existing.csv'`); await conn.close(); await db.dropFile('test.csv'); await db.reset();