v6へのアップグレード
Sequelize v6はv5に続くメジャーリリースです。アップグレードに役立つ破壊的変更のリストを以下に示します。
破壊的変更
Node 10以降のサポート
Sequelize v6はNode 10以降のみサポートします #10821。
CLS
CLSのサポートには、cls-hookedパッケージを使用する必要があります。
const cls = require('cls-hooked');
const namespace = cls.createNamespace('....');
const Sequelize = require('sequelize');
Sequelize.useCLS(namespace);
データベースエンジンのサポート
最小サポート対象のデータベースエンジンバージョンを更新しました。古いデータベースエンジンを使用すると、`SEQUELIZE0006`の非推奨警告が表示されます。バージョン表については、リリースページを確認してください。
Sequelize
- Bluebirdが削除されました。内部的には、すべてメソッドがasync/awaitを使用するようになりました。パブリックAPIはネイティブプロミスを返すようになりました。このリファクタリング作業はAndy Edwardsによるものです。
- `Sequelize.Promise`は使用できなくなりました。
- `sequelize.import`メソッドは削除されました。CLIユーザーは`sequelize-cli@6`に更新する必要があります。
- QueryInterfaceとQueryGeneratorのすべてのインスタンスは、ModelとDialectのプロパティ名として使用する場合、lowerCamelCaseの`queryInterface`と`queryGenerator`に変更されました。クラス名は変わりません。
Model
`options.returning`
`returning: true`オプションは、モデルに定義されていない属性を返すことはなくなりました。以前の動作は、代わりに`returning: ['*']`を使用することで実現できます。
`Model.changed()`
Sequelizeは深い変更を検出しません。`save`で問題を回避するには、各属性を不変として扱い、新しい値のみを代入する必要があります。
属性の深い変更の例
const instance = await MyModel.findOne();
// Sequelize will not detect this change
instance.jsonField.jsonProperty = 12345;
console.log(instance.changed()); // false
// You can workaround this by telling Sequelize the property changed:
instance.changed('jsonField', true);
console.log(instance.changed()); // true
各属性を不変として扱う場合の例
const instance = await MyModel.findOne();
// Sequelize will detect this change
instance.jsonField = {
...instance.jsonField,
jsonProperty: 12345,
};
console.log(instance.changed()); // true
`Model.bulkCreate()`
このメソッドは、`Bluebird.AggregateError`ではなく`Sequelize.AggregateError`をスローするようになりました。すべてのエラーは`errors`キーとして公開されるようになりました。
`Model.upsert()`
ネイティブupsertがすべてのDialectでサポートされるようになりました。
const [instance, created] = await MyModel.upsert({});
このメソッドのシグネチャは`Promise
- MySQL - ON DUPLICATE KEY UPDATEを使用して実装
- PostgreSQL - ON CONFLICT DO UPDATEを使用して実装
- SQLite - ON CONFLICT DO UPDATEを使用して実装
- MSSQL - MERGEステートメントを使用して実装
Postgresユーザーへの注意: upsertペイロードにPKフィールドが含まれている場合、PKが競合ターゲットとして使用されます。それ以外の場合は、最初のユニーク制約が競合キーとして選択されます。
QueryInterface
`addConstraint`
このメソッドは、`tableName`と`options`の2つのパラメーターのみを受け取るようになりました。以前は2番目のパラメーターに制約を適用する列名のリストを指定できましたが、このリストは`options.fields`プロパティとして渡す必要があります。
変更ログ
6.0.0-beta.7
- docs(associations): belongs to many create with through table
- docs(query-interface): fix broken links #12272
- docs(sequelize): omitNull only works for CREATE/UPDATE queries
- docs: asyncify #12297
- docs: responsive #12308
- docs: update feature request template
- feat(postgres): native upsert #12301
- feat(sequelize): allow passing dialectOptions.options from url #12404
- fix(include): check if attributes specified for included through model #12316
- fix(model.destroy): return 0 with truncate #12281
- fix(mssql): empty order array generates invalid FETCH statement #12261
- fix(postgres): parse enums correctly when describing a table #12409
- fix(query): ensure correct return signature for QueryTypes.RAW #12305
- fix(query): preserve cls context for logger #12328
- fix(query-generator): do not generate GROUP BY clause if options.group is empty #12343
- fix(reload): include default scope #12399
- fix(types): add Association into OrderItem type #12332
- fix(types): add clientMinMessages to Options interface #12375
- fix(types): transactionType in Options #12377
- fix(types): add support for optional values in "where" clauses #12337
- fix(types): add missing fields to 'FindOrCreateType' #12338
- fix: add missing sql and parameters properties to some query errors #12299
- fix: remove custom inspect #12262
- refactor: cleanup query generators #12304
6.0.0-beta.6
- docs(add-constraint): options.fields support
- docs(association): document uniqueKey for belongs to many #12166
- docs(association): options.through.where support
- docs(association): use and instead of 'a nd' #12191
- docs(association): use correct scope name #12204
- docs(manuals): avoid duplicate header ids #12201
- docs(model): correct syntax error in example code #12137
- docs(query-interface): removeIndex indexNameOrAttributes #11947
- docs(resources): add sequelize-guard library #12235
- docs(typescript): fix confusing comments #12226
- docs(v6-guide): bluebird removal API changes
- docs: database version support info #12168
- docs: remove remaining bluebird references #12167
- feat(belongs-to-many): allow creation of paranoid join tables #12088
- feat(belongs-to-many): get/has/count for paranoid join table #12256
- feat(pool): expose maxUses pool config option #12101
- feat(postgres): minify include aliases over limit #11940
- feat(sequelize): handle query string host value #12041
- fix(associations): ensure correct schema on all generated attributes #12258
- fix(docs/instances): use correct variable for increment #12087
- fix(include): 別々のクエリがサブクエリにならないように修正 #12144
- fix(model): bulkCreateにおける関連付けロジックの非同期処理(Promise)の修正 #12163
- fix(model): updateOnDuplicateが複合キーに対応するように修正 #11984
- fix(model.count): カラムを指定しないdistinctで無効なSQLが生成される問題を修正 #11946
- fix(model.reload): options.whereを無視し、常にthis.where()を使用するように修正 #12211
- fix(mssql): BOOLEANカラムタイプのためレコード挿入に失敗する問題を修正 #12090
- fix(mssql): クエリジェネレータでsql_variantをキャストするように修正 #11994
- fix(mssql): 戻り値なしのUPDATEでOUTPUT INSERTEDを使用しないように修正 #12260
- fix(mssql): FETCH/NEXTクエリにおける重複したORDER句を修正 #12257
- fix(mssql): floatのスケールを正しく設定するように修正 #11962
- fix(mssql): tedious v9はconnect呼び出しを必要とする #12182
- fix(mssql): エンジンテーブルとカラムの大文字化を使用するように修正 #12212
- fix(pool): エンジンがサポートされていない場合、非推奨表示を行うように修正 #12218
- fix(postgres): addColumnがARRAY(ENUM)をサポートするように修正 #12259
- fix(query): 単語全体の中で使用されている$をバインドしないように修正 #12250
- fix(query-generator): 部分文字列ベースの演算子に対するリテラルを処理するように修正 #12210
- fix(query-interface): クエリインターフェース挿入に対してnullを渡せるように修正 #11931
- fix(query-interface): IndexesOptionsのfieldsにsequelize.fnとsequelize.literalを許可するように修正 #12224
- fix(scope): 元のスコープ定義を変更しないように修正 #12207
- fix(sqlite): 複数の主キーが構文エラーになる問題を修正 #12237
- fix(sync): すべてのクエリメソッドにオプションを渡せるように修正 #12208
- fix(typings): ファイルリストにtype_helpersを追加 #12000
- fix(typings): Model.initの戻り値の型を修正 #12148
- fix(typings): fnがwhereに代入可能になるように修正 #12040
- fix(typings): getForeignKeysForTablesの引数の定義を修正 #12084
- fix(typings): between演算子が日付範囲を受け入れるように修正 #12162
- refactor(ci): データベース待ちスクリプトを改善 #12132
- refactor(tsd-test-setup): dtslintを追加&設定 #11879
- refactor: すべてのDialect条件付きロジックをサブクラスに移動 #12217
- refactor: sequelize.importヘルパーを削除 #12175
- refactor: ネイティブバージョンを使用するように修正 #12159
- refactor: Object.assignの代わりにオブジェクトスプレッドを使用するように修正 #12213
6.0.0-beta.5
- fix(find-all): 属性が空の場合にエラーをスローするように修正 #11867
- fix(types):
queryInterface.addIndex
#11844 - fix(types):
sequelize.query
のplain
オプション #11596 - fix(types): オーバーロードされたメソッドの順序を修正 #11727
- fix(types):
Sequelize.where
のcomparator
引数 #11843 - fix(types): BelongsToManyGetAssociationsMixinOptionsを修正 #11818
- fix(types):
CreateOptions
にhooks
を追加 #11736 - fix(increment): クエリの問題を修正 #11852
- fix(associations): 非主キーのターゲットキーを持つ多対多の取得 #11778
- fix: SRIDが存在する場合に正しく選択するように修正 #11763
- feat(sqlite):
options.storage
に対する自動パスプロビジョン #11853 - feat(postgres):
idle_in_transaction_session_timeout
接続オプション #11775 - feat(index): 演算子を持つ複数のフィールドをサポートするように改善 #11934
- docs(transactions): addIndexの例と文法を修正 #11759
- docs(raw-queries): 古い情報を削除 #11833
- docs(optimistic-locking): 欠落していたマニュアルを修正 #11850
- docs(model): 空の結果に対するfindOneの戻り値 #11762
- docs(model-querying-basics.md): カンマを追加 #11891
- docs(manuals): 欠落していたmodels-definitionページを修正 #11838
- docs(manuals): 大幅な書き直し #11825
- docs(dialect-specific): MSSQLドメイン認証の例を追加 #11799
- docs(associations): 関連付けマニュアルのタイプミスを修正 #11888
- docs(associations): タイプミスを修正 #11869
6.0.0-beta.4
- feat(sync): alterを有効にして同期する場合、drop文をバイパスできるようにする #11708
- fix(model): インクルードされたモデルでinjectDependentVirtualAttrsを実行 #11713
- fix(model): ON CONFLICT ... DO UPDATEを正しく生成 #11666
- fix(mssql): formatError RegExを最適化 #11725
- fix(types): getForeignKeyReferencesForTable型を追加 #11738
- fix(types): 'restore'フックを型に追加 #11730
- fix(types): QueryOptions型に'fieldMaps'を追加 #11702
- fix(types): ModelにisSoftDeletedを追加 #11628
- fix(types): upsertの型付けを修正 #11674
- fix(types): フィールドのgetterとsetterで'this'を指定 #11648
- fix(types): UpdateOptionsインターフェースにparanoidを追加 #11647
- fix(types): IncludeThroughOptions定義に'as'を含める #11624
- fix(types): IncludeOptions.include型にIncludeableを追加 #11622
- fix(types): トランザクションロック #11620
- fix(sequelize.fn): ドル記号のエスケープ (#11533) #11606
- fix(types): Includeableにnestedを追加 #11354
- fix(types): whereにdateを追加 #11612
- fix(types): getDatabaseNameを追加 (#11431) #11614
- fix(types): beforeDestroy #11618
- fix(types): query-interfaceテーブルスキーマ #11582
- docs: README.md #11698
- docs(sequelize): options.retryの使用法の詳細 #11643
- docs: Sequelizeコンストラクタのloggingオプションを明確化 #11653
- docs(migrations): 例の構文エラーを修正 #11626
- docs: loggingオプションの説明 #11654
- docs(transaction): タイプミスを修正 #11659
- docs(hooks): belongs-to-manyに関する情報を追加 #11601
- docs(associations): タイプミスを修正 #11592
6.0.0-beta.3
- feat: cls-hooked / テストのサポート #11584