mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/arangodb/arangodb into vpack
This commit is contained in:
commit
43eff8f0e9
|
@ -748,6 +748,20 @@ endif ()
|
|||
|
||||
add_definitions("-DTRI_ZLIB_VERSION=\"${ZLIB_VERSION}\"")
|
||||
|
||||
################################################################################
|
||||
### @brief VELOCYPACK
|
||||
################################################################################
|
||||
|
||||
set(VELOCYPACK_VERSION "unknown" CACHE string "VELOCYPACK version")
|
||||
|
||||
if (NOT MSVC)
|
||||
set(VELOCYPACK_INCLUDE ${PROJECT_SOURCE_DIR}/3rdParty/velocypack/include CACHE path "VELOCYPACK include path")
|
||||
endif ()
|
||||
|
||||
if (VELOCYPACK_INCLUDE)
|
||||
include_directories(${VELOCYPACK_INCLUDE})
|
||||
endif ()
|
||||
|
||||
## -----------------------------------------------------------------------------
|
||||
## --SECTION-- SUB-PROJECTS
|
||||
## -----------------------------------------------------------------------------
|
||||
|
|
|
@ -493,6 +493,7 @@ AqlValue Expression::executeSimpleExpression (AstNode const* node,
|
|||
std::vector<Variable const*> const& vars,
|
||||
std::vector<RegisterId> const& regs,
|
||||
bool doCopy) {
|
||||
|
||||
switch (node->type) {
|
||||
case NODE_TYPE_ATTRIBUTE_ACCESS:
|
||||
return executeSimpleExpressionAttributeAccess(node, trx, argv, startPos, vars, regs);
|
||||
|
@ -660,7 +661,6 @@ AqlValue Expression::executeSimpleExpressionAttributeAccess (AstNode const* node
|
|||
return AqlValue(new Json(TRI_UNKNOWN_MEM_ZONE, j.steal()));
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief execute an expression of type SIMPLE with INDEXED ACCESS
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -211,10 +211,6 @@ int IndexBlock::initialize () {
|
|||
else {
|
||||
// Index is responsible for the right side, check if left side has to be evaluated
|
||||
if (! lhs->isConstant()) {
|
||||
if (leaf->type == NODE_TYPE_OPERATOR_BINARY_IN) {
|
||||
// IN: now make IN result unique
|
||||
lhs = makeUnique(lhs);
|
||||
}
|
||||
instantiateExpression(i, j, 0, lhs);
|
||||
TRI_IF_FAILURE("IndexBlock::initializeExpressions") {
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||
|
|
|
@ -295,10 +295,72 @@ function nestedArrayIndexSuite () {
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief executes the test suite
|
||||
/// @brief test suite
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function nestedArrayInArraySuite () {
|
||||
var cn1 = "UnitTestsArray1";
|
||||
var cn2 = "UnitTestsArray2";
|
||||
var c1;
|
||||
var c2;
|
||||
|
||||
var indexUsed = function (query, bindVars) {
|
||||
var plan = AQL_EXPLAIN(query, bindVars || {}).plan;
|
||||
var nodeTypes = plan.nodes.map(function(node) {
|
||||
return node.type;
|
||||
});
|
||||
return (nodeTypes.indexOf("IndexNode") !== -1);
|
||||
};
|
||||
|
||||
return {
|
||||
|
||||
setUp : function () {
|
||||
db._drop(cn1);
|
||||
db._drop(cn2);
|
||||
c1 = db._create(cn1);
|
||||
c2 = db._create(cn2);
|
||||
},
|
||||
|
||||
tearDown : function () {
|
||||
db._drop(cn1);
|
||||
db._drop(cn2);
|
||||
},
|
||||
|
||||
testIndexUsage : function () {
|
||||
c1.insert({ value: "foobar" });
|
||||
c1.insert({ value: "baz" });
|
||||
|
||||
c2.insert({ values: [ "foo", "bar", "bark" ] });
|
||||
c2.insert({ values: [ "bart", "qux", "foobar", "foobar", "foobar" ] });
|
||||
c2.insert({ values: [ "baz", "foobar", "foobar", "bart" ] });
|
||||
c2.insert({ values: "troet" });
|
||||
var query = "FOR doc1 IN @@c1 FOR doc2 IN @@c2 FILTER doc1.value IN doc2.values RETURN doc1.value";
|
||||
|
||||
var expected = [
|
||||
"foobar",
|
||||
"foobar",
|
||||
"baz"
|
||||
];
|
||||
var result = AQL_EXECUTE(query, { "@c1" : cn1, "@c2" : cn2 });
|
||||
assertEqual(expected.sort(), result.json.sort());
|
||||
assertEqual(0, result.warnings.length);
|
||||
|
||||
c2.ensureIndex({ type: "hash", fields: [ "values[*]" ] });
|
||||
var result = AQL_EXECUTE(query, { "@c1" : cn1, "@c2" : cn2 });
|
||||
assertEqual(expected.sort(), result.json.sort());
|
||||
assertEqual(0, result.warnings.length);
|
||||
assertTrue(indexUsed(query, { "@c1": cn1, "@c2" : cn2 }));
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief executes the test suites
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
jsunity.run(nestedArrayIndexSuite);
|
||||
jsunity.run(nestedArrayInArraySuite);
|
||||
|
||||
return jsunity.done();
|
||||
|
||||
|
|
Loading…
Reference in New Issue