mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'aql2' of ssh://github.com/triAGENS/ArangoDB into aql2
This commit is contained in:
commit
1f309a8402
|
@ -264,6 +264,22 @@ bool AstNode::isSimple () const {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (type == NODE_TYPE_ARRAY) {
|
||||
size_t const n = numMembers();
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
auto member = getMember(i);
|
||||
if (! member->isSimple()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (type == NODE_TYPE_ARRAY_ELEMENT) {
|
||||
auto member = getMember(0);
|
||||
return member->isSimple();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -272,6 +272,30 @@ AqlValue Expression::executeSimpleExpression (AstNode const* node,
|
|||
}
|
||||
}
|
||||
|
||||
else if (node->type == NODE_TYPE_ARRAY) {
|
||||
auto resultArray = new Json(Json::Array);
|
||||
|
||||
try {
|
||||
size_t const n = node->numMembers();
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
auto member = node->getMember(i);
|
||||
TRI_document_collection_t const* myCollection = nullptr;
|
||||
|
||||
TRI_ASSERT(member->type == NODE_TYPE_ARRAY_ELEMENT);
|
||||
auto key = member->getStringValue();
|
||||
member = member->getMember(0);
|
||||
|
||||
AqlValue result = executeSimpleExpression(member, &myCollection, trx, docColls, argv, startPos, vars, regs);
|
||||
resultArray->set(key, result.toJson(trx, myCollection));
|
||||
}
|
||||
return AqlValue(resultArray);
|
||||
}
|
||||
catch (...) {
|
||||
delete resultArray;
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
else if (node->type == NODE_TYPE_REFERENCE) {
|
||||
auto v = static_cast<Variable*>(node->getData());
|
||||
|
||||
|
|
Loading…
Reference in New Issue