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