milvus/internal/mysqld/planner/expression_atom.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
}