1
0
Fork 0

Merge branch 'aql2' of ssh://github.com/triAGENS/ArangoDB into aql2

This commit is contained in:
James 2014-08-13 18:39:19 +02:00
commit 1f309a8402
2 changed files with 40 additions and 0 deletions

View File

@ -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;
}

View File

@ -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());