1
0
Fork 0

Fix deduplication in IndexBlock (#6510)

This commit is contained in:
Simon 2018-09-17 12:52:49 +02:00 committed by Jan
parent dbb57eee56
commit 781af3886c
2 changed files with 11 additions and 11 deletions

View File

@ -101,7 +101,7 @@ IndexBlock::IndexBlock(ExecutionEngine* engine, IndexNode const* en)
for (size_t i = 0; i < fields.size(); ++i) { for (size_t i = 0; i < fields.size(); ++i) {
if (idx->isAttributeExpanded(i)) { if (idx->isAttributeExpanded(i)) {
++expansions; ++expansions;
if (expansions > 1) { if (expansions > 1 || i > 0) {
_hasMultipleExpansions = true; _hasMultipleExpansions = true;
break; break;
} }

View File

@ -971,12 +971,12 @@ function arrayIndexNonArraySuite () {
col.save({ a: [1, 2, 3, 3, 2, 1], b: 1 }); // b: 1 a: 1,2,3 c: null col.save({ a: [1, 2, 3, 3, 2, 1], b: 1 }); // b: 1 a: 1,2,3 c: null
inserted += 3; inserted += 3;
insertedB += 3; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
col.save({ a: [1, 2, 3, 3, 2, 1], b: 1, c: 1 }); col.save({ a: [1, 2, 3, 3, 2, 1], b: 1, c: 1 });
inserted += 3; inserted += 3;
insertedB += 3; insertedB += 1;
checkElementsInIndex(inserted); // 1, 2, 3 :: 1 :: 1 checkElementsInIndex(inserted); // 1, 2, 3 :: 1 :: 1
col.save({_key: "null1", a: [null, "a", "b", "c", "b", "a", null] }); col.save({_key: "null1", a: [null, "a", "b", "c", "b", "a", null] });
@ -985,12 +985,12 @@ function arrayIndexNonArraySuite () {
col.save({_key: "null2", a: [null, "a", "b", "c", "b", "a", null], b: 1 }); col.save({_key: "null2", a: [null, "a", "b", "c", "b", "a", null], b: 1 });
inserted += 4; inserted += 4;
insertedB += 4; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
col.save({_key: "null3", a: [null, "a", "b", "c", "b", "a", null], b: 1, c: 1}); col.save({_key: "null3", a: [null, "a", "b", "c", "b", "a", null], b: 1, c: 1});
inserted += 4; inserted += 4;
insertedB += 4; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
const query = `FOR x IN ${cName} FILTER @tag IN x.a[*] && 1 == x.b SORT x._key RETURN x._key`; const query = `FOR x IN ${cName} FILTER @tag IN x.a[*] && 1 == x.b SORT x._key RETURN x._key`;
@ -1005,7 +1005,7 @@ function arrayIndexNonArraySuite () {
assertEqual(actual.length, insertedB); assertEqual(actual.length, insertedB);
const query3 = `FOR x IN ${cName} FILTER null == x.b RETURN x._key`; const query3 = `FOR x IN ${cName} FILTER null == x.b RETURN x._key`;
actual = AQL_EXECUTE(query3).json; actual = AQL_EXECUTE(query3).json;
assertEqual(actual.length, inserted - insertedB); assertEqual(actual.length, col.count() - insertedB);
}, },
testSkiplistMultipleAttributeMiddleArraySub : function () { testSkiplistMultipleAttributeMiddleArraySub : function () {
@ -1077,12 +1077,12 @@ function arrayIndexNonArraySuite () {
col.save({ a: [{d: 1}, {d: 2}, {d: 3}, {d: 3}, {d: 2}, {d: 1}], b: 1 }); col.save({ a: [{d: 1}, {d: 2}, {d: 3}, {d: 3}, {d: 2}, {d: 1}], b: 1 });
inserted += 3; // We index b: 1 and 3 values for a[*].d inserted += 3; // We index b: 1 and 3 values for a[*].d
insertedB += 3; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
col.save({ a: [{d: 1}, {d: 2}, {d: 3}, {d: 3}, {d: 2}, {d: 1}], b: 1, c: 1 }); col.save({ a: [{d: 1}, {d: 2}, {d: 3}, {d: 3}, {d: 2}, {d: 1}], b: 1, c: 1 });
inserted += 3; // We index b: 1, c: 1 and 3 values for a[*].d inserted += 3; // We index b: 1, c: 1 and 3 values for a[*].d
insertedB += 3; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
col.save({_key: "null3", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}] }); col.save({_key: "null3", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}] });
@ -1091,12 +1091,12 @@ function arrayIndexNonArraySuite () {
col.save({_key: "null4", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}], b: 1 }); col.save({_key: "null4", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}], b: 1 });
inserted += 4; inserted += 4;
insertedB += 4; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
col.save({_key: "null5", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}], b: 1, c: 1 }); col.save({_key: "null5", a: [{d: null}, {d: "a"}, {d: "b"}, {d: "c"}, {d: "b"}, {d: "a"}, {d: null}], b: 1, c: 1 });
inserted += 4; inserted += 4;
insertedB += 4; insertedB += 1;
checkElementsInIndex(inserted); checkElementsInIndex(inserted);
const query = `FOR x IN ${cName} FILTER @tag IN x.a[*].d && 1 == x.b SORT x._key RETURN x._key`; const query = `FOR x IN ${cName} FILTER @tag IN x.a[*].d && 1 == x.b SORT x._key RETURN x._key`;
@ -1114,7 +1114,7 @@ function arrayIndexNonArraySuite () {
assertEqual(actual.length, insertedB); assertEqual(actual.length, insertedB);
const query3 = `FOR x IN ${cName} FILTER null == x.b RETURN x._key`; const query3 = `FOR x IN ${cName} FILTER null == x.b RETURN x._key`;
actual = AQL_EXECUTE(query3).json; actual = AQL_EXECUTE(query3).json;
assertEqual(actual.length, inserted - insertedB); assertEqual(actual.length, col.count() - insertedB);
}, },
testSkiplistIndexSubAttributeArray : function () { testSkiplistIndexSubAttributeArray : function () {