MCPcopy Create free account
hub / github.com/alibaba/zvec / create_querynode_from_node

Method create_querynode_from_node

src/db/sqlengine/analyzer/query_analyzer.cc:409–494  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

407}
408
409QueryNode::Ptr QueryAnalyzer::create_querynode_from_node(const Node::Ptr &node,
410 uint32_t level,
411 std::string *err) {
412 QueryNode::Ptr query_node = nullptr;
413
414 if (node == nullptr) {
415 return nullptr;
416 }
417
418 // copy subclass object according to node op
419 if (node->type() == Node::NodeType::REL_EXPR) {
420 // REL_EXPR include T_EQ, T_NE, T_LT, T_GT, T_LE, T_GE, T_LIKE, T_IN,
421 // T_CONTAIN_ALL, T_CONTAIN_ANY, T_IS_NULL, T_IS_NOT_NULL
422 // use type == REL_EXPR to simplify */
423 query_node = std::make_shared<QueryRelNode>();
424 } else {
425 if (node->op() == NodeOp::T_INT_VALUE ||
426 node->op() == NodeOp::T_FLOAT_VALUE ||
427 node->op() == NodeOp::T_STRING_VALUE ||
428 node->op() == NodeOp::T_NULL_VALUE ||
429 node->op() == NodeOp::T_BOOL_VALUE) {
430 ConstantNode::Ptr constant_node =
431 std::dynamic_pointer_cast<ConstantNode>(node);
432 query_node = std::make_shared<QueryConstantNode>(constant_node->value());
433 } else if (node->op() == NodeOp::T_ID) {
434 IDNode::Ptr id_node = std::dynamic_pointer_cast<IDNode>(node);
435 query_node = std::make_shared<QueryIDNode>(id_node->value());
436 } else if (node->op() == NodeOp::T_VECTOR_MATRIX_VALUE) {
437 VectorMatrixNode::Ptr vector_node =
438 std::dynamic_pointer_cast<VectorMatrixNode>(node);
439 query_node =
440 std::make_shared<QueryVectorMatrixNode>(std::move(vector_node));
441 } else if (node->op() == NodeOp::T_FUNCTION_CALL) {
442 FuncNode::Ptr func_node = std::dynamic_pointer_cast<FuncNode>(node);
443 QueryFuncNode::Ptr query_func_node = std::make_shared<QueryFuncNode>();
444 query_func_node->set_func_name_node(create_querynode_from_node(
445 func_node->get_func_name_node(), level + 1, err));
446 for (auto argument : func_node->arguments()) {
447 query_func_node->add_argument(
448 create_querynode_from_node(argument, level + 1, err));
449 }
450 query_node = std::move(query_func_node);
451 } else if (node->op() == NodeOp::T_LIST_VALUE) {
452 InValueExprListNode::Ptr in_value_expr_list_node =
453 std::dynamic_pointer_cast<InValueExprListNode>(node);
454 QueryListNode::Ptr query_in_value_expr_node =
455 std::make_shared<QueryListNode>();
456
457 for (auto in_value_expr : in_value_expr_list_node->in_value_expr_list()) {
458 query_in_value_expr_node->add_value_expr(
459 create_querynode_from_node(in_value_expr, level, err));
460 }
461 query_in_value_expr_node->set_exclude(in_value_expr_list_node->exclude());
462 query_node = std::move(query_in_value_expr_node);
463 } else { /* others are normal Node */
464 query_node = std::make_shared<QueryNode>();
465 }
466 }

Callers

nothing calls this directly

Calls 14

opMethod · 0.80
in_value_expr_listMethod · 0.80
add_value_exprMethod · 0.80
set_levelMethod · 0.80
set_leftMethod · 0.80
set_rightMethod · 0.80
typeMethod · 0.45
valueMethod · 0.45
set_func_name_nodeMethod · 0.45
add_argumentMethod · 0.45
set_excludeMethod · 0.45
excludeMethod · 0.45

Tested by

no test coverage detected