SQLのDEFAULT値をSequelizeのdefaultValueに変換する

定数、ブーリアン、タイムスタンプ、関数呼び出しを含むSQL DEFAULT句がSequelizeのdefaultValueオプションにどのようにマッピングされるかを学びます。

Advanced Features

詳細な説明

SequelizeでのDEFAULT値

SQLカラムはINSERT時に明示的な値が提供されない場合に適用されるデフォルト値を持つことができます。Sequelizeはこれをフィールド定義のdefaultValueオプションにマッピングします。

定数デフォルト

文字列と数値の定数は直接変換されます:

status VARCHAR(20) DEFAULT 'active'
-- 変換後 -->
status: { type: DataTypes.STRING(20), defaultValue: 'active' }

retry_count INTEGER DEFAULT 3
-- 変換後 -->
retry_count: { type: DataTypes.INTEGER, defaultValue: 3 }

ブーリアンデフォルト

コンバーターはさまざまなブーリアン表現を正規化します:

is_active BOOLEAN DEFAULT TRUE       --> defaultValue: true
is_deleted BOOLEAN DEFAULT FALSE     --> defaultValue: false
is_verified BOOLEAN DEFAULT 1        --> defaultValue: true

タイムスタンプデフォルト

SQLタイムスタンプ関数はSequelize定数にマッピングされます:

SQLデフォルト Sequelizeデフォルト
CURRENT_TIMESTAMP DataTypes.NOW
NOW() DataTypes.NOW
CURRENT_TIMESTAMP() DataTypes.NOW

UUID生成

UUID生成関数はSequelizeの組み込みUUIDジェネレーターにマッピングされます:

SQLデフォルト Sequelizeデフォルト
gen_random_uuid() DataTypes.UUIDV4
uuid_generate_v4() DataTypes.UUIDV4
UUID() DataTypes.UUIDV4
NEWID()(SQL Server) DataTypes.UUIDV4

データベース関数

その他のデータベース関数の場合、コンバーターはsequelize.literal()を使用します:

score DECIMAL DEFAULT RANDOM()
-- 変換後 -->
score: { type: DataTypes.DECIMAL, defaultValue: sequelize.literal('RANDOM()') }

Sequelizeの動作

defaultValueが設定されている場合、SequelizeはModel.build()の直後にJavaScriptモデルインスタンスにそれを含めます — デフォルトを確認するためにデータベースに保存する必要はありません。ただし、データベースレベルのデフォルト(sequelize.literal経由)はINSERT実行後にのみ解決されます。

ユースケース

静的値、ブーリアンフラグ、タイムスタンプ、UUID生成など、さまざまなデフォルト戦略を使用するカラムを持つデータベースを移行しており、コンバーターが各パターンを適切なSequelize定数またはリテラルにマッピングする場合。

試してみる — SQL to Sequelize Model

フルツールを開く