diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index b155c54567..835cf24593 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -1049,6 +1049,20 @@ public class SQLEvalVisitorUtils { x.putAttribute(EVAL_VALUE, result); break; } + case BooleanAnd: + { + boolean first = eq(leftValue, true); + boolean second = eq(rightValue, true); + x.putAttribute(EVAL_VALUE, first&&second); + break; + } + case BooleanOr: + { + boolean first = eq(leftValue, true); + boolean second = eq(rightValue, true); + x.putAttribute(EVAL_VALUE, first||second); + break; + } default: break; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/eval/EvalAndOrTest.java b/src/test/java/com/alibaba/druid/bvt/sql/eval/EvalAndOrTest.java new file mode 100644 index 0000000000..3fc6b7f5b4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/eval/EvalAndOrTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.eval; + +import org.junit.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; +import com.alibaba.druid.util.JdbcConstants; + + +public class EvalAndOrTest extends TestCase { + public void test_and() throws Exception { + Assert.assertEquals(false, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "?>0 && ?>0", 1,0)); + Assert.assertEquals(true, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "2>1 && 100>10")); + } + public void test_or() throws Exception { + Assert.assertEquals(true, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "10>0 || 2>0")); + Assert.assertEquals(true, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "10>0 || 2<0")); + Assert.assertEquals(false, SQLEvalVisitorUtils.evalExpr(JdbcConstants.MYSQL, "2>10 || 100<10")); + } +}