Skip to content

Commit 89f2700

Browse files
mbostockdomoritz
andauthored
@duckdb/duckdb-wasm 1.24 (#356)
* Update DuckDB Fixes #343 * Update duckdb wasm * Update to https://github.com/duckdb/duckdb-wasm/releases/tag/v1.22.0 * Update to 1.24.0 * Add protocol to registerFileURL * Add castBigIntToDouble to fix bigint parsing issues * loadDuckDB --------- Co-authored-by: Dominik Moritz <[email protected]>
1 parent dc5965e commit 89f2700

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/dependencies.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ export const topojson = dependency("topojson-client", "3.1.0", "dist/topojson-cl
2020
export const exceljs = dependency("exceljs", "4.3.0", "dist/exceljs.min.js");
2121
export const mermaid = dependency("mermaid", "9.2.2", "dist/mermaid.min.js");
2222
export const leaflet = dependency("leaflet", "1.9.3", "dist/leaflet.js");
23-
export const duckdb = dependency("@duckdb/duckdb-wasm", "1.17.0", "+esm");
23+
export const duckdb = dependency("@duckdb/duckdb-wasm", "1.24.0", "+esm");

src/duckdb.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import {cdn} from "./require.js";
3333
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3434
// POSSIBILITY OF SUCH DAMAGE.
3535

36+
let promise;
37+
3638
export class DuckDBClient {
3739
constructor(db) {
3840
Object.defineProperties(this, {
@@ -126,6 +128,9 @@ export class DuckDBClient {
126128
if (config.query?.castTimestampToDate === undefined) {
127129
config = {...config, query: {...config.query, castTimestampToDate: true}};
128130
}
131+
if (config.query?.castBigIntToDouble === undefined) {
132+
config = {...config, query: {...config.query, castBigIntToDouble: true}};
133+
}
129134
await db.open(config);
130135
await Promise.all(
131136
Object.entries(sources).map(async ([name, source]) => {
@@ -166,7 +171,7 @@ async function insertFile(database, name, file, options) {
166171
const buffer = await file.arrayBuffer();
167172
await database.registerFileBuffer(file.name, new Uint8Array(buffer));
168173
} else {
169-
await database.registerFileURL(file.name, url);
174+
await database.registerFileURL(file.name, url, 4); // duckdb.DuckDBDataProtocol.HTTP
170175
}
171176
const connection = await database.connect();
172177
try {
@@ -179,7 +184,7 @@ async function insertFile(database, name, file, options) {
179184
...options
180185
}).catch(async (error) => {
181186
// If initial attempt to insert CSV resulted in a conversion
182-
// error, try again, this time treating all columns as strings.
187+
// error, try again, this time treating all columns as strings.
183188
if (error.toString().includes("Could not convert")) {
184189
return await insertUntypedCSV(connection, file, name);
185190
}
@@ -247,9 +252,9 @@ async function insertArray(database, name, array, options) {
247252
return await insertArrowTable(database, name, table, options);
248253
}
249254

250-
async function createDuckDB() {
251-
const duck = await import(`${cdn}${duckdb.resolve()}`);
252-
const bundle = await duck.selectBundle({
255+
async function loadDuckDB() {
256+
const module = await import(`${cdn}${duckdb.resolve()}`);
257+
const bundle = await module.selectBundle({
253258
mvp: {
254259
mainModule: `${cdn}${duckdb.resolve("dist/duckdb-mvp.wasm")}`,
255260
mainWorker: `${cdn}${duckdb.resolve("dist/duckdb-browser-mvp.worker.js")}`
@@ -259,9 +264,15 @@ async function createDuckDB() {
259264
mainWorker: `${cdn}${duckdb.resolve("dist/duckdb-browser-eh.worker.js")}`
260265
}
261266
});
262-
const logger = new duck.ConsoleLogger();
263-
const worker = await duck.createWorker(bundle.mainWorker);
264-
const db = new duck.AsyncDuckDB(logger, worker);
267+
const logger = new module.ConsoleLogger();
268+
return {module, bundle, logger};
269+
}
270+
271+
async function createDuckDB() {
272+
if (promise === undefined) promise = loadDuckDB();
273+
const {module, bundle, logger} = await promise;
274+
const worker = await module.createWorker(bundle.mainWorker);
275+
const db = new module.AsyncDuckDB(logger, worker);
265276
await db.instantiate(bundle.mainModule);
266277
return db;
267278
}

0 commit comments

Comments
 (0)