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}\"")
|
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
|
## --SECTION-- SUB-PROJECTS
|
||||||
## -----------------------------------------------------------------------------
|
## -----------------------------------------------------------------------------
|
||||||
|
|
|
@ -493,6 +493,7 @@ AqlValue Expression::executeSimpleExpression (AstNode const* node,
|
||||||
std::vector<Variable const*> const& vars,
|
std::vector<Variable const*> const& vars,
|
||||||
std::vector<RegisterId> const& regs,
|
std::vector<RegisterId> const& regs,
|
||||||
bool doCopy) {
|
bool doCopy) {
|
||||||
|
|
||||||
switch (node->type) {
|
switch (node->type) {
|
||||||
case NODE_TYPE_ATTRIBUTE_ACCESS:
|
case NODE_TYPE_ATTRIBUTE_ACCESS:
|
||||||
return executeSimpleExpressionAttributeAccess(node, trx, argv, startPos, vars, regs);
|
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()));
|
return AqlValue(new Json(TRI_UNKNOWN_MEM_ZONE, j.steal()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief execute an expression of type SIMPLE with INDEXED ACCESS
|
/// @brief execute an expression of type SIMPLE with INDEXED ACCESS
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -211,10 +211,6 @@ int IndexBlock::initialize () {
|
||||||
else {
|
else {
|
||||||
// Index is responsible for the right side, check if left side has to be evaluated
|
// Index is responsible for the right side, check if left side has to be evaluated
|
||||||
if (! lhs->isConstant()) {
|
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);
|
instantiateExpression(i, j, 0, lhs);
|
||||||
TRI_IF_FAILURE("IndexBlock::initializeExpressions") {
|
TRI_IF_FAILURE("IndexBlock::initializeExpressions") {
|
||||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
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(nestedArrayIndexSuite);
|
||||||
|
jsunity.run(nestedArrayInArraySuite);
|
||||||
|
|
||||||
return jsunity.done();
|
return jsunity.done();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue