mirror of https://github.com/milvus-io/milvus.git
76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
package planner
|
|
|
|
import "github.com/moznion/go-optional"
|
|
|
|
type NodeExpressionAtom struct {
|
|
baseNode
|
|
Constant optional.Option[*NodeConstant]
|
|
FullColumnName optional.Option[*NodeFullColumnName]
|
|
UnaryExpr optional.Option[*NodeUnaryExpressionAtom]
|
|
NestedExpr optional.Option[*NodeNestedExpressionAtom]
|
|
}
|
|
|
|
func (n *NodeExpressionAtom) String() string {
|
|
return "NodeExpression"
|
|
}
|
|
|
|
func (n *NodeExpressionAtom) GetChildren() []Node {
|
|
if n.Constant.IsSome() {
|
|
return []Node{n.Constant.Unwrap()}
|
|
}
|
|
if n.FullColumnName.IsSome() {
|
|
return []Node{n.FullColumnName.Unwrap()}
|
|
}
|
|
if n.UnaryExpr.IsSome() {
|
|
return []Node{n.UnaryExpr.Unwrap()}
|
|
}
|
|
if n.NestedExpr.IsSome() {
|
|
return []Node{n.NestedExpr.Unwrap()}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (n *NodeExpressionAtom) Accept(v Visitor) interface{} {
|
|
return v.VisitExpressionAtom(n)
|
|
}
|
|
|
|
type NodeExpressionAtomOption func(*NodeExpressionAtom)
|
|
|
|
func (n *NodeExpressionAtom) apply(opts ...NodeExpressionAtomOption) {
|
|
for _, opt := range opts {
|
|
opt(n)
|
|
}
|
|
}
|
|
|
|
func ExpressionAtomWithConstant(c *NodeConstant) NodeExpressionAtomOption {
|
|
return func(n *NodeExpressionAtom) {
|
|
n.Constant = optional.Some(c)
|
|
}
|
|
}
|
|
|
|
func ExpressionAtomWithFullColumnName(c *NodeFullColumnName) NodeExpressionAtomOption {
|
|
return func(n *NodeExpressionAtom) {
|
|
n.FullColumnName = optional.Some(c)
|
|
}
|
|
}
|
|
|
|
func ExpressionAtomWithUnaryExpr(c *NodeUnaryExpressionAtom) NodeExpressionAtomOption {
|
|
return func(n *NodeExpressionAtom) {
|
|
n.UnaryExpr = optional.Some(c)
|
|
}
|
|
}
|
|
|
|
func ExpressionAtomWithNestedExpr(c *NodeNestedExpressionAtom) NodeExpressionAtomOption {
|
|
return func(n *NodeExpressionAtom) {
|
|
n.NestedExpr = optional.Some(c)
|
|
}
|
|
}
|
|
|
|
func NewNodeExpressionAtom(text string, opts ...NodeExpressionAtomOption) *NodeExpressionAtom {
|
|
n := &NodeExpressionAtom{
|
|
baseNode: newBaseNode(text),
|
|
}
|
|
n.apply(opts...)
|
|
return n
|
|
}
|