Drizzle ORMにおけるSQLiteカラム型

SQLiteカラム型からDrizzle ORM sqlite-coreカラムビルダーへのマッピングガイド。SQLiteの柔軟な型システムとDrizzleの厳密な型付けアプローチを解説します。

Column Types

詳細な説明

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つのストレージクラスのみがあります:NULLINTEGERREALTEXTBLOB。他のデータベースから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のTIMESTAMPDATETIMEtext()にマッピングします。

ユースケース

ローカルファーストアプリケーションやElectronアプリをSQLiteとDrizzle ORMで構築しており、SQLiteの柔軟な型システムがDrizzleの型付きカラムビルダーにどのようにマッピングされるかを理解する必要がある場合。

試してみる — SQL to Drizzle Schema

フルツールを開く