mirror of https://github.com/milvus-io/milvus.git
97 lines
4.0 KiB
Go
97 lines
4.0 KiB
Go
package planner
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestEqual(t *testing.T) {
|
|
// a in ["100", false, 666.666]
|
|
expr1 := NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithInPredicate(
|
|
NewNodeInPredicate("", NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithFullColumnName(
|
|
NewNodeFullColumnName("", "a")))))), NewNodeExpressions("", []*NodeExpression{
|
|
NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithConstant(
|
|
NewNodeConstant("", WithStringLiteral("100"))))))))),
|
|
NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithConstant(
|
|
NewNodeConstant("", WithBooleanLiteral(false))))))))),
|
|
NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithConstant(
|
|
NewNodeConstant("", WithRealLiteral(666.666))))))))),
|
|
}), InOperatorIn)))))
|
|
|
|
// b >= (+100)
|
|
expr2 := NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithNodeBinaryComparisonPredicate(
|
|
NewNodeBinaryComparisonPredicate("", NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithFullColumnName(
|
|
NewNodeFullColumnName("", "b")))))), NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithNestedExpr(
|
|
NewNodeNestedExpressionAtom("", []*NodeExpression{
|
|
NewNodeExpression("", WithPredicate(
|
|
NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithUnaryExpr(
|
|
NewNodeUnaryExpressionAtom("", NewNodeExpressionAtom("", ExpressionAtomWithConstant(
|
|
NewNodeConstant("", WithDecimalLiteral(100)))), UnaryOperatorPositive)))))))),
|
|
})))))),
|
|
ComparisonOperatorGreaterEqual)))))
|
|
|
|
// c is true
|
|
expr3 := NewNodeExpression("", WithIsExpr(
|
|
NewNodeIsExpression("", NewNodePredicate("", WithNodeExpressionAtomPredicate(
|
|
NewNodeExpressionAtomPredicate("",
|
|
NewNodeExpressionAtom("", ExpressionAtomWithFullColumnName(
|
|
NewNodeFullColumnName("", "c")))))), TestValueTrue, IsOperatorIs)))
|
|
|
|
// ((not expr1) & (expr2)) | expr3
|
|
expr := NewNodeExpression("", WithLogicalExpr(
|
|
NewNodeLogicalExpression("",
|
|
NewNodeExpression("", WithLogicalExpr(
|
|
NewNodeLogicalExpression("",
|
|
NewNodeExpression("", WithNotExpr(
|
|
NewNodeNotExpression("", expr1))),
|
|
expr2,
|
|
LogicalOperatorAnd))),
|
|
expr3,
|
|
LogicalOperatorOr)))
|
|
|
|
n := NewNodeSqlStatements("", []*NodeSqlStatement{
|
|
NewNodeSqlStatement("", WithDmlStatement(
|
|
NewNodeDmlStatement("", WithSelectStatement(
|
|
NewNodeSelectStatement("", WithSimpleSelect(
|
|
NewNodeSimpleSelect("", WithLockClause(
|
|
NewNodeLockClause("", LockClauseOptionForUpdate)), WithQuery(
|
|
NewNodeQuerySpecification("", []*NodeSelectSpec{
|
|
NewNodeSelectSpec(""),
|
|
}, []*NodeSelectElement{
|
|
NewNodeSelectElement("", WithStar()),
|
|
NewNodeSelectElement("", WithFullColumnName(
|
|
NewNodeFullColumnName("", "a", FullColumnNameWithAlias("alias1")))),
|
|
NewNodeSelectElement("", WithFunctionCall(
|
|
NewNodeFunctionCall("", FunctionCallWithAlias("alias2"), WithAgg(
|
|
NewNodeAggregateWindowedFunction("", WithAggCount(
|
|
NewNodeCount(""))))))),
|
|
}, WithLimit(
|
|
NewNodeLimitClause("", 100, 0)), WithFrom(
|
|
NewNodeFromClause("", []*NodeTableSource{
|
|
NewNodeTableSource("", WithTableName("t")),
|
|
}, WithWhere(expr)))))))))))),
|
|
})
|
|
|
|
assert.True(t, Equal(n, n))
|
|
}
|