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

Method copy_node

src/db/sqlengine/parser/select_info.cc:66–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

64}
65
66Node::Ptr SelectInfo::copy_node(const Node::Ptr &node) {
67 Node::Ptr new_node = nullptr;
68
69 if (node == nullptr) {
70 return nullptr;
71 }
72
73 if (node->op() == NodeOp::T_INT_VALUE ||
74 node->op() == NodeOp::T_FLOAT_VALUE ||
75 node->op() == NodeOp::T_STRING_VALUE ||
76 node->op() == NodeOp::T_NULL_VALUE ||
77 node->op() == NodeOp::T_BOOL_VALUE) {
78 ConstantNode::Ptr constant_node =
79 std::dynamic_pointer_cast<ConstantNode>(node);
80 new_node = std::make_shared<ConstantNode>(constant_node->value());
81 } else if (node->op() == NodeOp::T_ID) {
82 IDNode::Ptr id_node = std::dynamic_pointer_cast<IDNode>(node);
83 new_node = std::make_shared<IDNode>(id_node->value());
84 } else if (node->op() == NodeOp::T_VECTOR_MATRIX_VALUE) {
85 VectorMatrixNode::Ptr vector_node =
86 std::dynamic_pointer_cast<VectorMatrixNode>(node);
87 new_node = std::make_shared<VectorMatrixNode>(
88 vector_node->matrix(), vector_node->sparse_indices(),
89 vector_node->sparse_values(), vector_node->query_params());
90 } else if (node->op() == NodeOp::T_FUNCTION_CALL) {
91 FuncNode::Ptr func_node = std::dynamic_pointer_cast<FuncNode>(node);
92 FuncNode::Ptr new_func_node = std::make_shared<FuncNode>();
93 new_func_node->set_func_name_node(
94 copy_node(func_node->get_func_name_node()));
95 for (auto argument : func_node->arguments()) {
96 new_func_node->add_argument(copy_node(argument));
97 }
98 new_node = std::move(new_func_node);
99 } else { /* others are normal Node */
100 new_node = std::make_shared<Node>();
101 }
102
103
104 // copy nodeOp
105 new_node->set_op(node->op());
106
107 // copy left & right
108 if (node->left() != nullptr) {
109 new_node->set_left(copy_node(node->left()));
110 }
111 if (node->right() != nullptr) {
112 new_node->set_right(copy_node(node->right()));
113 }
114
115 return new_node;
116}
117
118void SelectInfo::add_selected_elem(SelectedElemInfo::Ptr selected_elem_info) {
119 selected_elems_.push_back(std::move(selected_elem_info));

Callers

nothing calls this directly

Calls 10

opMethod · 0.80
set_leftMethod · 0.80
set_rightMethod · 0.80
valueMethod · 0.45
matrixMethod · 0.45
sparse_indicesMethod · 0.45
sparse_valuesMethod · 0.45
set_func_name_nodeMethod · 0.45
add_argumentMethod · 0.45
set_opMethod · 0.45

Tested by

no test coverage detected