@coji/kysely-duckdb-wasm
    Preparing search index...

    Class DuckDbDialect

    Kysely dialect for duckdb.

    Please see also Kysely Docs and Duckdb Docs

    $ npm install --save kysely @duckdb/duckdb-wasm @coji/kysely-duckdb-wasm
    

    reading data from json file.

    import * as duckdb from "@duckdb/duckdb-wasm";
    import { Kysely } from "kysely";
    import { DuckDbDialect } from "@coji/kysely-duckdb-wasm";

    interface PersonTable {
    first_name: string,
    gender: string,
    last_name: string,
    };
    interface DatabaseSchema {
    person: PersonTable,
    };

    const worker = new Worker('@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js');
    const logger = new duckdb.ConsoleLogger(duckdb.LogLevel.ERROR);
    const db = new duckdb.AsyncDuckDB(logger, worker);
    await db.instantiate('@duckdb/duckdb-wasm/dist/duckdb-eh.wasm');
    const duckdbDialect = new DuckDbDialect({
    database: db,
    tableMappings: {
    person:
    `read_json('./person.json', columns={"first_name": "STRING", "gender": "STRING", "last_name": "STRING"})`,
    },
    });
    const kysely = new Kysely<DatabaseSchema>({ dialect: duckdbDialect });

    const res = await kysely.selectFrom("person").selectAll().execute();

    Implements

    • Dialect
    Index

    Constructors

    • Parameters

      • config: {
            database: AsyncDuckDB | (() => Promise<AsyncDuckDB>);
            onCreateConnection?: (connection: AsyncDuckDBConnection) => Promise<void>;
            tableMappings: { [tableName: string]: string };
        }

        configurations for DuckDbDialect

        • database: AsyncDuckDB | (() => Promise<AsyncDuckDB>)
        • OptionalonCreateConnection?: (connection: AsyncDuckDBConnection) => Promise<void>
        • tableMappings: { [tableName: string]: string }

          Mappings of table name in kysely to duckdb table expressions.

          Duckdb can read external source(file, url or database) as table like: SELECT * FROM read_json_objects('path/to/file/*.json'). You can use raw duckdb table expression as table name, but it may be too long, preserving too many implementation details.

          This mappings is used to replace table name string to duckdb table expression.

          const dialect = new DuckDbDialect({
          database: db,
          tableMappings: {
          person: 'read_json_object("s3://my-bucket/person.json?s3_access_key_id=key&s3_secret_access_key=secret")'
          }
          });

          const db = new Kysely<{
          person: { first_name: string, last_name: string }, // 'person' is defined in tableMappings
          pet: { name: string, species: 'cat' | 'dog' }, // 'pet' is *not* defined in tableMappings
          >({ dialect });

          await db.selectFrom("person").selectAll().execute();
          // => Executed query is: `SELECT * FROM read_json_object("s3://my-bucket/person.json?s3_access_key_id=key&s3_secret_access_key=secret");`

          await db.selectFrom("pet").selectAll().execute(); // => Executed query is: SELECT * FROM pet;

      Returns DuckDbDialect

    Methods

    • Creates an adapter for the dialect.

      Returns DialectAdapter

    • Creates a driver for the dialect.

      Returns Driver

    • Creates a database introspector that can be used to get database metadata such as the table names and column names of those tables.

      db never has any plugins installed. It's created using Kysely.withoutPlugins.

      Parameters

      • db: Kysely<any>

      Returns DatabaseIntrospector

    • Creates a query compiler for the dialect.

      Returns QueryCompiler