mirror of https://gitee.com/bigwinds/arangodb
bug-fix-3.3/double-modification-bug (#5981)
This commit is contained in:
parent
e266efdf96
commit
7c63c0e2fc
File diff suppressed because it is too large
Load Diff
|
@ -129,7 +129,7 @@ void distributeInClusterRule(Optimizer*, std::unique_ptr<ExecutionPlan>,
|
|||
OptimizerRule const*);
|
||||
|
||||
#ifdef USE_ENTERPRISE
|
||||
void distributeInClusterRuleSmartEdgeCollection(
|
||||
ExecutionNode* distributeInClusterRuleSmartEdgeCollection(
|
||||
ExecutionPlan*,
|
||||
SubqueryNode* snode,
|
||||
ExecutionNode* node,
|
||||
|
@ -209,7 +209,7 @@ void patchUpdateStatementsRule(Optimizer*, std::unique_ptr<ExecutionPlan>,
|
|||
/// merges filter nodes into graph traversal nodes
|
||||
void optimizeTraversalsRule(Optimizer* opt, std::unique_ptr<ExecutionPlan> plan,
|
||||
OptimizerRule const* rule);
|
||||
|
||||
|
||||
/// @brief removes filter nodes already covered by the traversal and removes unused variables
|
||||
void removeFiltersCoveredByTraversal(Optimizer* opt, std::unique_ptr<ExecutionPlan> plan,
|
||||
OptimizerRule const* rule);
|
||||
|
@ -225,10 +225,10 @@ void prepareTraversalsRule(Optimizer* opt, std::unique_ptr<ExecutionPlan> plan,
|
|||
|
||||
/// @brief moves simple subqueries one level higher
|
||||
void inlineSubqueriesRule(Optimizer*, std::unique_ptr<ExecutionPlan>, OptimizerRule const*);
|
||||
|
||||
|
||||
/// @brief replace FILTER and SORT containing DISTANCE function
|
||||
void geoIndexRule(aql::Optimizer* opt, std::unique_ptr<aql::ExecutionPlan> plan, aql::OptimizerRule const* rule);
|
||||
|
||||
|
||||
/// @brief replace FULLTEXT function
|
||||
void fulltextIndexRule(aql::Optimizer* opt, std::unique_ptr<aql::ExecutionPlan> plan, aql::OptimizerRule const* rule);
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ function ahuacatlRemoveSuite () {
|
|||
var expected = { writesExecuted: 0, writesIgnored: 0 };
|
||||
let query = "FOR d IN " + cn1 + " FILTER d.value1 < 0 REMOVE d IN " + cn1;
|
||||
var actual = getModifyQueryResults(query);
|
||||
|
||||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual));
|
||||
|
||||
|
@ -222,7 +222,7 @@ function ahuacatlRemoveSuite () {
|
|||
|
||||
assertEqual(0, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value1 - r.value1;
|
||||
});
|
||||
|
@ -445,7 +445,7 @@ function ahuacatlRemoveSuite () {
|
|||
|
||||
testRemoveEdge : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
for (var i = 0; i < 100; ++i) {
|
||||
edge.save("UnitTestsAhuacatlRemove1/foo" + i, "UnitTestsAhuacatlRemove2/bar", { what: i, _key: "test" + i });
|
||||
|
@ -511,6 +511,27 @@ function ahuacatlInsertSuite () {
|
|||
c3 = null;
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test insert
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testInsertDouble : function () {
|
||||
c1.truncate();
|
||||
c2.truncate();
|
||||
var expected = { writesExecuted: 0, writesIgnored: 0 };
|
||||
const query = `LET dog = {name:'ulf'}
|
||||
LET pussy = {name : 'uschi'}
|
||||
INSERT dog IN @@hunde
|
||||
INSERT pussy IN @@kartzen
|
||||
RETURN $NEW`;
|
||||
const bind = { "@hunde" : cn1, "@kartzen" : cn2 };
|
||||
const options = {optimizer : { rules : ["+restrict-to-single-shard","-optimize-cluster-single-document-operations", "-remove-unnecessary-remote-scatter"] } };
|
||||
|
||||
db._query(query, bind, options);
|
||||
assertEqual(1, c1.count());
|
||||
assertEqual(1, c2.count());
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test insert
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -518,7 +539,7 @@ function ahuacatlInsertSuite () {
|
|||
testInsertNothing : function () {
|
||||
var expected = { writesExecuted: 0, writesIgnored: 0 };
|
||||
var actual = getModifyQueryResults("FOR d IN " + cn1 + " FILTER d.value1 < 0 INSERT { foxx: true } IN " + cn1);
|
||||
|
||||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual));
|
||||
},
|
||||
|
@ -767,7 +788,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
assertEqual(100, c3.count());
|
||||
assertEqual(expected, sanitizeStats(actual));
|
||||
|
||||
|
||||
var docs = db._query("FOR doc IN @@cn FILTER doc.bar >= 0 SORT doc.bar RETURN doc", { "@cn" : cn3 }).toArray();
|
||||
|
||||
for (var i = 0; i < 100; ++i) {
|
||||
|
@ -776,7 +797,7 @@ function ahuacatlInsertSuite () {
|
|||
assertEqual(i, doc.bar);
|
||||
assertEqual(i, doc.a);
|
||||
assertEqual(i, doc.b);
|
||||
|
||||
|
||||
var doc2 = c3.document(doc._key);
|
||||
assertEqual(doc._key, doc2._key);
|
||||
assertEqual(doc._rev, doc2._rev);
|
||||
|
@ -796,7 +817,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
assertEqual(100, c3.count());
|
||||
assertEqual(expected, sanitizeStats(actual));
|
||||
|
||||
|
||||
var docs = db._query("FOR doc IN @@cn FILTER doc.bar >= 0 SORT doc.bar RETURN doc", { "@cn" : cn3 }).toArray();
|
||||
|
||||
for (var i = 0; i < 100; ++i) {
|
||||
|
@ -804,7 +825,7 @@ function ahuacatlInsertSuite () {
|
|||
assertMatch(/^\d+$/, doc._key);
|
||||
assertEqual(i, doc.bar);
|
||||
assertEqual(i, doc.a);
|
||||
|
||||
|
||||
var doc2 = c3.document(doc._key);
|
||||
assertEqual(doc._key, doc2._key);
|
||||
assertEqual(doc._rev, doc2._rev);
|
||||
|
@ -929,7 +950,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
testInsertEdgeInvalid : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
assertQueryError(errors.ERROR_ARANGO_INVALID_EDGE_ATTRIBUTE.code, "FOR i IN 1..50 INSERT { } INTO @@cn", { "@cn": edge.name() });
|
||||
assertEqual(0, edge.count());
|
||||
|
@ -943,7 +964,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
testInsertEdgeNoFrom : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
assertQueryError(errors.ERROR_ARANGO_INVALID_EDGE_ATTRIBUTE.code, "FOR i IN 1..50 INSERT { _to: CONCAT('UnitTestsAhuacatlInsert1/', i) } INTO @@cn", { "@cn": edge.name() });
|
||||
assertEqual(0, edge.count());
|
||||
|
@ -957,7 +978,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
testInsertEdgeNoTo : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
assertQueryError(errors.ERROR_ARANGO_INVALID_EDGE_ATTRIBUTE.code, "FOR i IN 1..50 INSERT { _from: CONCAT('UnitTestsAhuacatlInsert1/', i) } INTO @@cn", { "@cn": edge.name() });
|
||||
assertEqual(0, edge.count());
|
||||
|
@ -971,7 +992,7 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
testInsertEdge : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
var expected = { writesExecuted: 50, writesIgnored: 0 };
|
||||
var actual = getModifyQueryResults("FOR i IN 1..50 INSERT { _key: CONCAT('test', i), _from: CONCAT('UnitTestsAhuacatlInsert1/', i), _to: CONCAT('UnitTestsAhuacatlInsert2/', i), value: [ i ], sub: { foo: 'bar' } } INTO @@cn", { "@cn": edge.name() });
|
||||
|
@ -995,14 +1016,14 @@ function ahuacatlInsertSuite () {
|
|||
|
||||
testInsertEdgeReturn : function () {
|
||||
db._drop("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
var edge = db._createEdgeCollection("UnitTestsAhuacatlEdge");
|
||||
|
||||
var expected = { writesExecuted: 50, writesIgnored: 0 };
|
||||
var actual = AQL_EXECUTE("FOR i IN 0..49 INSERT { _key: CONCAT('test', i), _from: CONCAT('UnitTestsAhuacatlInsert1/', i), _to: CONCAT('UnitTestsAhuacatlInsert2/', i), value: [ i ], sub: { foo: 'bar' } } INTO @@cn LET result = NEW RETURN result", { "@cn": edge.name() });
|
||||
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
assertEqual(50, edge.count());
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value[0] - r.value[0];
|
||||
});
|
||||
|
@ -1097,7 +1118,7 @@ function ahuacatlUpdateSuite () {
|
|||
testUpdateNothing : function () {
|
||||
var expected = { writesExecuted: 0, writesIgnored: 0 };
|
||||
var actual = getModifyQueryResults("FOR d IN " + cn1 + " FILTER d.value1 < 0 UPDATE { foxx: true } IN " + cn1);
|
||||
|
||||
|
||||
assertEqual(expected, sanitizeStats(actual));
|
||||
},
|
||||
|
||||
|
@ -1420,7 +1441,7 @@ function ahuacatlUpdateSuite () {
|
|||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value1 - r.value1;
|
||||
});
|
||||
|
@ -1450,7 +1471,7 @@ function ahuacatlUpdateSuite () {
|
|||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value1 - r.value1;
|
||||
});
|
||||
|
@ -1549,7 +1570,7 @@ function ahuacatlUpdateSuite () {
|
|||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value1 - r.value1;
|
||||
});
|
||||
|
@ -1579,7 +1600,7 @@ function ahuacatlUpdateSuite () {
|
|||
|
||||
assertEqual(100, c1.count());
|
||||
assertEqual(expected, sanitizeStats(actual.stats));
|
||||
|
||||
|
||||
actual.json = actual.json.sort(function(l, r) {
|
||||
return l.value3 - r.value3;
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue