docs(duckdb-wasm|drizzle-duckdb-wasm): added documentations and descriptions

This commit is contained in:
Neko Ayaka
2025-02-18 13:16:06 +08:00
parent 0acbe49836
commit 31b1710e34
6 changed files with 91 additions and 81 deletions
+18 -14
View File
@@ -17,25 +17,25 @@ npm i @proj-airi/duckdb-wasm -D
### Browser
```vue
```html
<script setup lang="ts">
import type { DuckDBWasmClient } from '@proj-airi/duckdb-wasm'
import type { DuckDBWasmClient } from '@proj-airi/duckdb-wasm'
import { connect, getEnvironment } from '@proj-airi/duckdb-wasm'
import { getImportUrlBundles } from '@proj-airi/duckdb-wasm/bundles/import-url-browser'
import { onMounted, onUnmounted, ref } from 'vue'
import { connect, getEnvironment } from '@proj-airi/duckdb-wasm'
import { getImportUrlBundles } from '@proj-airi/duckdb-wasm/bundles/import-url-browser'
import { onMounted, onUnmounted, ref } from 'vue'
const db = ref<DuckDBWasmClient>()
const db = ref<DuckDBWasmClient>()
onMounted(async () => {
db.value = await connect({ bundles: getImportUrlBundles })
const result = await db.value.conn.query('SELECT 1 + 1 AS res')
console.log(result) // Output: [{ res: 2 }]
})
onMounted(async () => {
db.value = await connect({ bundles: getImportUrlBundles })
const result = await db.value.conn.query('SELECT 1 + 1 AS res')
console.log(result) // Output: [{ res: 2 }]
})
onUnmounted(() => {
db.value?.close()
})
onUnmounted(() => {
db.value?.close()
})
</script>
```
@@ -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!
-2
View File
@@ -36,6 +36,4 @@ export async function getEnvironment() {
catch {
return 'unknown'
}
return 'unknown'
}
+15
View File
@@ -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<void>
query: (string, params?: unknown[]) => Promise<Record<string, unknown>[]>
}
export async function connect(options: ConnectOptions): Promise<DuckDBWasmClient> {
@@ -79,6 +81,19 @@ export async function connect(options: ConnectOptions): Promise<DuckDBWasmClient
worker,
db,
conn,
query: async (query: string, params: unknown[] = []) => {
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()
+15 -1
View File
@@ -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<T = unknown>(x: DataType, field?: Field): T {
return String(x) as T
}
export function mapStructRowData<T extends { toArray: () => 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
}