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

You need to sign in or sign up before continuing.
Commit ad7f882b by Mick Hansen

Merge pull request #4278 from Americas/master

groupJoinData checks UniqueKeys if no PrimaryKey is set
2 parents fe3e1c5f 091f2588
Showing with 43 additions and 9 deletions
...@@ -149,7 +149,21 @@ var groupJoinData = function(rows, includeOptions, options) { ...@@ -149,7 +149,21 @@ var groupJoinData = function(rows, includeOptions, options) {
} }
return keyPrefixMemo[key]; return keyPrefixMemo[key];
} }
, getUniqueKeyAttributes = function (model) {
var uniqueKeyAttributes = Utils._.chain(model.uniqueKeys);
uniqueKeyAttributes = uniqueKeyAttributes
.result(uniqueKeyAttributes.findKey() + '.fields')
.map(function(field){
return Utils._.findKey(model.attributes, function(chr) {
return chr.field === field;
});
})
.value();
return uniqueKeyAttributes;
}
, primaryKeyAttributes , primaryKeyAttributes
, uniqueKeyAttributes
, prefix; , prefix;
for (rowsI = 0; rowsI < rowsLength; rowsI++) { for (rowsI = 0; rowsI < rowsLength; rowsI++) {
...@@ -166,14 +180,21 @@ var groupJoinData = function(rows, includeOptions, options) { ...@@ -166,14 +180,21 @@ var groupJoinData = function(rows, includeOptions, options) {
// Compute top level hash key (this is usually just the primary key values) // Compute top level hash key (this is usually just the primary key values)
$length = includeOptions.model.primaryKeyAttributes.length; $length = includeOptions.model.primaryKeyAttributes.length;
topHash = '';
if ($length === 1) { if ($length === 1) {
topHash = row[includeOptions.model.primaryKeyAttributes[0]]; topHash = row[includeOptions.model.primaryKeyAttributes[0]];
} else { }
topHash = ''; else if ($length > 1) {
for ($i = 0; $i < $length; $i++) { for ($i = 0; $i < $length; $i++) {
topHash += row[includeOptions.model.primaryKeyAttributes[$i]]; topHash += row[includeOptions.model.primaryKeyAttributes[$i]];
} }
} }
else if (!Utils._.isEmpty(includeOptions.model.uniqueKeys)) {
uniqueKeyAttributes = getUniqueKeyAttributes(includeOptions.model);
for ($i = 0; $i < uniqueKeyAttributes.length; $i++) {
topHash += row[uniqueKeyAttributes[$i]];
}
}
} }
topValues = values = {}; topValues = values = {};
...@@ -197,7 +218,6 @@ var groupJoinData = function(rows, includeOptions, options) { ...@@ -197,7 +218,6 @@ var groupJoinData = function(rows, includeOptions, options) {
$keyPrefix.forEach(buildIncludeMap); $keyPrefix.forEach(buildIncludeMap);
} }
} }
// End of key set // End of key set
if ($prevKeyPrefix !== undefined && $prevKeyPrefix !== $keyPrefix) { if ($prevKeyPrefix !== undefined && $prevKeyPrefix !== $keyPrefix) {
if (checkExisting) { if (checkExisting) {
...@@ -212,14 +232,21 @@ var groupJoinData = function(rows, includeOptions, options) { ...@@ -212,14 +232,21 @@ var groupJoinData = function(rows, includeOptions, options) {
prefix = $parent ? $parent+'.'+$prevKeyPrefix[i] : $prevKeyPrefix[i]; prefix = $parent ? $parent+'.'+$prevKeyPrefix[i] : $prevKeyPrefix[i];
primaryKeyAttributes = includeMap[prefix].model.primaryKeyAttributes; primaryKeyAttributes = includeMap[prefix].model.primaryKeyAttributes;
$length = primaryKeyAttributes.length; $length = primaryKeyAttributes.length;
if ($length === 1) {
itemHash = prefix+row[prefix+'.'+primaryKeyAttributes[0]];
} else {
itemHash = prefix; itemHash = prefix;
if ($length === 1) {
itemHash += row[prefix+'.'+primaryKeyAttributes[0]];
}
else if ($length > 1) {
for ($i = 0; $i < $length; $i++) { for ($i = 0; $i < $length; $i++) {
itemHash += row[prefix+'.'+primaryKeyAttributes[$i]]; itemHash += row[prefix+'.'+primaryKeyAttributes[$i]];
} }
} }
else if (!Utils._.isEmpty(includeMap[prefix].model.uniqueKeys)) {
uniqueKeyAttributes = getUniqueKeyAttributes(includeMap[prefix].model);
for ($i = 0; $i < uniqueKeyAttributes.length; $i++) {
itemHash += row[prefix+'.'+uniqueKeyAttributes[$i]];
}
}
if (!parentHash) { if (!parentHash) {
parentHash = topHash; parentHash = topHash;
} }
...@@ -292,14 +319,21 @@ var groupJoinData = function(rows, includeOptions, options) { ...@@ -292,14 +319,21 @@ var groupJoinData = function(rows, includeOptions, options) {
prefix = $parent ? $parent+'.'+$prevKeyPrefix[i] : $prevKeyPrefix[i]; prefix = $parent ? $parent+'.'+$prevKeyPrefix[i] : $prevKeyPrefix[i];
primaryKeyAttributes = includeMap[prefix].model.primaryKeyAttributes; primaryKeyAttributes = includeMap[prefix].model.primaryKeyAttributes;
$length = primaryKeyAttributes.length; $length = primaryKeyAttributes.length;
if ($length === 1) {
itemHash = prefix+row[prefix+'.'+primaryKeyAttributes[0]];
} else {
itemHash = prefix; itemHash = prefix;
if ($length === 1) {
itemHash += row[prefix+'.'+primaryKeyAttributes[0]];
}
else if ($length > 0) {
for ($i = 0; $i < $length; $i++) { for ($i = 0; $i < $length; $i++) {
itemHash += row[prefix+'.'+primaryKeyAttributes[$i]]; itemHash += row[prefix+'.'+primaryKeyAttributes[$i]];
} }
} }
else if (!Utils._.isEmpty(includeMap[prefix].model.uniqueKeys)) {
uniqueKeyAttributes = getUniqueKeyAttributes(includeMap[prefix].model);
for ($i = 0; $i < uniqueKeyAttributes.length; $i++) {
itemHash += row[prefix+'.'+uniqueKeyAttributes[$i]];
}
}
if (!parentHash) { if (!parentHash) {
parentHash = topHash; parentHash = topHash;
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!