diff --git a/packages/drizzle-duckdb-wasm/README.md b/packages/drizzle-duckdb-wasm/README.md
index 9ffd5ba34..9199b314e 100644
--- a/packages/drizzle-duckdb-wasm/README.md
+++ b/packages/drizzle-duckdb-wasm/README.md
@@ -41,42 +41,42 @@ export const users = pgTable('users', () => ({
drizzle-kit generate
```
-```vue
+```html
```
@@ -133,3 +133,7 @@ async function main() {
await client.close()
}
```
+
+## Footnotes
+
+Check out [the package](https://github.com/moeru-ai/airi/tree/main/packages/duckdb-wasm/README.md) we made for easier call to `@duckdb/duckdb-wasm` as well!
diff --git a/packages/drizzle-duckdb-wasm/src/session.ts b/packages/drizzle-duckdb-wasm/src/session.ts
index 3cb70cdff..8fa4e36f1 100644
--- a/packages/drizzle-duckdb-wasm/src/session.ts
+++ b/packages/drizzle-duckdb-wasm/src/session.ts
@@ -1,9 +1,8 @@
import type { DuckDBWasmClient } from '@proj-airi/duckdb-wasm'
-import type { Schema, StructRow } from 'apache-arrow'
import type { Assume, Logger, Query, RelationalSchemaConfig, TablesRelationalConfig } from 'drizzle-orm'
import type { PgDialect, PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig, SelectedFieldsOrdered } from 'drizzle-orm/pg-core'
-import { beginTransaction, mapColumnData, withSavepoint } from '@proj-airi/duckdb-wasm'
+import { beginTransaction, withSavepoint } from '@proj-airi/duckdb-wasm'
import { entityKind, fillPlaceholders, NoopLogger } from 'drizzle-orm'
import { PgPreparedQuery, PgSession, PgTransaction } from 'drizzle-orm/pg-core'
@@ -11,36 +10,6 @@ export type Row = Record
export type RowList = T
-function toJSRepresentedRows StructRow[], schema: Schema }>(results: T) {
- const rows = (results.toArray() as StructRow[] || []).map(item => item.toJSON()) || []
-
- const jsRepresentedRows = rows.map((row) => {
- results.schema.fields.forEach((field) => {
- return row[field.name] = mapColumnData(row[field.name], field)
- })
-
- return row
- })
-
- return jsRepresentedRows
-}
-
-async function callQuery(client: Promise, query: string, params: unknown[]) {
- const c = await client
-
- if (!params || params.length === 0) {
- const results = await c.conn.query(query)
- return toJSRepresentedRows(results)
- }
-
- const stmt = await c.conn.prepare(query)
- const results = await stmt.query(...params)
- const rows = toJSRepresentedRows(results)
-
- stmt.close()
- return rows
-}
-
export class DuckDBWASMPreparedQuery extends PgPreparedQuery {
static override readonly [entityKind]: string = 'DuckDBWasmPreparedQuery'
@@ -60,17 +29,21 @@ export class DuckDBWASMPreparedQuery extends PgPr
this.logger.logQuery(this.queryString, params)
const { fields, queryString: query, client, customResultMapper } = this
+ const c = await client
+
if (!fields && !customResultMapper) {
- return callQuery(client, query, params)
+ return c.query(query, params)
}
- return callQuery(client, query, params)
+ return c.query(query, params)
}
async all(placeholderValues: Record | undefined = {}): Promise {
const params = fillPlaceholders(this.params, placeholderValues)
this.logger.logQuery(this.queryString, params)
- return callQuery(this.client, this.queryString, params)
+
+ const c = await this.client
+ return c.query(this.queryString, params)
}
}
@@ -116,7 +89,8 @@ export class DuckDBWasmSession<
async query(query: string, params: unknown[]): Promise> {
this.logger.logQuery(query, params)
- return callQuery(this.client, query, params)
+ const c = await this.client
+ return c.query(query, params)
}
async queryObjects(
@@ -124,7 +98,8 @@ export class DuckDBWasmSession<
params: unknown[],
): Promise> {
this.logger.logQuery(query, params)
- return callQuery(this.client, query, params) as Promise>
+ const c = await this.client
+ return c.query(query, params) as Promise>
}
override transaction(
diff --git a/packages/duckdb-wasm/README.md b/packages/duckdb-wasm/README.md
index 6e3699aff..cdc7e7ac4 100644
--- a/packages/duckdb-wasm/README.md
+++ b/packages/duckdb-wasm/README.md
@@ -17,25 +17,25 @@ npm i @proj-airi/duckdb-wasm -D
### Browser
-```vue
+```html
```
@@ -62,3 +62,7 @@ async function main() {
await close()
}
```
+
+## Footnotes
+
+Check out the [Drizzle ORM driver](https://github.com/moeru-ai/airi/blob/main/packages/drizzle-duckdb-wasm/README.md) we made for `@duckdb/duckdb-wasm` as welL!
diff --git a/packages/duckdb-wasm/src/common.ts b/packages/duckdb-wasm/src/common.ts
index 3fea205aa..1605ecb8b 100644
--- a/packages/duckdb-wasm/src/common.ts
+++ b/packages/duckdb-wasm/src/common.ts
@@ -36,6 +36,4 @@ export async function getEnvironment() {
catch {
return 'unknown'
}
-
- return 'unknown'
}
diff --git a/packages/duckdb-wasm/src/duckdb.ts b/packages/duckdb-wasm/src/duckdb.ts
index 165cfce6d..8a14617c3 100644
--- a/packages/duckdb-wasm/src/duckdb.ts
+++ b/packages/duckdb-wasm/src/duckdb.ts
@@ -4,6 +4,7 @@ import { AsyncDuckDB, ConsoleLogger, selectBundle, VoidLogger } from '@duckdb/du
import { defu } from 'defu'
import { getEnvironment } from './common'
+import { mapStructRowData } from './format'
export type ConnectOptions = ConnectRequiredOptions & ConnectOptionalOptions
@@ -21,6 +22,7 @@ export interface DuckDBWasmClient {
db: AsyncDuckDB
conn: AsyncDuckDBConnection
close: () => Promise
+ query: (string, params?: unknown[]) => Promise[]>
}
export async function connect(options: ConnectOptions): Promise {
@@ -79,6 +81,19 @@ export async function connect(options: ConnectOptions): Promise {
+ if (!params || params.length === 0) {
+ const results = await conn.query(query)
+ return mapStructRowData(results)
+ }
+
+ const stmt = await conn.prepare(query)
+ const results = await stmt.query(...params)
+ const rows = mapStructRowData(results)
+
+ stmt.close()
+ return rows
+ },
close: async () => {
await conn.close()
await db.terminate()
diff --git a/packages/duckdb-wasm/src/format.ts b/packages/duckdb-wasm/src/format.ts
index dd4ae2157..4a572882b 100644
--- a/packages/duckdb-wasm/src/format.ts
+++ b/packages/duckdb-wasm/src/format.ts
@@ -1,5 +1,5 @@
import type { TZDate } from '@date-fns/tz'
-import type { Field, StructRow } from 'apache-arrow'
+import type { Field, Schema, StructRow } from 'apache-arrow'
import type { DataType } from './types'
import { TZDateMini } from '@date-fns/tz'
@@ -605,3 +605,17 @@ export function mapColumnData(x: DataType, field?: Field): T {
return String(x) as T
}
+
+export function mapStructRowData StructRow[], schema: Schema }>(results: T) {
+ const rows = (results.toArray() as StructRow[] || []).map(item => item.toJSON()) || []
+
+ const jsRepresentedRows = rows.map((row) => {
+ results.schema.fields.forEach((field) => {
+ return row[field.name] = mapColumnData(row[field.name], field)
+ })
+
+ return row
+ })
+
+ return jsRepresentedRows
+}