Drizzle ORMにおけるSQLiteカラム型
SQLiteカラム型からDrizzle ORM sqlite-coreカラムビルダーへのマッピングガイド。SQLiteの柔軟な型システムとDrizzleの厳密な型付けアプローチを解説します。
詳細な説明
DrizzleにおけるSQLite型マッピング
SQLiteはユニークに柔軟な型システムを持っています — 厳密なカラム型の代わりに型親和性を使用します。どのカラムにもどの型の値でも格納できます。しかし、Drizzleのdrizzle-orm/sqlite-coreモジュールは、SQLiteの型親和性にマッピングされ、TypeScriptの型安全性を提供する型付きカラムビルダーを提供します。
一般的な型マッピング
| SQLite型 | Drizzleビルダー | TypeScript型 |
|---|---|---|
INTEGER |
integer() |
number |
TEXT |
text() |
string |
REAL |
real() |
number |
BLOB |
blob() |
Buffer |
INTEGER(ブーリアン) |
integer() |
number(0または1) |
SQLiteの簡略化された型セット
SQLiteには5つのストレージクラスのみがあります:NULL、INTEGER、REAL、TEXT、BLOB。他のデータベースからSQLを変換する場合、多くの型がこれらの基本型に集約されます:
| 元のSQL型 | SQLite親和性 | Drizzleビルダー |
|---|---|---|
VARCHAR(n) |
TEXT | text() |
BOOLEAN |
INTEGER | integer() |
TIMESTAMP |
TEXT | text() |
JSON |
TEXT | text() |
UUID |
TEXT | text() |
DECIMAL |
TEXT | text() |
変換例
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
priority INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
生成結果:
import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
import { sql } from "drizzle-orm";
export const notes = sqliteTable("notes", {
id: integer("id").primaryKey(),
title: text("title").notNull(),
content: text("content"),
priority: integer("priority").default(0),
createdAt: text("created_at").default(sql`CURRENT_TIMESTAMP`),
});
SQLite固有の考慮事項
AUTOINCREMENT: SQLiteのAUTOINCREMENTキーワードはPostgreSQLのSERIALとは異なります。Drizzleでは、SQLiteのinteger().primaryKey()カラムは自動的に自動インクリメントされます(SQLiteのROWID動作)。AUTOINCREMENTキーワードはrowidの再利用を防ぐだけです。
ネイティブブーリアンなし: SQLiteはブーリアンを整数(0または1)として保存します。Drizzleはこれらを、SQLite用の別のブーリアンビルダーを提供するのではなく、integer()にマッピングします。
日付/時刻の保存: SQLiteにはネイティブの日付/時刻型がありません。日付は通常、TEXT(ISO 8601文字列)、INTEGER(Unixタイムスタンプ)、またはREAL(ユリウス日番号)として保存されます。コンバーターはSQLiteのTIMESTAMPとDATETIMEをtext()にマッピングします。
ユースケース
ローカルファーストアプリケーションやElectronアプリをSQLiteとDrizzle ORMで構築しており、SQLiteの柔軟な型システムがDrizzleの型付きカラムビルダーにどのようにマッピングされるかを理解する必要がある場合。