mirror of https://gitee.com/bigwinds/arangodb
added tests
This commit is contained in:
parent
e76e649b27
commit
971ead19cb
|
@ -538,7 +538,59 @@ function optimizerIndexesTestSuite () {
|
|||
assertEqual(0, results.stats.scannedFull);
|
||||
assertNotEqual(0, results.stats.scannedIndex);
|
||||
assertEqual([ [ [ 'test1' ], [ 'test2' ], [ 'test3' ], [ 'test4' ], [ 'test5' ], [ 'test6' ], [ 'test7' ], [ 'test8' ], [ 'test9' ], [ 'test10' ] ] ], results.json);
|
||||
}
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test index usage
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testIndexOr : function () {
|
||||
c.ensureSkiplist("value2");
|
||||
AQL_EXECUTE("FOR i IN " + c.name() + " UPDATE i WITH { value2: i.value } IN " + c.name());
|
||||
|
||||
var query = "FOR i IN " + c.name() + " FILTER i.value == 1 || i.value2 == 1 RETURN i.value2";
|
||||
|
||||
var plan = AQL_EXPLAIN(query).plan;
|
||||
var nodeTypes = plan.nodes.map(function(node) {
|
||||
return node.type;
|
||||
});
|
||||
|
||||
assertEqual("SingletonNode", nodeTypes[0], query);
|
||||
assertEqual(-1, nodeTypes.indexOf("IndexRangeNode"), query);
|
||||
assertEqual(-1, nodeTypes.indexOf("SortNode"), query);
|
||||
assertEqual("ReturnNode", nodeTypes[nodeTypes.length - 1], query);
|
||||
|
||||
var results = AQL_EXECUTE(query);
|
||||
assertEqual([ 1 ], results.json, query);
|
||||
assertEqual(0, results.stats.scannedIndex);
|
||||
assertTrue(results.stats.scannedFull > 0);
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test index usage
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testIndexAnd : function () {
|
||||
c.ensureSkiplist("value2");
|
||||
AQL_EXECUTE("FOR i IN " + c.name() + " UPDATE i WITH { value2: i.value } IN " + c.name());
|
||||
|
||||
var query = "FOR i IN " + c.name() + " FILTER i.value == 1 && i.value2 == 1 RETURN i.value2";
|
||||
|
||||
var plan = AQL_EXPLAIN(query).plan;
|
||||
var nodeTypes = plan.nodes.map(function(node) {
|
||||
return node.type;
|
||||
});
|
||||
|
||||
assertEqual("SingletonNode", nodeTypes[0], query);
|
||||
assertNotEqual(-1, nodeTypes.indexOf("IndexRangeNode"), query);
|
||||
assertEqual(-1, nodeTypes.indexOf("SortNode"), query);
|
||||
assertEqual("ReturnNode", nodeTypes[nodeTypes.length - 1], query);
|
||||
|
||||
var results = AQL_EXECUTE(query);
|
||||
assertEqual([ 1 ], results.json, query);
|
||||
assertEqual(0, results.stats.scannedFull);
|
||||
assertTrue(results.stats.scannedIndex > 0);
|
||||
},
|
||||
|
||||
};
|
||||
}
|
||||
|
@ -1118,6 +1170,44 @@ function optimizerIndexesInOrTestSuite () {
|
|||
// we don't need a sort...
|
||||
assertEqual(-1, nodeTypes.indexOf("SortNode"), query);
|
||||
|
||||
var results = AQL_EXECUTE(query[0]);
|
||||
assertEqual(query[1].length, results.json.length, query);
|
||||
for (var i = 0; i < results.json.length; ++i) {
|
||||
assertEqual(query[1][i], results.json[i], query);
|
||||
}
|
||||
assertTrue(results.stats.scannedIndex > 0);
|
||||
assertEqual(0, results.stats.scannedFull);
|
||||
});
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test index usage
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testSkiplistIndexSortManyCandidates : function () {
|
||||
c.ensureSkiplist("value2");
|
||||
c.ensureSkiplist("value2", "value1");
|
||||
c.ensureSkiplist("value2", "valuex");
|
||||
|
||||
var queries = [
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 == 30 SORT i.value2 RETURN i.value2", [ 30 ] ],
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 IN [ 30, 31, 32 ] SORT i.value2 RETURN i.value2", [ 30, 31, 32 ] ],
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 IN [ 32, 32, 32, 32, 31, 31, 31, 31, 30, 30, 30, 32, 32, 31, 'foobar' ] SORT i.value2 RETURN i.value2", [ 30, 31, 32 ] ],
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 == 32 || i.value2 == 29 || i.value2 == 30 SORT i.value2 RETURN i.value2", [ 29, 30, 32 ] ],
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 == 32 || i.value2 == 29 || i.value2 == 30 || i.value2 == 35 SORT i.value2 RETURN i.value2", [ 29, 30, 32, 35 ] ],
|
||||
[ "FOR i IN " + c.name() + " FILTER i.value2 IN [ 32, 30, 45, 99, 12, 7 ] SORT i.value2 RETURN i.value2", [ 7, 12, 30, 32, 45, 99 ] ]
|
||||
];
|
||||
|
||||
queries.forEach(function(query) {
|
||||
var plan = AQL_EXPLAIN(query[0]).plan;
|
||||
var nodeTypes = plan.nodes.map(function(node) {
|
||||
return node.type;
|
||||
});
|
||||
|
||||
// ensure an index is used
|
||||
assertNotEqual(-1, nodeTypes.indexOf("IndexRangeNode"), query);
|
||||
assertEqual(-1, nodeTypes.indexOf("SortNode"), query);
|
||||
|
||||
var results = AQL_EXECUTE(query[0]);
|
||||
assertEqual(query[1].length, results.json.length, query);
|
||||
for (var i = 0; i < results.json.length; ++i) {
|
||||
|
|
Loading…
Reference in New Issue