mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
parent
9257523a20
commit
b90b4f2058
@ -31,16 +31,16 @@ struct Expr {
|
||||
|
||||
using ExprPtr = std::unique_ptr<Expr>;
|
||||
|
||||
struct BinaryExpr : Expr {
|
||||
struct BinaryExprBase : Expr {
|
||||
ExprPtr left_;
|
||||
ExprPtr right_;
|
||||
};
|
||||
|
||||
struct UnaryExpr : Expr {
|
||||
struct UnaryExprBase : Expr {
|
||||
ExprPtr child_;
|
||||
};
|
||||
|
||||
struct BoolUnaryExpr : UnaryExpr {
|
||||
struct LogicalUnaryExpr : UnaryExprBase {
|
||||
enum class OpType { Invalid = 0, LogicalNot = 1 };
|
||||
OpType op_type_;
|
||||
|
||||
@ -49,7 +49,7 @@ struct BoolUnaryExpr : UnaryExpr {
|
||||
accept(ExprVisitor&) override;
|
||||
};
|
||||
|
||||
struct BoolBinaryExpr : BinaryExpr {
|
||||
struct LogicalBinaryExpr : BinaryExprBase {
|
||||
// Note: bitA - bitB == bitA & ~bitB, alias to LogicalMinus
|
||||
enum class OpType { Invalid = 0, LogicalAnd = 1, LogicalOr = 2, LogicalXor = 3, LogicalMinus = 4 };
|
||||
OpType op_type_;
|
||||
|
||||
@ -422,8 +422,8 @@ ExprPtr
|
||||
Parser::ParseMustNode(const Json& body) {
|
||||
auto item_list = ParseItemList(body);
|
||||
auto merger = [](ExprPtr left, ExprPtr right) {
|
||||
using OpType = BoolBinaryExpr::OpType;
|
||||
auto res = std::make_unique<BoolBinaryExpr>();
|
||||
using OpType = LogicalBinaryExpr::OpType;
|
||||
auto res = std::make_unique<LogicalBinaryExpr>();
|
||||
res->op_type_ = OpType::LogicalAnd;
|
||||
res->left_ = std::move(left);
|
||||
res->right_ = std::move(right);
|
||||
@ -437,8 +437,8 @@ Parser::ParseShouldNode(const Json& body) {
|
||||
auto item_list = ParseItemList(body);
|
||||
Assert(item_list.size() >= 1);
|
||||
auto merger = [](ExprPtr left, ExprPtr right) {
|
||||
using OpType = BoolBinaryExpr::OpType;
|
||||
auto res = std::make_unique<BoolBinaryExpr>();
|
||||
using OpType = LogicalBinaryExpr::OpType;
|
||||
auto res = std::make_unique<LogicalBinaryExpr>();
|
||||
res->op_type_ = OpType::LogicalOr;
|
||||
res->left_ = std::move(left);
|
||||
res->right_ = std::move(right);
|
||||
@ -452,8 +452,8 @@ Parser::ParseMustNotNode(const Json& body) {
|
||||
auto item_list = ParseItemList(body);
|
||||
Assert(item_list.size() >= 1);
|
||||
auto merger = [](ExprPtr left, ExprPtr right) {
|
||||
using OpType = BoolBinaryExpr::OpType;
|
||||
auto res = std::make_unique<BoolBinaryExpr>();
|
||||
using OpType = LogicalBinaryExpr::OpType;
|
||||
auto res = std::make_unique<LogicalBinaryExpr>();
|
||||
res->op_type_ = OpType::LogicalAnd;
|
||||
res->left_ = std::move(left);
|
||||
res->right_ = std::move(right);
|
||||
@ -461,8 +461,8 @@ Parser::ParseMustNotNode(const Json& body) {
|
||||
};
|
||||
auto subtree = ConstructTree(merger, std::move(item_list));
|
||||
|
||||
using OpType = BoolUnaryExpr::OpType;
|
||||
auto res = std::make_unique<BoolUnaryExpr>();
|
||||
using OpType = LogicalUnaryExpr::OpType;
|
||||
auto res = std::make_unique<LogicalUnaryExpr>();
|
||||
res->op_type_ = OpType::LogicalNot;
|
||||
res->child_ = std::move(subtree);
|
||||
|
||||
|
||||
@ -216,10 +216,10 @@ ProtoParser::ParseTermExpr(const proto::plan::TermExpr& expr_pb) {
|
||||
|
||||
ExprPtr
|
||||
ProtoParser::ParseUnaryExpr(const proto::plan::UnaryExpr& expr_pb) {
|
||||
auto op = static_cast<BoolUnaryExpr::OpType>(expr_pb.op());
|
||||
Assert(op == BoolUnaryExpr::OpType::LogicalNot);
|
||||
auto op = static_cast<LogicalUnaryExpr::OpType>(expr_pb.op());
|
||||
Assert(op == LogicalUnaryExpr::OpType::LogicalNot);
|
||||
auto expr = this->ParseExpr(expr_pb.child());
|
||||
auto result = std::make_unique<BoolUnaryExpr>();
|
||||
auto result = std::make_unique<LogicalUnaryExpr>();
|
||||
result->child_ = std::move(expr);
|
||||
result->op_type_ = op;
|
||||
return result;
|
||||
@ -227,10 +227,10 @@ ProtoParser::ParseUnaryExpr(const proto::plan::UnaryExpr& expr_pb) {
|
||||
|
||||
ExprPtr
|
||||
ProtoParser::ParseBinaryExpr(const proto::plan::BinaryExpr& expr_pb) {
|
||||
auto op = static_cast<BoolBinaryExpr::OpType>(expr_pb.op());
|
||||
auto op = static_cast<LogicalBinaryExpr::OpType>(expr_pb.op());
|
||||
auto left_expr = this->ParseExpr(expr_pb.left());
|
||||
auto right_expr = this->ParseExpr(expr_pb.right());
|
||||
auto result = std::make_unique<BoolBinaryExpr>();
|
||||
auto result = std::make_unique<LogicalBinaryExpr>();
|
||||
result->op_type_ = op;
|
||||
result->left_ = std::move(left_expr);
|
||||
result->right_ = std::move(right_expr);
|
||||
|
||||
@ -24,10 +24,10 @@ namespace milvus::query {
|
||||
class ExecExprVisitor : public ExprVisitor {
|
||||
public:
|
||||
void
|
||||
visit(BoolUnaryExpr& expr) override;
|
||||
visit(LogicalUnaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(BoolBinaryExpr& expr) override;
|
||||
visit(LogicalBinaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(TermExpr& expr) override;
|
||||
|
||||
@ -16,12 +16,12 @@
|
||||
|
||||
namespace milvus::query {
|
||||
void
|
||||
BoolUnaryExpr::accept(ExprVisitor& visitor) {
|
||||
LogicalUnaryExpr::accept(ExprVisitor& visitor) {
|
||||
visitor.visit(*this);
|
||||
}
|
||||
|
||||
void
|
||||
BoolBinaryExpr::accept(ExprVisitor& visitor) {
|
||||
LogicalBinaryExpr::accept(ExprVisitor& visitor) {
|
||||
visitor.visit(*this);
|
||||
}
|
||||
|
||||
|
||||
@ -20,10 +20,10 @@ class ExprVisitor {
|
||||
|
||||
public:
|
||||
virtual void
|
||||
visit(BoolUnaryExpr&) = 0;
|
||||
visit(LogicalUnaryExpr&) = 0;
|
||||
|
||||
virtual void
|
||||
visit(BoolBinaryExpr&) = 0;
|
||||
visit(LogicalBinaryExpr&) = 0;
|
||||
|
||||
virtual void
|
||||
visit(TermExpr&) = 0;
|
||||
|
||||
@ -19,10 +19,10 @@ namespace milvus::query {
|
||||
class ExtractInfoExprVisitor : public ExprVisitor {
|
||||
public:
|
||||
void
|
||||
visit(BoolUnaryExpr& expr) override;
|
||||
visit(LogicalUnaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(BoolBinaryExpr& expr) override;
|
||||
visit(LogicalBinaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(TermExpr& expr) override;
|
||||
|
||||
@ -22,10 +22,10 @@ namespace milvus::query {
|
||||
class ShowExprVisitor : public ExprVisitor {
|
||||
public:
|
||||
void
|
||||
visit(BoolUnaryExpr& expr) override;
|
||||
visit(LogicalUnaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(BoolBinaryExpr& expr) override;
|
||||
visit(LogicalBinaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(TermExpr& expr) override;
|
||||
@ -48,14 +48,14 @@ class ShowExprVisitor : public ExprVisitor {
|
||||
}
|
||||
|
||||
Json
|
||||
combine(Json&& extra, UnaryExpr& expr) {
|
||||
combine(Json&& extra, UnaryExprBase& expr) {
|
||||
auto result = std::move(extra);
|
||||
result["child"] = call_child(*expr.child_);
|
||||
return result;
|
||||
}
|
||||
|
||||
Json
|
||||
combine(Json&& extra, BinaryExpr& expr) {
|
||||
combine(Json&& extra, BinaryExprBase& expr) {
|
||||
auto result = std::move(extra);
|
||||
result["left_child"] = call_child(*expr.left_);
|
||||
result["right_child"] = call_child(*expr.right_);
|
||||
|
||||
@ -24,10 +24,10 @@ namespace milvus::query {
|
||||
class VerifyExprVisitor : public ExprVisitor {
|
||||
public:
|
||||
void
|
||||
visit(BoolUnaryExpr& expr) override;
|
||||
visit(LogicalUnaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(BoolBinaryExpr& expr) override;
|
||||
visit(LogicalBinaryExpr& expr) override;
|
||||
|
||||
void
|
||||
visit(TermExpr& expr) override;
|
||||
|
||||
@ -60,8 +60,8 @@ class ExecExprVisitor : ExprVisitor {
|
||||
#endif
|
||||
|
||||
void
|
||||
ExecExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
using OpType = BoolUnaryExpr::OpType;
|
||||
ExecExprVisitor::visit(LogicalUnaryExpr& expr) {
|
||||
using OpType = LogicalUnaryExpr::OpType;
|
||||
auto vec = call_child(*expr.child_);
|
||||
RetType ret;
|
||||
for (int chunk_id = 0; chunk_id < vec.size(); ++chunk_id) {
|
||||
@ -81,8 +81,8 @@ ExecExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
}
|
||||
|
||||
void
|
||||
ExecExprVisitor::visit(BoolBinaryExpr& expr) {
|
||||
using OpType = BoolBinaryExpr::OpType;
|
||||
ExecExprVisitor::visit(LogicalBinaryExpr& expr) {
|
||||
using OpType = LogicalBinaryExpr::OpType;
|
||||
RetType ret;
|
||||
auto left = call_child(*expr.left_);
|
||||
auto right = call_child(*expr.right_);
|
||||
|
||||
@ -29,12 +29,12 @@ class ExtractInfoExprVisitor : ExprVisitor {
|
||||
#endif
|
||||
|
||||
void
|
||||
ExtractInfoExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
ExtractInfoExprVisitor::visit(LogicalUnaryExpr& expr) {
|
||||
expr.child_->accept(*this);
|
||||
}
|
||||
|
||||
void
|
||||
ExtractInfoExprVisitor::visit(BoolBinaryExpr& expr) {
|
||||
ExtractInfoExprVisitor::visit(LogicalBinaryExpr& expr) {
|
||||
expr.left_->accept(*this);
|
||||
expr.right_->accept(*this);
|
||||
}
|
||||
|
||||
@ -39,14 +39,14 @@ class ShowExprNodeVisitor : ExprVisitor {
|
||||
}
|
||||
|
||||
Json
|
||||
combine(Json&& extra, UnaryExpr& expr) {
|
||||
combine(Json&& extra, UnaryExprBase& expr) {
|
||||
auto result = std::move(extra);
|
||||
result["child"] = call_child(*expr.child_);
|
||||
return result;
|
||||
}
|
||||
|
||||
Json
|
||||
combine(Json&& extra, BinaryExpr& expr) {
|
||||
combine(Json&& extra, BinaryExprBase& expr) {
|
||||
auto result = std::move(extra);
|
||||
result["left_child"] = call_child(*expr.left_);
|
||||
result["right_child"] = call_child(*expr.right_);
|
||||
@ -60,9 +60,9 @@ class ShowExprNodeVisitor : ExprVisitor {
|
||||
#endif
|
||||
|
||||
void
|
||||
ShowExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
ShowExprVisitor::visit(LogicalUnaryExpr& expr) {
|
||||
Assert(!ret_.has_value());
|
||||
using OpType = BoolUnaryExpr::OpType;
|
||||
using OpType = LogicalUnaryExpr::OpType;
|
||||
|
||||
// TODO: use magic_enum if available
|
||||
Assert(expr.op_type_ == OpType::LogicalNot);
|
||||
@ -76,9 +76,9 @@ ShowExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
}
|
||||
|
||||
void
|
||||
ShowExprVisitor::visit(BoolBinaryExpr& expr) {
|
||||
ShowExprVisitor::visit(LogicalBinaryExpr& expr) {
|
||||
Assert(!ret_.has_value());
|
||||
using OpType = BoolBinaryExpr::OpType;
|
||||
using OpType = LogicalBinaryExpr::OpType;
|
||||
|
||||
// TODO: use magic_enum if available
|
||||
auto op_name = [](OpType op) {
|
||||
|
||||
@ -13,12 +13,12 @@
|
||||
|
||||
namespace milvus::query {
|
||||
void
|
||||
VerifyExprVisitor::visit(BoolUnaryExpr& expr) {
|
||||
VerifyExprVisitor::visit(LogicalUnaryExpr& expr) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void
|
||||
VerifyExprVisitor::visit(BoolBinaryExpr& expr) {
|
||||
VerifyExprVisitor::visit(LogicalBinaryExpr& expr) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user