From 609173cdbe860644514e7bcaf5bc45bd5276fb3b Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Mon, 10 Feb 2025 01:07:00 +0700 Subject: [PATCH] fix(memory-driver-duckdb): map rows, un-exported bundles for CDN uses vector (vss) check --- cspell.config.yaml | 3 + eslint.config.js | 13 ++ packages/memory-driver-duckdb/package.json | 3 +- .../playground/db/schema.ts | 51 ++++++- .../drizzle/0000_cute_kulan_gath.sql | 22 +++ .../drizzle/0000_legal_gauntlet.sql | 4 - .../drizzle/meta/0000_snapshot.json | 128 +++++++++++++++- .../playground/drizzle/meta/_journal.json | 4 +- .../playground/src/App.vue | 39 +++-- .../src/drizzle-orm/dialect/duckdb-format.ts | 137 ++++++++++++------ .../src/drizzle-orm/dialect/duckdb-types.ts | 5 +- .../src/drizzle-orm/driver.ts | 8 +- .../src/drizzle-orm/index.ts | 4 +- .../src/drizzle-orm/session.ts | 4 +- pnpm-lock.yaml | 11 ++ 15 files changed, 361 insertions(+), 75 deletions(-) create mode 100644 packages/memory-driver-duckdb/playground/drizzle/0000_cute_kulan_gath.sql delete mode 100644 packages/memory-driver-duckdb/playground/drizzle/0000_legal_gauntlet.sql diff --git a/cspell.config.yaml b/cspell.config.yaml index 5323fb69e..19ccec995 100644 --- a/cspell.config.yaml +++ b/cspell.config.yaml @@ -10,6 +10,7 @@ words: - Attributify - audioworklet - Ayaka + - bigserial - Bitstream - bumpp - catppuccin @@ -97,8 +98,10 @@ words: - shikijs - silero - sizecheck + - smallserial - Sniglet - supergroup + - superjson - tamagotchi - taze - tresjs diff --git a/eslint.config.js b/eslint.config.js index d217920e3..d820d087a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,5 +11,18 @@ export default antfu( 'packages/stage-tamagotchi/out/**', '**/drizzle/**', ], + // rules: { + // 'import/order': [ + // 'error', + // { + // 'groups': [ + // ['type'], + // ['builtin', 'external'], + // ['parent', 'sibling', 'index'], + // ], + // 'newlines-between': 'always', + // }, + // ], + // }, }, ) diff --git a/packages/memory-driver-duckdb/package.json b/packages/memory-driver-duckdb/package.json index b5a642134..635518e18 100644 --- a/packages/memory-driver-duckdb/package.json +++ b/packages/memory-driver-duckdb/package.json @@ -57,7 +57,8 @@ "date-fns": "^4.1.0", "defu": "^6.1.4", "drizzle-orm": "^0.39.2", - "es-toolkit": "^1.32.0" + "es-toolkit": "^1.32.0", + "superjson": "^2.2.2" }, "devDependencies": { "@unocss/reset": "^65.4.3", diff --git a/packages/memory-driver-duckdb/playground/db/schema.ts b/packages/memory-driver-duckdb/playground/db/schema.ts index a955a2306..044788490 100644 --- a/packages/memory-driver-duckdb/playground/db/schema.ts +++ b/packages/memory-driver-duckdb/playground/db/schema.ts @@ -1,8 +1,47 @@ import { sql } from 'drizzle-orm' -import { pgTable, uuid } from 'drizzle-orm/pg-core' +import { + bigint, + // bit, + boolean, + char, + date, + decimal, + doublePrecision, + integer, + interval, + json, + numeric, + pgTable, + real, + smallint, + text, + time, + timestamp, + uuid, + varchar, + vector, +} from 'drizzle-orm/pg-core' -export const users = pgTable('users', () => { - return { - id: uuid().primaryKey().unique().default(sql`gen_random_uuid()`), - } -}) +export const users = pgTable('users', () => ({ + id: uuid().primaryKey().unique().default(sql`gen_random_uuid()`), + int16: smallint().notNull().default(0), + int32: integer().notNull().default(0), + int64: bigint({ mode: 'number' }).notNull().default(sql`0`), + int64BigInt: bigint({ mode: 'bigint' }).notNull().default(sql`0`), + decimal: decimal().notNull().default(sql`0`), + numeric: numeric().notNull().default(sql`0`), + real: real().notNull().default(sql`0`), + double: doublePrecision().notNull().default(sql`0`), + vector: vector({ dimensions: 4 }).notNull().default(sql`[0,0,0,0]`), + // Unimplemented type for cast (INTEGER[] -> BIT) from @duckdb/duckdb-wasm + // bit: bit({ dimensions: 4 }).notNull().default(sql`[0,0,0,0]`), + bool: boolean().notNull().default(false), + char: char().notNull().default(''), + varchar: varchar().notNull().default(''), + text: text().notNull().default(''), + json: json().notNull().default(sql`'{}'`), + date: date().notNull().default(sql`'2020-01-01'`), + time: time().notNull().default(sql`'00:00:00'`), + timestamp: timestamp().notNull().default(sql`'2020-01-01 00:00:00'`), + interval: interval().notNull().default(sql`'1 day'`), +})) diff --git a/packages/memory-driver-duckdb/playground/drizzle/0000_cute_kulan_gath.sql b/packages/memory-driver-duckdb/playground/drizzle/0000_cute_kulan_gath.sql new file mode 100644 index 000000000..51dfc7b7c --- /dev/null +++ b/packages/memory-driver-duckdb/playground/drizzle/0000_cute_kulan_gath.sql @@ -0,0 +1,22 @@ +CREATE TABLE "users" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "int16" smallint DEFAULT 0 NOT NULL, + "int32" integer DEFAULT 0 NOT NULL, + "int64" bigint DEFAULT 0 NOT NULL, + "int64BigInt" bigint DEFAULT 0 NOT NULL, + "decimal" numeric DEFAULT 0 NOT NULL, + "numeric" numeric DEFAULT 0 NOT NULL, + "real" real DEFAULT 0 NOT NULL, + "double" double precision DEFAULT 0 NOT NULL, + "vector" FLOAT[4] DEFAULT [0,0,0,0] NOT NULL, + "bool" boolean DEFAULT false NOT NULL, + "char" char DEFAULT '' NOT NULL, + "varchar" varchar DEFAULT '' NOT NULL, + "text" text DEFAULT '' NOT NULL, + "json" json DEFAULT '{}' NOT NULL, + "date" date DEFAULT '2020-01-01' NOT NULL, + "time" time DEFAULT '00:00:00' NOT NULL, + "timestamp" timestamp DEFAULT '2020-01-01 00:00:00' NOT NULL, + "interval" interval DEFAULT '0 day' NOT NULL, + CONSTRAINT "users_id_unique" UNIQUE("id") +); diff --git a/packages/memory-driver-duckdb/playground/drizzle/0000_legal_gauntlet.sql b/packages/memory-driver-duckdb/playground/drizzle/0000_legal_gauntlet.sql deleted file mode 100644 index a337051bd..000000000 --- a/packages/memory-driver-duckdb/playground/drizzle/0000_legal_gauntlet.sql +++ /dev/null @@ -1,4 +0,0 @@ -CREATE TABLE "users" ( - "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, - CONSTRAINT "users_id_unique" UNIQUE("id") -); diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json index becb06a83..a7e192b93 100644 --- a/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "b731cb60-cb64-4cb0-8262-52b1c3fc467e", + "id": "5305094b-45db-4a61-a74f-340b2b7da250", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -14,6 +14,132 @@ "primaryKey": true, "notNull": true, "default": "gen_random_uuid()" + }, + "int16": { + "name": "int16", + "type": "smallint", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "int32": { + "name": "int32", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "int64": { + "name": "int64", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "int64BigInt": { + "name": "int64BigInt", + "type": "bigint", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "decimal": { + "name": "decimal", + "type": "numeric", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "numeric": { + "name": "numeric", + "type": "numeric", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "real": { + "name": "real", + "type": "real", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "double": { + "name": "double", + "type": "double precision", + "primaryKey": false, + "notNull": true, + "default": "0" + }, + "vector": { + "name": "vector", + "type": "vector(4)", + "primaryKey": false, + "notNull": true, + "default": "[0,0,0,0]" + }, + "bool": { + "name": "bool", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "char": { + "name": "char", + "type": "char", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "varchar": { + "name": "varchar", + "type": "varchar", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "text": { + "name": "text", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "json": { + "name": "json", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'{}'" + }, + "date": { + "name": "date", + "type": "date", + "primaryKey": false, + "notNull": true, + "default": "'2020-01-01'" + }, + "time": { + "name": "time", + "type": "time", + "primaryKey": false, + "notNull": true, + "default": "'00:00:00'" + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "'2020-01-01 00:00:00'" + }, + "interval": { + "name": "interval", + "type": "interval", + "primaryKey": false, + "notNull": true, + "default": "'0'" } }, "indexes": {}, diff --git a/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json index 8c720d6e0..deade71fe 100644 --- a/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json +++ b/packages/memory-driver-duckdb/playground/drizzle/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "7", - "when": 1739072522344, - "tag": "0000_legal_gauntlet", + "when": 1739121102268, + "tag": "0000_cute_kulan_gath", "breakpoints": true } ] diff --git a/packages/memory-driver-duckdb/playground/src/App.vue b/packages/memory-driver-duckdb/playground/src/App.vue index 06f95b960..9061bb20c 100644 --- a/packages/memory-driver-duckdb/playground/src/App.vue +++ b/packages/memory-driver-duckdb/playground/src/App.vue @@ -1,10 +1,14 @@