不要怂,就是干,撸起袖子干!

upgrade-to-v6.md 14 KB

Upgrade to v6

Sequelize v6 is the next major release after v5. Below is a list of breaking changes to help you upgrade.

Breaking Changes

Support for Node 10 and up

Sequelize v6 will only support Node 10 and up #10821.

CLS

You should now use cls-hooked package for CLS support.

  const cls = require('cls-hooked');
  const namespace = cls.createNamespace('....');
  const Sequelize = require('sequelize');

  Sequelize.useCLS(namespace);

Database Engine Support

We have updated our minimum supported database engine versions. Using older database engine will show SEQUELIZE0006 deprecation warning. Please check ENGINE.md for version table.

Sequelize

  • Bluebird has been removed. Internally all methods are now using async/await. Public API now returns native promises. Thanks to Andy Edwards for this refactor work.
  • Sequelize.Promise is no longer available.
  • sequelize.import method has been removed.

Model

options.returning

Option returning: true will no longer return attributes that are not defined in the model. Old behavior can be achieved by using returning: ['*'] instead.

Model.changed()

This method now tests for equality with _.isEqual and is now deep aware for JSON objects. Modifying a nested value for a JSON object won't mark it as changed (since it is still the same object).

  const instance = await MyModel.findOne();

  instance.myJsonField.someProperty = 12345; // Changed from something else to 12345
  console.log(instance.changed()); // false

  await instance.save(); // this will not save anything

  instance.changed('myJsonField', true);
  console.log(instance.changed()); // ['myJsonField']

  await instance.save(); // will save

Model.bulkCreate()

This method now throws Sequelize.AggregateError instead of Bluebird.AggregateError. All errors are now exposed as errors key.

QueryInterface

addConstraint

This method now only takes 2 parameters, tableName and options. Previously the second parameter could be a list of column names to apply the constraint to, this list must now be passed as options.fields property.

Changelog

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): separate queries are not sub-queries #12144
  • fix(model): fix unchained promise in association logic in bulkCreate #12163
  • fix(model): updateOnDuplicate handles composite keys #11984
  • fix(model.count): distinct without any column generates invalid SQL #11946
  • fix(model.reload): ignore options.where and always use this.where() #12211
  • fix(mssql) insert record failure because of BOOLEAN column type #12090
  • fix(mssql): cast sql_variant in query generator #11994
  • fix(mssql): dont use OUTPUT INSERTED for update without returning #12260
  • fix(mssql): duplicate order in FETCH/NEXT queries #12257
  • fix(mssql): set correct scale for float #11962
  • fix(mssql): tedious v9 requires connect call #12182
  • fix(mssql): use uppercase for engine table and columns #12212
  • fix(pool): show deprecation when engine is not supported #12218
  • fix(postgres): addColumn support ARRAY(ENUM) #12259
  • fix(query): do not bind $ used within a whole-word #12250
  • fix(query-generator): handle literal for substring based operators #12210
  • fix(query-interface): allow passing null for query interface insert #11931
  • fix(query-interface): allow sequelize.fn and sequelize.literal in fields of IndexesOptions #12224
  • fix(scope): don't modify original scope definition #12207
  • fix(sqlite): multiple primary keys results in syntax error #12237
  • fix(sync): pass options to all query methods #12208
  • fix(typings): add type_helpers to file list #12000
  • fix(typings): correct Model.init return type #12148
  • fix(typings): fn is assignable to where #12040
  • fix(typings): getForeignKeysForTables argument definition #12084
  • fix(typings): make between operator accept date ranges #12162
  • refactor(ci): improve database wait script #12132
  • refactor(tsd-test-setup): add & setup dtslint #11879
  • refactor: move all dialect conditional logic into subclass #12217
  • refactor: remove sequelize.import helper #12175
  • refactor: use native versions #12159
  • refactor: use object spread instead of Object.assign #12213

6.0.0-beta.5

  • fix(find-all): throw on empty attributes #11867
  • fix(types): queryInterface.addIndex #11844
  • fix(types): plain option in sequelize.query #11596
  • fix(types): correct overloaded method order #11727
  • fix(types): comparator arg of Sequelize.where #11843
  • fix(types): fix BelongsToManyGetAssociationsMixinOptions #11818
  • fix(types): adds hooks to CreateOptions #11736
  • fix(increment): broken queries #11852
  • fix(associations): gets on many-to-many with non-primary target key #11778
  • fix: properly select SRID if present #11763
  • feat(sqlite): automatic path provision for options.storage #11853
  • feat(postgres): idle_in_transaction_session_timeout connection option #11775
  • feat(index): improve to support multiple fields with operator #11934
  • docs(transactions): fix addIndex example and grammar #11759
  • docs(raw-queries): remove outdated info #11833
  • docs(optimistic-locking): fix missing manual #11850
  • docs(model): findOne return value for empty result #11762
  • docs(model-querying-basics.md): add some commas #11891
  • docs(manuals): fix missing models-definition page #11838
  • docs(manuals): extensive rewrite #11825
  • docs(dialect-specific): add MSSQL domain auth example #11799
  • docs(associations): fix typos in assocs manual #11888
  • docs(associations): fix typo #11869

6.0.0-beta.4

  • feat(sync): allow to bypass drop statements when sync with alter enabled #11708
  • fix(model): injectDependentVirtualAttrs on included models #11713
  • fix(model): generate ON CONFLICT ... DO UPDATE correctly #11666
  • fix(mssql): optimize formatError RegEx #11725
  • fix(types): add getForeignKeyReferencesForTable type #11738
  • fix(types): add 'restore' hooks to types #11730
  • fix(types): added 'fieldMaps' to QueryOptions typings #11702
  • fix(types): add isSoftDeleted to Model #11628
  • fix(types): fix upsert typing #11674
  • fix(types): specified 'this' for getters and setters in fields #11648
  • fix(types): add paranoid to UpdateOptions interface #11647
  • fix(types): include 'as' in IncludeThroughOptions definition #11624
  • fix(types): add Includeable to IncludeOptions.include type #11622
  • fix(types): transaction lock #11620
  • fix(sequelize.fn): escape dollarsign (#11533) #11606
  • fix(types): add nested to Includeable #11354
  • fix(types): add date to where #11612
  • fix(types): add getDatabaseName (#11431) #11614
  • fix(types): beforeDestroy #11618
  • fix(types): query-interface table schema #11582
  • docs: README.md #11698
  • docs(sequelize): detail options.retry usage #11643
  • docs: clarify logging option in Sequelize constructor #11653
  • docs(migrations): fix syntax error in example #11626
  • docs: describe logging option #11654
  • docs(transaction): fix typo #11659
  • docs(hooks): add info about belongs-to-many #11601
  • docs(associations): fix typo #11592

6.0.0-beta.3

  • feat: support cls-hooked / tests #11584

6.0.0-beta.2

  • feat(postgres): change returning option to only return model attributes #11526
  • fix(associations): allow binary key for belongs-to-many #11578
  • fix(postgres): always replace returning statement for upsertQuery
  • fix(model): make .changed() deep aware #10851
  • change: use node 10 #11580