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

Commit 2c6e526c by Mick Hansen

fix virtual dependency inclusion for includes

1 parent 19536f13
...@@ -516,6 +516,9 @@ Model.$validateIncludedElements = validateIncludedElements; ...@@ -516,6 +516,9 @@ Model.$validateIncludedElements = validateIncludedElements;
validateIncludedElement = function(include, tableNames, options) { validateIncludedElement = function(include, tableNames, options) {
tableNames[include.model.getTableName()] = true; tableNames[include.model.getTableName()] = true;
// Need to make sure virtuals are mapped before setting originalAttributes
include = Utils.mapFinderOptions(include, include.model);
if (include.attributes && !options.raw) { if (include.attributes && !options.raw) {
include.originalAttributes = include.attributes.slice(0); include.originalAttributes = include.attributes.slice(0);
......
...@@ -78,7 +78,7 @@ var Utils = module.exports = { ...@@ -78,7 +78,7 @@ var Utils = module.exports = {
/* Expand and normalize finder options */ /* Expand and normalize finder options */
mapFinderOptions: function(options, Model) { mapFinderOptions: function(options, Model) {
if (Model._hasVirtualAttributes) { if (Model._hasVirtualAttributes && options.attributes) {
options.attributes.forEach(function (attribute) { options.attributes.forEach(function (attribute) {
if (Model._isVirtualAttribute(attribute) && Model.rawAttributes[attribute].type.fields) { if (Model._isVirtualAttribute(attribute) && Model.rawAttributes[attribute].type.fields) {
options.attributes = options.attributes.concat(Model.rawAttributes[attribute].type.fields); options.attributes = options.attributes.concat(Model.rawAttributes[attribute].type.fields);
......
...@@ -52,6 +52,34 @@ suite(Support.getTestDialectTeaser('Utils'), function() { ...@@ -52,6 +52,34 @@ suite(Support.getTestDialectTeaser('Utils'), function() {
] ]
]); ]);
}); });
test('multiple calls', function () {
var Model = this.sequelize.define('User', {
createdAt: {
type: DataTypes.DATE,
field: 'created_at'
},
active: {
type: new DataTypes.VIRTUAL(DataTypes.BOOLEAN, ['createdAt'])
}
});
expect(
Utils.mapFinderOptions(
Utils.mapFinderOptions({
attributes: [
'active'
]
}, Model),
Model
).attributes
).to.eql([
[
'created_at',
'createdAt'
]
]);
});
}); });
suite('mapOptionFieldNames', function () { suite('mapOptionFieldNames', function () {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!