0.4.27 • Published 6 months ago
@proj-airi/drizzle-duckdb-wasm v0.4.27
🦆 Drizzle ORM driver for @duckdb/duckdb-wasm
This package provides a Drizzle ORM driver for the DuckDB WASM implementation.
Installation
Pick the package manager of your choice:
ni @proj-airi/drizzle-duckdb-wasm -D # from @antfu/ni, can be installed via `npm i -g @antfu/ni`
pnpm i @proj-airi/drizzle-duckdb-wasm -D
yarn i @proj-airi/drizzle-duckdb-wasm -D
npm i @proj-airi/drizzle-duckdb-wasm -DUsage
import { drizzle } from '@proj-airi/drizzle-duckdb-wasm'
const db = drizzle('duckdb-wasm://?bundles=import-url', { schema })Browser
Vue.js
// ./db/schema.ts
import { sql } from 'drizzle-orm'
import { pgTable, uuid } from 'drizzle-orm/pg-core'
export const users = pgTable('users', () => ({
id: uuid().primaryKey().unique().default(sql`gen_random_uuid()`),
}))drizzle-kit generate<!-- ./src/App.vue -->
<script setup lang="ts">
import type { DuckDBWasmDrizzleDatabase } from '@proj-airi/drizzle-duckdb-wasm'
import { drizzle } from '@proj-airi/drizzle-duckdb-wasm'
import { getImportUrlBundles } from '@proj-airi/drizzle-duckdb-wasm/bundles/import-url-browser'
import { useDebounceFn } from '@vueuse/core'
import { serialize } from 'superjson'
import { onMounted, onUnmounted, ref, watch } from 'vue'
import * as schema from './db/schema'
import { users } from './db/schema'
import migration1 from './drizzle/0000_cute_kulan_gath.sql?raw'
const results = ref<any[]>([])
onMounted(async () => {
// db.value = drizzle('duckdb-wasm://?bundles=import-url', { schema })
// db.value = drizzle({ connection: { bundles: getImportUrlBundles() } }, { schema })
await db.value?.execute(migration1)
results.value = await db.value?.execute('SELECT count(*)::INTEGER as v FROM generate_series(0, 100) t(v)')
console.log(results.value) // Output [{ v: 101 }]
await db.value.insert(users).values({ id: '00000000-0000-0000-0000-000000000000' })
const foundUsers = await db.value.select().from(users)
console.log(foundUsers) // Output [{ id: '00000000-0000-0000-0000-000000000000' }]
})
onUnmounted(async () => {
if (db.value) {
const client = await db.value.$client
await client.close()
}
})
</script>Node.js
You will need to install web-worker too.
ni web-worker # from @antfu/ni, can be installed via `npm i -g @antfu/ni`
pnpm i web-worker
yarn i web-worker
npm i web-worker// ./db/schema.ts
import { sql } from 'drizzle-orm'
import { pgTable, uuid } from 'drizzle-orm/pg-core'
export const users = pgTable('users', () => ({
id: uuid().primaryKey().unique().default(sql`gen_random_uuid()`),
}))drizzle-kit generate// ./src/index.ts
import { read } from 'node:fs/promises'
import { drizzle } from '@proj-airi/drizzle-duckdb-wasm'
import { getBundles } from '@proj-airi/drizzle-duckdb-wasm/bundles/default-node'
import * as schema from './db/schema'
import { users } from './db/schema'
async function main() {
const db = drizzle({ connection: { bundles: getBundles() } }, { schema })
// Run migration scripts
const migration1 = await read('./drizzle/0000_cute_kulan_gath.sql', 'utf-8')
await db.execute(migration1)
const res = await db.execute('SELECT count(*)::INTEGER as v FROM generate_series(0, 100) t(v)')
console.log(res) // Output [{ v: 101 }]
await db.insert(users).values({ id: '00000000-0000-0000-0000-000000000000' })
const foundUsers = await db.select().from(users)
console.log(foundUsers) // Output [{ id: '00000000-0000-0000-0000-000000000000' }]
// Remember to close it when you are done
const client = await db.$client
await client.close()
}Footnotes
Check out the package we made for easier call to @duckdb/duckdb-wasm as well!
0.4.27
6 months ago
0.4.25
6 months ago
0.4.26
6 months ago
0.4.24
7 months ago
0.4.23
7 months ago
0.4.22
7 months ago
0.4.21
8 months ago
0.4.20
8 months ago
0.4.19
8 months ago
0.4.18
8 months ago
0.4.17
8 months ago
0.4.16
8 months ago
0.4.15
8 months ago
0.4.14
8 months ago
0.3.6
9 months ago
0.3.4
9 months ago
0.3.3
9 months ago
0.3.2
9 months ago
0.3.1
9 months ago