mirror of https://gitee.com/bigwinds/arangodb
snapshot
This commit is contained in:
parent
b301102655
commit
fa7668e1ce
|
@ -2274,6 +2274,33 @@ struct OrToInConverter {
|
||||||
std::vector<AstNode const*> valueNodes;
|
std::vector<AstNode const*> valueNodes;
|
||||||
std::string variableName;
|
std::string variableName;
|
||||||
|
|
||||||
|
// node should be an attribute access
|
||||||
|
AstNode* getValueFromArray (AstNode const* node) {
|
||||||
|
TRI_ASSERT(node->type == NODE_TYPE_ATTRIBUTE_ACCESS);
|
||||||
|
AstNode* array = node->getMember(0);
|
||||||
|
|
||||||
|
if (array->type == NODE_TYPE_ATTRIBUTE_ACCESS) {
|
||||||
|
array = getValueFromArray(array);
|
||||||
|
}
|
||||||
|
TRI_ASSERT(array->type == NODE_TYPE_ARRAY);
|
||||||
|
|
||||||
|
char const* key = node->getStringValue();
|
||||||
|
|
||||||
|
for (auto i = 0; i < array->numMembers(); i++) {
|
||||||
|
AstNode* arrayElement = array->getMember(i);
|
||||||
|
TRI_ASSERT(arrayElement->type == NODE_TYPE_ARRAY_ELEMENT);
|
||||||
|
if (strcmp(key, arrayElement->getStringValue()) == 0){
|
||||||
|
TRI_ASSERT(arrayElement->getMember(0)->type == NODE_TYPE_VALUE);
|
||||||
|
return arrayElement->getMember(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*AstNode* getValueFromList (AstNode const* node) {
|
||||||
|
return node; //TODO implement
|
||||||
|
}*/
|
||||||
|
|
||||||
AstNode* buildInExpression (Ast* ast) {
|
AstNode* buildInExpression (Ast* ast) {
|
||||||
// the list of comparison values
|
// the list of comparison values
|
||||||
auto list = ast->createNodeList();
|
auto list = ast->createNodeList();
|
||||||
|
@ -2307,7 +2334,21 @@ struct OrToInConverter {
|
||||||
valueNodes.push_back(rhs);
|
valueNodes.push_back(rhs);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (lhs->type == NODE_TYPE_ATTRIBUTE_ACCESS && canConvertExpression(rhs)) {
|
||||||
|
// value == attr
|
||||||
|
valueNodes.push_back(lhs);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (rhs->type == NODE_TYPE_ATTRIBUTE_ACCESS && canConvertExpression(lhs)) {
|
||||||
|
// attr == value
|
||||||
|
valueNodes.push_back(rhs);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*if (lhs->type == NODE_TYPE_INDEXED_ACCESS && canConvertExpression(rhs)) {
|
||||||
|
// value == attr
|
||||||
|
if (lhs->getMember(0)->type == NODE_TYPE_LIST) {
|
||||||
|
}
|
||||||
|
}*/
|
||||||
// fall-through intentional
|
// fall-through intentional
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue