diff --git a/src/content/docs/_meta.json b/src/content/docs/_meta.json index 47ccf72df..5e96103a1 100644 --- a/src/content/docs/_meta.json +++ b/src/content/docs/_meta.json @@ -51,6 +51,7 @@ ["connect-aws-data-api-pg", "AWS Data API Postgres"], ["connect-aws-data-api-mysql", "AWS Data API MySQL"], "---", + ["connect-db0", "db0"], ["connect-drizzle-proxy", "Drizzle Proxy"], "Manage schema", diff --git a/src/content/docs/connect-db0.mdx b/src/content/docs/connect-db0.mdx new file mode 100644 index 000000000..73baba480 --- /dev/null +++ b/src/content/docs/connect-db0.mdx @@ -0,0 +1,133 @@ +import Npm from "@mdx/Npm.astro"; +import Callout from '@mdx/Callout.astro'; +import Prerequisites from "@mdx/Prerequisites.astro"; +import CodeTabs from "@mdx/CodeTabs.astro"; +import WhatsNextPostgres from "@mdx/WhatsNextPostgres.astro"; + +# Drizzle \<\> db0 + + +- Database [connection basics](/docs/connect-overview) with Drizzle +- db0 (recommended `>= 0.3.4`) - [website](https://db0.unjs.io) & [GitHub](https://github.com/unjs/db0) + + +According to the **[official repo](https://github.com/unjs/db0)**, db0 is a lightweight SQL connector designed to work with any compatible SQL database. +It provides a single `Database` interface that works across multiple database engines via connectors. + +Drizzle auto-detects the dialect (PostgreSQL or SQLite) from the db0 connector — no extra configuration needed. + + +**Availability:** `drizzle-orm/db0` is landing via **[drizzle-team/drizzle-orm#5296](https://github.com/drizzle-team/drizzle-orm/pull/5296)**. +If `import { drizzle } from 'drizzle-orm/db0'` fails, your installed `drizzle-orm` version doesn’t include this driver yet (this page targets the `beta` docs track). + + + +Drizzle's `drizzle-orm/db0` driver currently supports db0 dialects: `sqlite` / `libsql` and `postgresql`. + +MySQL is not implemented yet (using a db0 MySQL connector will throw). + + + +**Correctness note (joins/aliases):** +The `drizzle-orm/db0` driver expects rows in a stable column order. + +db0's public API returns **object rows** for most connectors. This can collapse duplicate column names (common with joins/aliases) and make results ambiguous. + +For correct join/alias results, use a connector that lets the driver read **array-mode rows**: +- SQLite: `db0/connectors/better-sqlite3` (driver uses `raw(true)` when available) +- PostgreSQL: `db0/connectors/pglite` (driver uses `rowMode: 'array'` when available) + +If array-mode rows aren’t available and object rows can’t be mapped safely, Drizzle throws a fail-fast error instead of returning potentially wrong data. See **[drizzle-team/drizzle-orm#5296](https://github.com/drizzle-team/drizzle-orm/pull/5296)**. + + + +**Available db0 connectors:** +`better-sqlite3`, `bun-sqlite`, `cloudflare-d1`, `libsql`, `postgresql`, `pglite` and more. +See the full list at [db0.unjs.io/connectors](https://db0.unjs.io/connectors). + + +#### Step 1 - Install packages + + +drizzle-orm db0 +-D drizzle-kit + + +You also need to install the **underlying driver package** for the db0 connector you plan to use. For example: + +For `db0/connectors/better-sqlite3`: + + +better-sqlite3 + + +For `db0/connectors/postgresql`: + + +pg +-D @types/pg + + +For `db0/connectors/pglite`: + + +@electric-sql/pglite + + +#### Step 2 - Initialize the driver and make a query + + +```typescript copy +import { createDatabase } from 'db0'; +import betterSqlite3 from 'db0/connectors/better-sqlite3'; +import { drizzle } from 'drizzle-orm/db0'; + +const db0 = createDatabase(betterSqlite3({ name: 'sqlite.db' })); +const db = drizzle(db0); + +const result = await db.select().from(...); +``` +```typescript copy +import { createDatabase } from 'db0'; +import postgresql from 'db0/connectors/postgresql'; +import { drizzle } from 'drizzle-orm/db0'; + +const db0 = createDatabase(postgresql({ url: process.env.DATABASE_URL })); +const db = drizzle(db0); + +const result = await db.select().from(...); +``` + + +If you need to provide your existing driver: + +```typescript copy +import type { Database } from 'db0'; +import { drizzle } from 'drizzle-orm/db0'; + +const db0: Database = getDb0Instance(); // your existing db0 instance +const db = drizzle({ client: db0 }); + +const result = await db.select().from(...); +``` + +#### Migrations + +Since db0 supports multiple dialects, make sure to import the migrator matching your connector's dialect: + + +```typescript copy +import { migrate } from 'drizzle-orm/db0/pg/migrator'; + +await migrate(db, { migrationsFolder: './drizzle' }); +``` +```typescript copy +import { migrate } from 'drizzle-orm/db0/sqlite/migrator'; + +await migrate(db, { migrationsFolder: './drizzle' }); +``` + + +#### What's next? + + diff --git a/src/content/docs/connect-overview.mdx b/src/content/docs/connect-overview.mdx index 9ae313577..b6c9d4509 100644 --- a/src/content/docs/connect-overview.mdx +++ b/src/content/docs/connect-overview.mdx @@ -175,10 +175,11 @@ Feel free to check out per-driver documentations ["React Native SQLite", "/docs/connect-react-native-sqlite"], ]} /> - diff --git a/tests/snake.test.ts b/tests/snake.test.ts index e816c7459..da2e49091 100644 --- a/tests/snake.test.ts +++ b/tests/snake.test.ts @@ -3,7 +3,7 @@ import { describe, expect, test } from "vitest"; import { gameSegments, mapSnake, -} from "../components/landing/header/snake/mapSnake"; +} from "../src/ui/components/landing/snake/mapSnake"; const gridHeight = 10; const gridWidth = 19;