You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by lu...@apache.org on 2020/12/21 07:23:14 UTC

[shardingsphere] branch master updated: Add ExpressionAssert for WhereClause, IdentifierValueAssert for ExpectedOwner and TableAssert for UpdateStatementAssert. (#8604)

This is an automated email from the ASF dual-hosted git repository.

lujingshang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 350c08e  Add ExpressionAssert for WhereClause, IdentifierValueAssert for ExpectedOwner and TableAssert for UpdateStatementAssert. (#8604)
350c08e is described below

commit 350c08e87ca9ccbbeb3d325c245a5964254d0812
Author: Albert Li <r_...@126.com>
AuthorDate: Mon Dec 21 15:22:43 2020 +0800

    Add ExpressionAssert for WhereClause, IdentifierValueAssert for ExpectedOwner and TableAssert for UpdateStatementAssert. (#8604)
    
    * Add TableAssert for UpdateStatementAssert.
    Add IdentifierValueAssert for ExpectedIndex, ExpectedColumnOrderByItem, ExpectedOwner, ExpectedSchema and ExpectedColumnProjection.
    Add ExpressionAssert and test cases for select where with expr.
    Adjust the whereClause of the old test case.
    
    * Use the `replace` method instead of `String.format` to replace the parameters in sql.
    Format sql parse cases.
    Assert actual base on expected in ExpressionAssert.
    Add `literal-text` attribute in ExpressionProjection for the case which result is different between placeholder and literal mode.
    
    * Format code.
    
    * Fix test cases that use the old `expr` syntax.
---
 .../asserts/segment/column/ColumnAssert.java       |   15 +-
 .../segment/expression/ExpressionAssert.java       |  273 ++-
 .../asserts/segment/index/IndexAssert.java         |    9 +-
 .../asserts/segment/orderby/OrderByItemAssert.java |   11 +-
 .../asserts/segment/output/OutputClauseAssert.java |    4 +-
 .../OwnerAssert.java}                              |   25 +-
 .../segment/projection/ProjectionAssert.java       |   36 +-
 .../asserts/segment/schema/SchemaAssert.java       |    8 +-
 .../asserts/segment/table/TableAssert.java         |   29 +-
 .../asserts/segment/where/WhereClauseAssert.java   |    5 +-
 .../statement/dml/impl/SelectStatementAssert.java  |    1 -
 .../statement/dml/impl/UpdateStatementAssert.java  |    7 +-
 .../IdentifierValueAssert.java}                    |   31 +-
 .../AbstractExpectedDelimiterSQLSegment.java       |    2 +-
 ...a => AbstractExpectedIdentifierSQLSegment.java} |    9 +-
 ...ndex.java => ExpectedIdentifierSQLSegment.java} |   22 +-
 .../domain/segment/impl/column/ExpectedColumn.java |   13 +-
 .../ExpectedBetweenExpression.java}                |   28 +-
 .../ExpectedBinaryOperationExpression.java}        |   20 +-
 .../ExpectedExistsSubquery.java}                   |   18 +-
 .../segment/impl/expr/ExpectedExpression.java      |   71 +
 .../ExpectedInExpression.java}                     |   20 +-
 .../ExpectedListExpression.java}                   |   18 +-
 .../ExpectedNotExpression.java}                    |   19 +-
 .../domain/segment/impl/index/ExpectedIndex.java   |    9 +-
 .../item/impl/ExpectedColumnOrderByItem.java       |    7 +-
 .../impl/predicate/ExpectedWhereClause.java        |    9 +-
 .../impl/column/ExpectedColumnProjection.java      |   11 +-
 .../expression/ExpectedExpressionProjection.java   |   13 +-
 .../shorthand/ExpectedShorthandProjection.java     |    4 +-
 .../domain/segment/impl/schema/ExpectedSchema.java |    9 +-
 ...tedSimpleTableOwner.java => ExpectedOwner.java} |   11 +-
 .../segment/impl/table/ExpectedSimpleTable.java    |   10 +-
 .../statement/dml/UpdateStatementTestCase.java     |    6 +-
 .../jaxb/sql/loader/SQLCasesLoader.java            |   35 +-
 .../src/main/resources/case/dml/delete.xml         |  507 +++--
 .../src/main/resources/case/dml/insert.xml         |  144 +-
 .../src/main/resources/case/dml/replace.xml        |  101 +-
 .../main/resources/case/dml/select-aggregate.xml   |  252 ++-
 .../main/resources/case/dml/select-expression.xml  | 1516 ++++++++++++-
 .../main/resources/case/dml/select-group-by.xml    |  104 +-
 .../src/main/resources/case/dml/select-into.xml    |  110 +-
 .../src/main/resources/case/dml/select-join.xml    |   72 +-
 .../src/main/resources/case/dml/select-lock.xml    |  249 ++-
 .../src/main/resources/case/dml/select-or.xml      |  644 +++---
 .../main/resources/case/dml/select-order-by.xml    |  107 +-
 .../dml/select-pagination-group-by-order-by.xml    | 1397 +++++++-----
 .../main/resources/case/dml/select-pagination.xml  | 1285 +++++++----
 .../main/resources/case/dml/select-sub-query.xml   |  176 +-
 .../src/main/resources/case/dml/select.xml         | 2279 +++++++++++++-------
 .../src/main/resources/case/dml/update.xml         |  721 ++++---
 .../sql/supported/dml/select-expression.xml        |   55 +-
 .../sql/supported/dml/select-group-by.xml          |    2 +-
 .../main/resources/sql/supported/dml/select.xml    |    3 +-
 .../main/resources/sql/unsupported/unsupported.xml |   13 +
 55 files changed, 7103 insertions(+), 3452 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/column/ColumnAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/column/ColumnAssert.java
index 567bdd6..99c3fe0 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/column/ColumnAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/column/ColumnAssert.java
@@ -20,16 +20,13 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.column.ExpectedColumn;
 
-import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 /**
@@ -46,17 +43,13 @@ public final class ColumnAssert {
      * @param expected expected column
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final ColumnSegment actual, final ExpectedColumn expected) {
-        assertThat(assertContext.getText("Column name assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Column");
         if (null != expected.getOwner()) {
             assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
-            // TODO OwnerAssert is needed.
-            OwnerSegment owner = actual.getOwner().get();
-            TableAssert.assertOwner(assertContext, new SimpleTableSegment(owner.getStartIndex(), owner.getStopIndex(), owner.getIdentifier()), expected.getOwner());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
         } else {
             assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
         }
-        assertThat(assertContext.getText("Column start delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Column end delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/expression/ExpressionAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/expression/ExpressionAssert.java
index 4ff25da..54c5ec9 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/expression/ExpressionAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/expression/ExpressionAssert.java
@@ -19,21 +19,44 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExistsSubqueryExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.column.ColumnAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.projection.ProjectionAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dml.impl.SelectStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedBetweenExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedBinaryOperationExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedExistsSubquery;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedInExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedListExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedNotExpression;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.complex.ExpectedCommonExpression;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedLiteralExpression;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedParameterMarkerExpression;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedSubquery;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.SQLCaseType;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.ComplexExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
+
+import java.util.Iterator;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 
 /**
@@ -50,10 +73,14 @@ public final class ExpressionAssert {
      * @param expected expected parameter marker expression
      */
     public static void assertParameterMarkerExpression(final SQLCaseAssertContext assertContext,
-                                                        final ParameterMarkerExpressionSegment actual, final ExpectedParameterMarkerExpression expected) {
-        assertNotNull(assertContext.getText("Expected parameter marker expression should exist."), expected);
-        assertThat(assertContext.getText("Parameter marker index assertion error: "), actual.getParameterMarkerIndex(), is(expected.getValue()));
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+                                                       final ParameterMarkerExpressionSegment actual, final ExpectedParameterMarkerExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual parameter marker expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual parameter marker expression should exist."), actual);
+            assertThat(assertContext.getText("Parameter marker index assertion error: "), actual.getParameterMarkerIndex(), is(expected.getValue()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
     }
     
     /**
@@ -64,10 +91,14 @@ public final class ExpressionAssert {
      * @param expected expected literal expression
      */
     public static void assertLiteralExpression(final SQLCaseAssertContext assertContext,
-                                                final LiteralExpressionSegment actual, final ExpectedLiteralExpression expected) {
-        assertNotNull(assertContext.getText("Expected literal expression should exist."));
-        assertThat(assertContext.getText("Literal assertion error: "), actual.getLiterals().toString(), is(expected.getValue()));
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+                                               final LiteralExpressionSegment actual, final ExpectedLiteralExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual literal expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual literal expression should exist."), actual);
+            assertThat(assertContext.getText("Literal assertion error: "), actual.getLiterals().toString(), is(expected.getValue()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
     }
     
     /**
@@ -78,22 +109,224 @@ public final class ExpressionAssert {
      * @param expected expected common expression
      */
     public static void assertCommonExpression(final SQLCaseAssertContext assertContext,
-                                               final ComplexExpressionSegment actual, final ExpectedCommonExpression expected) {
-        assertNotNull(assertContext.getText("Expected common expression should exist."));
-        String expectedText = SQLCaseType.Literal == assertContext.getSqlCaseType() && null != expected.getLiteralText() ? expected.getLiteralText() : expected.getText();
-        assertThat(assertContext.getText("Common expression text assertion error: "), actual.getText(), is(expectedText));
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+                                              final ComplexExpressionSegment actual, final ExpectedCommonExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual common expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual common expression should exist."), actual);
+            String expectedText = SQLCaseType.Literal == assertContext.getSqlCaseType() && null != expected.getLiteralText() ? expected.getLiteralText() : expected.getText();
+            assertThat(assertContext.getText("Common expression text assertion error: "), actual.getText(), is(expectedText));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
     }
     
     /**
      * Assert subquery expression.
      *
      * @param assertContext assert context
+     * @param actual actual subquery expression segment
+     * @param expected expected subquery expression
+     */
+    public static void assertSubqueryExpression(final SQLCaseAssertContext assertContext,
+                                                final SubqueryExpressionSegment actual, final ExpectedSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual subquery expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual subquery expression should exist."), actual);
+            assertSubquery(assertContext, actual.getSubquery(), expected);
+        }
+    }
+
+    /**
+     * Assert subquery.
+     *
+     * @param assertContext assert context
      * @param actual actual subquery segment
      * @param expected expected subquery expression
      */
-    public static void assertSubqueryExpression(final SQLCaseAssertContext assertContext, final SubqueryExpressionSegment actual, final ExpectedSubquery expected) {
-        SelectStatementAssert.assertIs(assertContext, actual.getSubquery().getSelect(), expected.getSelectTestCases());
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    public static void assertSubquery(final SQLCaseAssertContext assertContext,
+                                      final SubquerySegment actual, final ExpectedSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual subquery should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual subquery should exist."), actual);
+            SelectStatementAssert.assertIs(assertContext, actual.getSelect(), expected.getSelectTestCases());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert exists subquery expression.
+     *
+     * @param assertContext assert context
+     * @param actual actual exists subquery expression
+     * @param expected expected exists subquery expression
+     */
+    public static void assertExistsSubqueryExpression(final SQLCaseAssertContext assertContext,
+                                                      final ExistsSubqueryExpression actual, final ExpectedExistsSubquery expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual exists subquery should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual exists subquery should exist."), actual);
+            assertSubquery(assertContext, actual.getSubquery(), expected.getSubquery());
+            assertThat(assertContext.getText("Exists subquery expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert binary operation expression.
+     * @param assertContext assert context
+     * @param actual actual binary operation expression
+     * @param expected expected binary operation expression
+     */
+    public static void assertBinaryOperationExpression(final SQLCaseAssertContext assertContext,
+                                                       final BinaryOperationExpression actual, final ExpectedBinaryOperationExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual binary operation expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual binary operation expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertThat(assertContext.getText("Binary operation expression operator assert error."),
+                    actual.getOperator(), is(expected.getOperator()));
+            assertExpression(assertContext, actual.getRight(), expected.getRight());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert in operation expression.
+     * @param assertContext assert context
+     * @param actual actual in operation expression
+     * @param expected expected in operation expression
+     */
+    public static void assertInExpression(final SQLCaseAssertContext assertContext,
+                                          final InExpression actual, final ExpectedInExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual in expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual in expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertThat(assertContext.getText("In expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            assertExpression(assertContext, actual.getRight(), expected.getRight());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert not operation expression.
+     * @param assertContext assert context
+     * @param actual actual not operation expression
+     * @param expected expected not operation expression
+     */
+    public static void assertNotExpression(final SQLCaseAssertContext assertContext,
+                                           final NotExpression actual, final ExpectedNotExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual not expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual not expression should exist."), actual);
+            assertExpression(assertContext, actual.getExpression(), expected.getExpr());
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert list operation expression.
+     * @param assertContext assert context
+     * @param actual actual list operation expression
+     * @param expected expected list operation expression
+     */
+    public static void assertListExpression(final SQLCaseAssertContext assertContext,
+                                            final ListExpression actual, final ExpectedListExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual list expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual list expression should exist."), actual);
+            assertThat(assertContext.getText("List expression item size assert error."),
+                    actual.getItems().size(), is(expected.getItems().size()));
+            Iterator<ExpressionSegment> actualItems = actual.getItems().iterator();
+            Iterator<ExpectedExpression> expectedItems = expected.getItems().iterator();
+            while (actualItems.hasNext()) {
+                assertExpression(assertContext, actualItems.next(), expectedItems.next());
+            }
+            //TODO PostgreSQL list expression start index was incorrect.
+//            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert between operation expression.
+     * @param assertContext assert context
+     * @param actual actual between operation expression
+     * @param expected expected between operation expression
+     */
+    public static void assertBetweenExpression(final SQLCaseAssertContext assertContext,
+                                               final BetweenExpression actual, final ExpectedBetweenExpression expected) {
+        if (null == expected) {
+            assertNull(assertContext.getText("Actual between expression should not exist."), actual);
+        } else {
+            assertNotNull(assertContext.getText("Actual between expression should exist."), actual);
+            assertExpression(assertContext, actual.getLeft(), expected.getLeft());
+            assertExpression(assertContext, actual.getBetweenExpr(), expected.getBetweenExpr());
+            assertExpression(assertContext, actual.getAndExpr(), expected.getAndExpr());
+            assertThat(assertContext.getText("Between expression not value assert error."),
+                    actual.isNot(), is(expected.isNot()));
+            SQLSegmentAssert.assertIs(assertContext, actual, expected);
+        }
+    }
+
+    /**
+     * Assert expression by actual expression segment class type.
+     * @param assertContext assert context
+     * @param actual actual expression segment
+     * @param expected expected expression
+     *
+     * @throws UnsupportedOperationException When expression segment class type is not supported.
+     */
+    public static void assertExpression(final SQLCaseAssertContext assertContext,
+                                        final ExpressionSegment actual, final ExpectedExpression expected) {
+        assertNotNull(assertContext.getText("Expected expression should exist."), expected);
+        if (actual instanceof BinaryOperationExpression) {
+            assertBinaryOperationExpression(assertContext,
+                    (BinaryOperationExpression) actual, expected.getBinaryOperationExpression());
+        } else if (actual instanceof SubqueryExpressionSegment) {
+            assertSubqueryExpression(assertContext,
+                    (SubqueryExpressionSegment) actual, expected.getSubquery());
+        } else if (actual instanceof ColumnSegment) {
+            ColumnAssert.assertIs(assertContext,
+                    (ColumnSegment) actual, expected.getColumn());
+        } else if (actual instanceof LiteralExpressionSegment) {
+            assertLiteralExpression(assertContext,
+                    (LiteralExpressionSegment) actual, expected.getLiteralExpression());
+        } else if (actual instanceof ParameterMarkerExpressionSegment) {
+            assertParameterMarkerExpression(assertContext,
+                    (ParameterMarkerExpressionSegment) actual, expected.getParameterMarkerExpression());
+        } else if (actual instanceof ExistsSubqueryExpression) {
+            assertExistsSubqueryExpression(assertContext,
+                    (ExistsSubqueryExpression) actual, expected.getExistsSubquery());
+        } else if (actual instanceof CommonExpressionSegment) {
+            assertCommonExpression(assertContext,
+                    (ComplexExpressionSegment) actual, expected.getCommonExpression());
+        } else if (actual instanceof InExpression) {
+            assertInExpression(assertContext,
+                    (InExpression) actual, expected.getInExpression());
+        } else if (actual instanceof NotExpression) {
+            assertNotExpression(assertContext,
+                    (NotExpression) actual, expected.getNotExpression());
+        } else if (actual instanceof ListExpression) {
+            assertListExpression(assertContext,
+                    (ListExpression) actual, expected.getListExpression());
+        } else if (actual instanceof BetweenExpression) {
+            assertBetweenExpression(assertContext,
+                    (BetweenExpression) actual, expected.getBetweenExpression());
+        } else if (actual instanceof ExpressionProjectionSegment) {
+            ProjectionAssert.assertProjection(assertContext,
+                    (ExpressionProjectionSegment) actual, expected.getExpressionProjection());
+        } else {
+            throw new UnsupportedOperationException(
+                    String.format("Unsupported expression  : %s.", actual.getClass().getName()));
+        }
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/index/IndexAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/index/IndexAssert.java
index c75000e..675152e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/index/IndexAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/index/IndexAssert.java
@@ -19,14 +19,13 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.index.ExpectedIndex;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
 
-import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
 
 /**
  * Index assert.
@@ -43,9 +42,7 @@ public final class IndexAssert {
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final IndexSegment actual, final ExpectedIndex expected) {
         assertNotNull(assertContext.getText("Index should exist."), expected);
-        assertThat(assertContext.getText("Index name assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Index name start delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Index name end delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Index");
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/orderby/OrderByItemAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/orderby/OrderByItemAssert.java
index 10b1510..3fccaa1 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/orderby/OrderByItemAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/orderby/OrderByItemAssert.java
@@ -21,7 +21,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.ExpectedOrderByClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.item.ExpectedOrderByItem;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.item.impl.ExpectedColumnOrderByItem;
@@ -31,8 +32,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.Co
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.ExpressionOrderByItemSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.IndexOrderByItemSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.OrderByItemSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 
 import java.util.Collection;
 
@@ -91,12 +90,10 @@ public final class OrderByItemAssert {
     
     private static void assertColumnOrderByItem(final SQLCaseAssertContext assertContext,
                                                 final ColumnOrderByItemSegment actual, final ExpectedColumnOrderByItem expected, final String type) {
-        assertThat(assertContext.getText(String.format("%s item column name assertion error: ", type)), actual.getColumn().getIdentifier().getValue(), is(expected.getName()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, String.format("%s item", type));
         if (null != expected.getOwner()) {
             assertTrue(assertContext.getText("Actual owner should exist."), actual.getColumn().getOwner().isPresent());
-            // TODO OwnerAssert is needed.
-            OwnerSegment owner = actual.getColumn().getOwner().get();
-            TableAssert.assertOwner(assertContext, new SimpleTableSegment(owner.getStartIndex(), owner.getStopIndex(), owner.getIdentifier()), expected.getOwner());
+            OwnerAssert.assertIs(assertContext, actual.getColumn().getOwner().get(), expected.getOwner());
         } else {
             assertFalse(assertContext.getText("Actual owner should not exist."), actual.getColumn().getOwner().isPresent());
         }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/output/OutputClauseAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/output/OutputClauseAssert.java
index 8018095..025a94c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/output/OutputClauseAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/output/OutputClauseAssert.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnPr
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OutputSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.output.ExpectedOutputClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.column.ExpectedColumnProjection;
 
@@ -69,8 +70,7 @@ public final class OutputClauseAssert {
     }
     
     private static void assertOutputColumnSegment(final SQLCaseAssertContext assertContext, final ColumnProjectionSegment actual, final ExpectedColumnProjection expected) { 
-        assertThat(assertContext.getText("Output column name assertion error: "), 
-                actual.getColumn().getIdentifier().getValue(), is(expected.getName()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, "Output column");
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/owner/OwnerAssert.java
similarity index 61%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/owner/OwnerAssert.java
index 5f1ca8b..0f74c67 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/owner/OwnerAssert.java
@@ -15,28 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.where;
+package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.owner;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate.ExpectedWhereClause;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedOwner;
 
 /**
- * Where clause assert.
+ * Owner assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class WhereClauseAssert {
+public final class OwnerAssert {
     
     /**
-     * Assert actual where segment is correct with expected where clause.
-     * 
+     * Assert actual owner segment is correct with expected owner.
+     *
      * @param assertContext assert context
-     * @param actual actual where segment
-     * @param expected expected where clause
+     * @param actual actual owner segment
+     * @param expected expected owner
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final WhereSegment actual, final ExpectedWhereClause expected) {
-//        TODO support expr in where assert
+    public static void assertIs(final SQLCaseAssertContext assertContext, final OwnerSegment actual, final ExpectedOwner expected) {
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Owner");
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/projection/ProjectionAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/projection/ProjectionAssert.java
index aca4381..c9cc51c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/projection/ProjectionAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/projection/ProjectionAssert.java
@@ -21,7 +21,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.owner.OwnerAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjections;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.aggregation.ExpectedAggregationDistinctProjection;
@@ -40,8 +41,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Shorthan
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.rownum.NumberLiteralRowNumberValueSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.rownum.ParameterMarkerRowNumberValueSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.top.TopProjectionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.SQLCaseType;
 
 import java.util.List;
 
@@ -79,8 +79,14 @@ public final class ProjectionAssert {
         assertThat(assertContext.getText("Projections distinct row assertion error: "), actual.isDistinctRow(), is(expected.isDistinctRow()));
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
-    
-    private static void assertProjection(final SQLCaseAssertContext assertContext, final ProjectionSegment actual, final ExpectedProjection expected) {
+
+    /**
+     * Assert actual projection segment is correct with expected projection.
+     * @param assertContext assert context
+     * @param actual actual projection
+     * @param expected expected projection
+     */
+    public static void assertProjection(final SQLCaseAssertContext assertContext, final ProjectionSegment actual, final ExpectedProjection expected) {
         if (actual instanceof ShorthandProjectionSegment) {
             assertThat(assertContext.getText("Projection type assertion error: "), expected, instanceOf(ExpectedShorthandProjection.class));
             assertShorthandProjection(assertContext, (ShorthandProjectionSegment) actual, (ExpectedShorthandProjection) expected);
@@ -103,25 +109,18 @@ public final class ProjectionAssert {
     private static void assertShorthandProjection(final SQLCaseAssertContext assertContext, final ShorthandProjectionSegment actual, final ExpectedShorthandProjection expected) {
         if (null != expected.getOwner()) {
             assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
-            OwnerSegment owner = actual.getOwner().get();
-            TableAssert.assertOwner(assertContext, new SimpleTableSegment(owner.getStartIndex(), owner.getStopIndex(), owner.getIdentifier()), expected.getOwner());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
         } else {
             assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
         }
     }
     
     private static void assertColumnProjection(final SQLCaseAssertContext assertContext, final ColumnProjectionSegment actual, final ExpectedColumnProjection expected) {
-        assertThat(assertContext.getText("Column projection name assertion error: "), actual.getColumn().getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Column projection start delimiter assertion error: "), 
-                actual.getColumn().getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Column projection end delimiter assertion error: "), 
-                actual.getColumn().getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getColumn().getIdentifier(), expected, "Column projection");
         assertThat(assertContext.getText("Column projection alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
         if (null != expected.getOwner()) {
             assertTrue(assertContext.getText("Actual owner should exist."), actual.getColumn().getOwner().isPresent());
-            // TODO OwnerAssert is needed.
-            OwnerSegment owner = actual.getColumn().getOwner().get();
-            TableAssert.assertOwner(assertContext, new SimpleTableSegment(owner.getStartIndex(), owner.getStopIndex(), owner.getIdentifier()), expected.getOwner());
+            OwnerAssert.assertIs(assertContext, actual.getColumn().getOwner().get(), expected.getOwner());
         } else {
             assertFalse(assertContext.getText("Actual owner should not exist."), actual.getColumn().getOwner().isPresent());
         }
@@ -139,7 +138,12 @@ public final class ProjectionAssert {
     }
     
     private static void assertExpressionProjection(final SQLCaseAssertContext assertContext, final ExpressionProjectionSegment actual, final ExpectedExpressionProjection expected) {
-        assertThat(assertContext.getText("Expression projection alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
+        assertThat(assertContext.getText("Expression projection alias assertion error: "),
+                actual.getAlias().orElse(null), is(expected.getAlias()));
+        String expectedText = SQLCaseType.Literal == assertContext.getSqlCaseType() && null != expected.getLiteralText()
+                ? expected.getLiteralText() : expected.getText();
+        assertThat(assertContext.getText("Expression projection text assertion error: "),
+                actual.getText(), is(expectedText));
     }
     
     private static void assertTopProjection(final SQLCaseAssertContext assertContext, final TopProjectionSegment actual, final ExpectedTopProjection expected) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java
index 0fb2727..e19b248 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java
@@ -22,11 +22,9 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.schema.ExpectedSchema;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 /**
  * Schema assert.
  */
@@ -41,9 +39,7 @@ public final class SchemaAssert {
      * @param expected expected schema
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final SchemaSegment actual, final ExpectedSchema expected) {
-        assertThat(assertContext.getText("Owner name assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Owner start delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Owner end delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getIdentifier(), expected, "Schema");
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
index 2f955ac..6af0c99 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
@@ -19,21 +19,19 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema.SchemaAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.owner.OwnerAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dml.impl.SelectStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value.IdentifierValueAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedJoinTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSubqueryTable;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
 
 import java.util.Collection;
 import java.util.List;
@@ -77,18 +75,14 @@ public final class TableAssert {
      * @param expected expected table
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final SimpleTableSegment actual, final ExpectedSimpleTable expected) {
-        assertThat(assertContext.getText("Table name assertion error: "), actual.getTableName().getIdentifier().getValue(), is(expected.getName()));
+        IdentifierValueAssert.assertIs(assertContext, actual.getTableName().getIdentifier(), expected, "Table");
         assertThat(assertContext.getText("Table alias assertion error: "), actual.getAlias().orElse(null), is(expected.getAlias()));
         if (null != expected.getOwner()) {
             assertTrue(assertContext.getText("Actual owner should exist."), actual.getOwner().isPresent());
-            // TODO OwnerAssert is necessary.
-            OwnerSegment owner = actual.getOwner().get();
-            SchemaAssert.assertIs(assertContext, new SchemaSegment(owner.getStartIndex(), owner.getStopIndex(), owner.getIdentifier()), expected.getOwner());
+            OwnerAssert.assertIs(assertContext, actual.getOwner().get(), expected.getOwner());
         } else {
             assertFalse(assertContext.getText("Actual owner should not exist."), actual.getOwner().isPresent());
         }
-        assertThat(assertContext.getText("Table start delimiter assertion error: "), actual.getTableName().getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Table end delimiter assertion error: "), actual.getTableName().getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
         SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 
@@ -147,19 +141,4 @@ public final class TableAssert {
         }
     }
 
-    /**
-     * Assert actual table segment is correct with expected table owner.
-     *
-     * @param assertContext assert context
-     * @param actual actual table segment
-     * @param expected expected table owner
-     */
-    public static void assertOwner(final SQLCaseAssertContext assertContext, final SimpleTableSegment actual, final ExpectedSimpleTableOwner expected) {
-        assertThat(assertContext.getText("Owner name assertion error: "), actual.getTableName().getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Owner name start delimiter assertion error: "),
-                actual.getTableName().getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Owner name end delimiter assertion error: "), actual.getTableName().getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
-    }
-
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java
index 5f1ca8b..b92dec0 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/where/WhereClauseAssert.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.expression.ExpressionAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate.ExpectedWhereClause;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 
@@ -37,6 +39,7 @@ public final class WhereClauseAssert {
      * @param expected expected where clause
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final WhereSegment actual, final ExpectedWhereClause expected) {
-//        TODO support expr in where assert
+        ExpressionAssert.assertExpression(assertContext, actual.getExpr(), expected.getExpr());
+        SQLSegmentAssert.assertIs(assertContext, actual, expected);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
index 38a9a62..97dac9d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/SelectStatementAssert.java
@@ -60,7 +60,6 @@ public final class SelectStatementAssert {
         assertLimitClause(assertContext, actual, expected);
         assertTable(assertContext, actual, expected);
         assertLockClause(assertContext, actual, expected);
-//        TODO support table assert
     }
     
     private static void assertProjection(final SQLCaseAssertContext assertContext, final SelectStatement actual, final SelectStatementTestCase expected) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/UpdateStatementAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/UpdateStatementAssert.java
index 52aa76a..33b9055 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/UpdateStatementAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dml/impl/UpdateStatementAssert.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.S
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.limit.LimitClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.orderby.OrderByClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.set.SetClauseAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.where.WhereClauseAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dml.UpdateStatementTestCase;
 
@@ -58,7 +59,11 @@ public final class UpdateStatementAssert {
     }
     
     private static void assertTable(final SQLCaseAssertContext assertContext, final UpdateStatement actual, final UpdateStatementTestCase expected) {
-//        TODO to support table assert
+        if (null != expected.getTable()) {
+            TableAssert.assertIs(assertContext, actual.getTableSegment(), expected.getTable());
+        } else {
+            assertFalse(assertContext.getText("Actual from should not exist."), null != actual.getTableSegment());
+        }
     }
     
     private static void assertSetClause(final SQLCaseAssertContext assertContext, final UpdateStatement actual, final UpdateStatementTestCase expected) {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/value/IdentifierValueAssert.java
similarity index 54%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/value/IdentifierValueAssert.java
index 0fb2727..6dfda04 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/schema/SchemaAssert.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/value/IdentifierValueAssert.java
@@ -15,35 +15,38 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.schema;
+package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.value;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.SQLSegmentAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.schema.ExpectedSchema;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.ExpectedIdentifierSQLSegment;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
 /**
- * Schema assert.
+ * Identifier value assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SchemaAssert {
+public final class IdentifierValueAssert {
     
     /**
-     * Assert actual schema segment is correct with expected schema.
+     * Assert actual identifier value is correct with expected identifier.
      *
      * @param assertContext assert context
-     * @param actual actual schema segment
-     * @param expected expected schema
+     * @param actual actual identifier value
+     * @param expected expected identifier
+     * @param type assert identifier value type
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final SchemaSegment actual, final ExpectedSchema expected) {
-        assertThat(assertContext.getText("Owner name assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
-        assertThat(assertContext.getText("Owner start delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
-        assertThat(assertContext.getText("Owner end delimiter assertion error: "), actual.getIdentifier().getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
-        SQLSegmentAssert.assertIs(assertContext, actual, expected);
+    public static void assertIs(final SQLCaseAssertContext assertContext, final IdentifierValue actual,
+                                final ExpectedIdentifierSQLSegment expected, final String type) {
+        assertThat(assertContext.getText(String.format("%s name assertion error: ", type)),
+                actual.getValue(), is(expected.getName()));
+        assertThat(assertContext.getText(String.format("%s start delimiter assertion error: ", type)),
+                actual.getQuoteCharacter().getStartDelimiter(), is(expected.getStartDelimiter()));
+        assertThat(assertContext.getText(String.format("%s end delimiter assertion error: ", type)),
+                actual.getQuoteCharacter().getEndDelimiter(), is(expected.getEndDelimiter()));
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedDelimiterSQLSegment.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedDelimiterSQLSegment.java
index d005d831..9e242e8 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedDelimiterSQLSegment.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedDelimiterSQLSegment.java
@@ -28,7 +28,7 @@ import javax.xml.bind.annotation.XmlAttribute;
 @Getter
 @Setter
 public abstract class AbstractExpectedDelimiterSQLSegment extends AbstractExpectedSQLSegment implements ExpectedDelimiterSQLSegment {
-    
+
     @XmlAttribute(name = "start-delimiter")
     private String startDelimiter = "";
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedIdentifierSQLSegment.java
similarity index 79%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedIdentifierSQLSegment.java
index 4a3d5f8..01bd0b6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/AbstractExpectedIdentifierSQLSegment.java
@@ -15,21 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.index;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment;
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
 
 import javax.xml.bind.annotation.XmlAttribute;
 
 /**
- * Expected index.
+ * Abstract expected delimiter SQL segment.
  */
 @Getter
 @Setter
-public final class ExpectedIndex extends AbstractExpectedDelimiterSQLSegment {
-    
+public abstract class AbstractExpectedIdentifierSQLSegment extends AbstractExpectedDelimiterSQLSegment implements ExpectedIdentifierSQLSegment {
+
     @XmlAttribute
     private String name;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/ExpectedIdentifierSQLSegment.java
similarity index 68%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/ExpectedIdentifierSQLSegment.java
index 4a3d5f8..c0b780a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/ExpectedIdentifierSQLSegment.java
@@ -15,21 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.index;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-
-import javax.xml.bind.annotation.XmlAttribute;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment;
 
 /**
- * Expected index.
+ * Expected Identifier SQL segment.
  */
-@Getter
-@Setter
-public final class ExpectedIndex extends AbstractExpectedDelimiterSQLSegment {
+public interface ExpectedIdentifierSQLSegment extends ExpectedDelimiterSQLSegment {
     
-    @XmlAttribute
-    private String name;
+    /**
+     * Get name.
+     *
+     * @return name
+     */
+    String getName();
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/column/ExpectedColumn.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/column/ExpectedColumn.java
index 29aca96..240c7f4 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/column/ExpectedColumn.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/column/ExpectedColumn.java
@@ -19,10 +19,10 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedExpressionSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedOwner;
 
-import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
@@ -30,11 +30,8 @@ import javax.xml.bind.annotation.XmlElement;
  */
 @Getter
 @Setter
-public final class ExpectedColumn extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedColumn extends AbstractExpectedIdentifierSQLSegment implements ExpectedExpressionSegment {
     
     @XmlElement
-    private ExpectedSimpleTableOwner owner;
+    private ExpectedOwner owner;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBetweenExpression.java
similarity index 70%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBetweenExpression.java
index abd08dc..84c0498 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBetweenExpression.java
@@ -15,26 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
 
-/**
- * Expected where clause.
- */
-@Getter
 @Setter
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class ExpectedWhereClause extends AbstractExpectedSQLSegment {
-    
-    @XmlElement(name = "and-predicate")
-    private final List<ExpectedAndPredicate> andPredicates = new LinkedList<>();
+@Getter
+public class ExpectedBetweenExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+    @XmlElement(name = "not")
+    private boolean not;
+
+    @XmlElement(name = "left")
+    private ExpectedExpression left;
+
+    @XmlElement(name = "between-expr")
+    private ExpectedExpression betweenExpr;
+
+    @XmlElement(name = "and-expr")
+    private ExpectedExpression andExpr;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBinaryOperationExpression.java
similarity index 72%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBinaryOperationExpression.java
index 72a3ee5..b83cfb5 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedBinaryOperationExpression.java
@@ -15,19 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.expression;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 
-@Getter
 @Setter
-public final class ExpectedExpressionProjection extends AbstractExpectedSQLSegment implements ExpectedProjection {
-    
-    @XmlAttribute
-    private String alias;
+@Getter
+public class ExpectedBinaryOperationExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+    @XmlElement(name = "left")
+    private ExpectedExpression left;
+
+    @XmlElement(name = "operator")
+    private String operator;
+
+    @XmlElement(name = "right")
+    private ExpectedExpression right;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExistsSubquery.java
similarity index 74%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExistsSubquery.java
index 72a3ee5..6af059b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExistsSubquery.java
@@ -15,19 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.expression;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedSubquery;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 
-@Getter
 @Setter
-public final class ExpectedExpressionProjection extends AbstractExpectedSQLSegment implements ExpectedProjection {
-    
-    @XmlAttribute
-    private String alias;
+@Getter
+public class ExpectedExistsSubquery extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+    @XmlElement(name = "not")
+    private boolean not;
+
+    @XmlElement(name = "subquery")
+    private ExpectedSubquery subquery;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExpression.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExpression.java
new file mode 100644
index 0000000..702c728
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedExpression.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.column.ExpectedColumn;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.complex.ExpectedCommonExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedLiteralExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedParameterMarkerExpression;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.simple.ExpectedSubquery;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.expression.ExpectedExpressionProjection;
+
+import javax.xml.bind.annotation.XmlElement;
+
+@Getter
+@Setter
+public class ExpectedExpression extends AbstractExpectedSQLSegment {
+
+    @XmlElement(name = "between-expression")
+    private ExpectedBetweenExpression betweenExpression;
+
+    @XmlElement(name = "binary-operation-expression")
+    private ExpectedBinaryOperationExpression binaryOperationExpression;
+
+    @XmlElement(name = "column")
+    private ExpectedColumn column;
+
+    @XmlElement(name = "common-expression")
+    private ExpectedCommonExpression commonExpression;
+
+    @XmlElement(name = "exists-subquery")
+    private ExpectedExistsSubquery existsSubquery;
+
+    @XmlElement(name = "expression-projection")
+    private ExpectedExpressionProjection expressionProjection;
+
+    @XmlElement(name = "in-expression")
+    private ExpectedInExpression inExpression;
+
+    @XmlElement(name = "list-expression")
+    private ExpectedListExpression listExpression;
+
+    @XmlElement(name = "literal-expression")
+    private ExpectedLiteralExpression literalExpression;
+
+    @XmlElement(name = "not-expression")
+    private ExpectedNotExpression notExpression;
+
+    @XmlElement(name = "parameter-marker-expression")
+    private ExpectedParameterMarkerExpression parameterMarkerExpression;
+
+    @XmlElement(name = "subquery")
+    private ExpectedSubquery subquery;
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedInExpression.java
similarity index 72%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedInExpression.java
index 72a3ee5..f0e840a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedInExpression.java
@@ -15,19 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.impl.expression;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 
-@Getter
 @Setter
-public final class ExpectedExpressionProjection extends AbstractExpectedSQLSegment implements ExpectedProjection {
-    
-    @XmlAttribute
-    private String alias;
+@Getter
+public class ExpectedInExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+    @XmlElement(name = "not")
+    private boolean not;
+
+    @XmlElement(name = "left")
+    private ExpectedExpression left;
+
+    @XmlElement(name = "right")
+    private ExpectedExpression right;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedListExpression.java
similarity index 73%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedListExpression.java
index abd08dc..2660ddf 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedListExpression.java
@@ -15,26 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
 
-/**
- * Expected where clause.
- */
-@Getter
 @Setter
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class ExpectedWhereClause extends AbstractExpectedSQLSegment {
-    
-    @XmlElement(name = "and-predicate")
-    private final List<ExpectedAndPredicate> andPredicates = new LinkedList<>();
+@Getter
+public class ExpectedListExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+
+    @XmlElement(name = "items")
+    private List<ExpectedExpression> items = new LinkedList<>();
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedNotExpression.java
similarity index 76%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedNotExpression.java
index 4a3d5f8..a1291f7 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/expr/ExpectedNotExpression.java
@@ -15,21 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.index;
+package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr;
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
 
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 
-/**
- * Expected index.
- */
-@Getter
 @Setter
-public final class ExpectedIndex extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+@Getter
+public class ExpectedNotExpression extends AbstractExpectedSQLSegment implements ExpectedExpressionSegment {
+
+    @XmlElement(name = "expr")
+    private ExpectedExpression expr;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
index 4a3d5f8..1bcce17 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/index/ExpectedIndex.java
@@ -19,17 +19,12 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-
-import javax.xml.bind.annotation.XmlAttribute;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
 
 /**
  * Expected index.
  */
 @Getter
 @Setter
-public final class ExpectedIndex extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedIndex extends AbstractExpectedIdentifierSQLSegment {
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/orderby/item/impl/ExpectedColumnOrderByItem.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/orderby/item/impl/ExpectedColumnOrderByItem.java
index 2a141d5..a8bacf6 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/orderby/item/impl/ExpectedColumnOrderByItem.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/orderby/item/impl/ExpectedColumnOrderByItem.java
@@ -19,8 +19,9 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.ExpectedIdentifierSQLSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.item.ExpectedOrderByItem;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedOwner;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
@@ -30,11 +31,11 @@ import javax.xml.bind.annotation.XmlElement;
  */
 @Getter
 @Setter
-public final class ExpectedColumnOrderByItem extends ExpectedOrderByItem {
+public final class ExpectedColumnOrderByItem extends ExpectedOrderByItem implements ExpectedIdentifierSQLSegment {
     
     @XmlAttribute
     private String name;
     
     @XmlElement
-    private ExpectedSimpleTableOwner owner;
+    private ExpectedOwner owner;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
index abd08dc..531a317 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/predicate/ExpectedWhereClause.java
@@ -20,12 +20,11 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedExpression;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Expected where clause.
@@ -34,7 +33,7 @@ import java.util.List;
 @Setter
 @XmlAccessorType(XmlAccessType.FIELD)
 public final class ExpectedWhereClause extends AbstractExpectedSQLSegment {
-    
-    @XmlElement(name = "and-predicate")
-    private final List<ExpectedAndPredicate> andPredicates = new LinkedList<>();
+
+    @XmlElement(name = "expr")
+    private ExpectedExpression expr;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/column/ExpectedColumnProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/column/ExpectedColumnProjection.java
index 1ec7cb9..1bcf4ae 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/column/ExpectedColumnProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/column/ExpectedColumnProjection.java
@@ -19,23 +19,20 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedOwner;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 @Getter
 @Setter
-public final class ExpectedColumnProjection extends AbstractExpectedDelimiterSQLSegment implements ExpectedProjection {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedColumnProjection extends AbstractExpectedIdentifierSQLSegment implements ExpectedProjection {
     
     @XmlAttribute
     private String alias;
     
     @XmlElement
-    private ExpectedSimpleTableOwner owner;
+    private ExpectedOwner owner;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
index 72a3ee5..1287aef 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/expression/ExpectedExpressionProjection.java
@@ -20,14 +20,21 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.complex.ExpectedComplexExpressionSegment;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
 
 import javax.xml.bind.annotation.XmlAttribute;
 
 @Getter
 @Setter
-public final class ExpectedExpressionProjection extends AbstractExpectedSQLSegment implements ExpectedProjection {
-    
-    @XmlAttribute
+public final class ExpectedExpressionProjection extends AbstractExpectedSQLSegment implements ExpectedProjection, ExpectedComplexExpressionSegment {
+
+    @XmlAttribute(name = "text")
+    private String text;
+
+    @XmlAttribute(name = "literal-text")
+    private String literalText;
+
+    @XmlAttribute(name = "alias")
     private String alias;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/shorthand/ExpectedShorthandProjection.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/shorthand/ExpectedShorthandProjection.java
index ebf0fb9..6038ce3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/shorthand/ExpectedShorthandProjection.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/projection/impl/shorthand/ExpectedShorthandProjection.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTableOwner;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedOwner;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.projection.ExpectedProjection;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -30,5 +30,5 @@ import javax.xml.bind.annotation.XmlElement;
 public final class ExpectedShorthandProjection extends AbstractExpectedSQLSegment implements ExpectedProjection {
     
     @XmlElement
-    private ExpectedSimpleTableOwner owner;
+    private ExpectedOwner owner;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/schema/ExpectedSchema.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/schema/ExpectedSchema.java
index f130124..39ccc0b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/schema/ExpectedSchema.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/schema/ExpectedSchema.java
@@ -19,17 +19,12 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-
-import javax.xml.bind.annotation.XmlAttribute;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
 
 /**
  * Expected schema.
  */
 @Getter
 @Setter
-public final class ExpectedSchema extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedSchema extends AbstractExpectedIdentifierSQLSegment {
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTableOwner.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedOwner.java
similarity index 78%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTableOwner.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedOwner.java
index 385a51e..c2ae36a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTableOwner.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedOwner.java
@@ -19,17 +19,12 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-
-import javax.xml.bind.annotation.XmlAttribute;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
 
 /**
- * Expected simple table owner.
+ * Expected owner.
  */
 @Getter
 @Setter
-public final class ExpectedSimpleTableOwner extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedOwner extends AbstractExpectedIdentifierSQLSegment {
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTable.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTable.java
index 43edb7f..8418201 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTable.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedSimpleTable.java
@@ -19,8 +19,7 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedDelimiterSQLSegment;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.schema.ExpectedSchema;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.AbstractExpectedIdentifierSQLSegment;
 
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
@@ -30,14 +29,11 @@ import javax.xml.bind.annotation.XmlElement;
  */
 @Getter
 @Setter
-public final class ExpectedSimpleTable extends AbstractExpectedDelimiterSQLSegment {
-    
-    @XmlAttribute
-    private String name;
+public final class ExpectedSimpleTable extends AbstractExpectedIdentifierSQLSegment {
     
     @XmlAttribute
     private String alias;
     
     @XmlElement
-    private ExpectedSchema owner;
+    private ExpectedOwner owner;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/UpdateStatementTestCase.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/UpdateStatementTestCase.java
index 77e1be6..2818b9c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/UpdateStatementTestCase.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dml/UpdateStatementTestCase.java
@@ -23,12 +23,10 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.orderby.ExpectedOrderByClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.predicate.ExpectedWhereClause;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.set.ExpectedSetClause;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 import javax.xml.bind.annotation.XmlElement;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Update statement test case.
@@ -38,7 +36,7 @@ import java.util.List;
 public final class UpdateStatementTestCase extends SQLParserTestCase {
     
     @XmlElement(name = "table")
-    private final List<ExpectedSimpleTable> tables = new LinkedList<>();
+    private ExpectedTable table;
     
     @XmlElement(name = "set")
     private ExpectedSetClause setClause;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/sql/loader/SQLCasesLoader.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/sql/loader/SQLCasesLoader.java
index 3dfc8e5..4cf5ab1 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/sql/loader/SQLCasesLoader.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/sql/loader/SQLCasesLoader.java
@@ -39,6 +39,8 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * SQL test cases loader.
@@ -110,14 +112,14 @@ public final class SQLCasesLoader {
     }
     
     private String getPlaceholderSQL(final String sql) {
-        return sql.replace("%%", "%").replace("'%'", "'%%'");
+        return sql;
     }
     
     private String getLiteralSQL(final String sql, final List<?> parameters) {
         if (null == parameters || parameters.isEmpty()) {
             return sql;
         }
-        return String.format(sql.replace("%", "$").replace("?", "%s"), parameters.toArray()).replace("$", "%").replace("%%", "%").replace("'%'", "'%%'");
+        return replace(sql, "?", parameters.toArray());
     }
     
     /**
@@ -163,6 +165,35 @@ public final class SQLCasesLoader {
     private static Collection<String> getAllDatabaseTypes() {
         return Arrays.asList("H2", "MySQL", "PostgreSQL", "Oracle", "SQLServer", "SQL92");
     }
+
+    /**
+     * Replaces each substring of this string that matches the literal target sequence with
+     * literal replacements one by one.
+     *
+     * @param source The source string need to be replaced
+     * @param target The sequence of char values to be replaced
+     * @param replacements Array of replacement
+     * @return  The resulting string
+     * @throws IllegalArgumentException When replacements is not enough to replace found target.
+     */
+    private static String replace(final String source, final CharSequence target, final Object... replacements) {
+        if (null == source || null == replacements) {
+            return source;
+        }
+        Matcher matcher = Pattern.compile(target.toString(), Pattern.LITERAL).matcher(source);
+        int found = 0;
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            found++;
+            if (found > replacements.length) {
+                throw new IllegalArgumentException(
+                        String.format("Missing replacement for '%s' at [%s].", target, found));
+            }
+            matcher.appendReplacement(sb, Matcher.quoteReplacement(replacements[found - 1].toString()));
+        }
+        matcher.appendTail(sb);
+        return sb.toString();
+    }
     
     /**
      * Get all SQL case IDs.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
index 3903444..dc4bb16 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/delete.xml
@@ -20,141 +20,191 @@
     <delete sql-case-id="delete_with_sharding_value" parameters="1000, 1001, 'init'">
         <table name="t_order" start-index="12" stop-index="18" />
         <where start-index="20" stop-index="66" literal-stop-index="77">
-            <and-predicate>
-                <predicate start-index="26" stop-index="37" literal-stop-index="40">
-                    <column-left-value name="order_id" start-index="26" stop-index="33" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
-                        <literal-expression value="1000" start-index="37" stop-index="40" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="43" stop-index="53" literal-start-index="46" literal-stop-index="59">
-                    <column-left-value name="user_id" start-index="43" stop-index="49" literal-start-index="46" literal-stop-index="52" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="53" stop-index="53" />
-                        <literal-expression value="1001" start-index="56" stop-index="59" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="59" stop-index="66" literal-start-index="65" literal-stop-index="77">
-                    <column-left-value name="status" start-index="59" stop-index="64" literal-start-index="65" literal-stop-index="70" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="66" stop-index="66" />
-                        <literal-expression value="init" start-index="72" stop-index="77" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="26" stop-index="66" literal-stop-index="77">
+                    <left>
+                        <binary-operation-expression start-index="26" stop-index="53" literal-stop-index="59">
+                            <left>
+                                <binary-operation-expression start-index="26" stop-index="37" literal-stop-index="40">
+                                    <left>
+                                        <column name="order_id" start-index="26" stop-index="33" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1000" start-index="37" stop-index="40" />
+                                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <binary-operation-expression start-index="43" stop-index="53" literal-start-index="46" literal-stop-index="59">
+                                    <left>
+                                        <column name="user_id" start-index="43" stop-index="49" literal-start-index="46" literal-stop-index="52" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1001" start-index="56" stop-index="59" />
+                                        <parameter-marker-expression value="1" start-index="53" stop-index="53" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="59" stop-index="66" literal-start-index="65" literal-stop-index="77">
+                            <left>
+                                <column name="status" start-index="59" stop-index="64" literal-start-index="65" literal-stop-index="70" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="72" stop-index="77" />
+                                <parameter-marker-expression value="2" start-index="66" stop-index="66" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_without_sharding_value" parameters="'init'">
         <table name="t_order" start-index="12" stop-index="18" />
         <where start-index="20" stop-index="33" literal-stop-index="38">
-            <and-predicate>
-                <predicate start-index="26" stop-index="33" literal-stop-index="38">
-                    <column-left-value name="status" start-index="26" stop-index="31" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="33" stop-index="33" />
+            <expr>
+                <binary-operation-expression start-index="26" stop-index="33" literal-stop-index="38">
+                    <left>
+                        <column name="status" start-index="26" stop-index="31" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="init" start-index="33" stop-index="38" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="33" stop-index="33" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_special_character_without_sharding_value">
         <table name="t_order" start-delimiter="`" end-delimiter="`" start-index="12" stop-index="20" />
         <where start-index="22" stop-index="42">
-            <and-predicate>
-                <predicate start-index="28" stop-index="42">
-                    <column-left-value name="status" start-delimiter="`" end-delimiter="`" start-index="28" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <literal-expression value="init" start-index="37" stop-index="42"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="42">
+                    <left>
+                        <column name="status" start-delimiter="`" end-delimiter="`" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="init" start-index="37" stop-index="42" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_special_comments_return_without_sharding_value">
         <table name="t_order" start-index="33" stop-index="39" />
         <where start-index="41" stop-index="54">
-            <and-predicate>
-                <predicate start-index="47" stop-index="54">
-                    <column-left-value name="status" start-index="47" stop-index="52" />
-                    <operator type="=" />
-                    <compare-right-value>
+            <expr>
+                <binary-operation-expression start-index="47" stop-index="54">
+                    <left>
+                        <column name="status" start-index="47" stop-index="52" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1" start-index="54" stop-index="54" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_special_comments_returning_without_sharding_value">
         <table name="t_order" start-index="34" stop-index="40" />
         <where start-index="43" stop-index="56">
-            <and-predicate>
-                <predicate start-index="49" stop-index="56">
-                    <column-left-value name="status" start-index="49" stop-index="54" />
-                    <operator type="=" />
-                    <compare-right-value>
+            <expr>
+                <binary-operation-expression start-index="49" stop-index="56">
+                    <left>
+                        <column name="status" start-index="49" stop-index="54" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1" start-index="56" stop-index="56" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_alias" parameters="'init'">
         <table name="t_order" alias="o" start-index="12" stop-index="23" />
-        <where start-index="25" stop-index="38" literal-stop-index="44">
-            <and-predicate>
-                <predicate start-index="31" stop-index="38" literal-stop-index="43">
-                    <column-left-value name="status" start-index="31" stop-index="36" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="38" stop-index="38" />
+        <where start-index="25" stop-index="38" literal-stop-index="43">
+            <expr>
+                <binary-operation-expression start-index="31" stop-index="38" literal-stop-index="43">
+                    <left>
+                        <column name="status" start-index="31" stop-index="36" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="init" start-index="38" stop-index="43" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="38" stop-index="38" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_order_by_row_count" parameters="1000, 1001, 'init', 10">
         <table name="t_order" start-index="12" stop-index="18" />
         <where start-index="20" stop-index="66" literal-stop-index="77">
-            <and-predicate>
-                <predicate start-index="26" stop-index="37" literal-stop-index="40">
-                    <column-left-value name="order_id" start-index="26" stop-index="33" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
-                        <literal-expression value="1000" start-index="37" stop-index="40" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="43" stop-index="53" literal-start-index="46" literal-stop-index="59">
-                    <column-left-value name="user_id" start-index="43" stop-index="49" literal-start-index="46" literal-stop-index="52" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="53" stop-index="53" />
-                        <literal-expression value="1001" start-index="56" stop-index="59" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="59" stop-index="66" literal-start-index="65" literal-stop-index="77">
-                    <column-left-value name="status" start-index="59" stop-index="64" literal-start-index="65" literal-stop-index="70" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="66" stop-index="66" />
-                        <literal-expression value="init" start-index="72" stop-index="77" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="26" stop-index="66" literal-stop-index="77">
+                    <left>
+                        <binary-operation-expression start-index="26" stop-index="53" literal-stop-index="59">
+                            <left>
+                                <binary-operation-expression start-index="26" stop-index="37" literal-stop-index="40">
+                                    <left>
+                                        <column name="order_id" start-index="26" stop-index="33" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1000" start-index="37" stop-index="40" />
+                                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <binary-operation-expression start-index="43" stop-index="53" literal-start-index="46" literal-stop-index="59">
+                                    <left>
+                                        <column name="user_id" start-index="43" stop-index="49" literal-start-index="46" literal-stop-index="52" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1001" start-index="56" stop-index="59" />
+                                        <parameter-marker-expression value="1" start-index="53" stop-index="53" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="59" stop-index="66" literal-start-index="65" literal-stop-index="77">
+                            <left>
+                                <column name="status" start-index="59" stop-index="64" literal-start-index="65" literal-stop-index="70" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="72" stop-index="77" />
+                                <parameter-marker-expression value="2" start-index="66" stop-index="66" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="order_id" start-index="77" stop-index="84" literal-start-index="88" literal-stop-index="95" />
@@ -182,16 +232,18 @@
             </output-table-columns>
         </output>
         <where start-index="108" stop-index="125" literal-stop-index="128">
-            <and-predicate>
-                <predicate start-index="114" stop-index="125" literal-stop-index="128">
-                    <column-left-value name="order_id" start-index="114" stop-index="121" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
+            <expr>
+                <binary-operation-expression start-index="114" stop-index="125" literal-stop-index="128">
+                    <left>
+                        <column name="order_id" start-index="114" stop-index="121" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="125" stop-index="128" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
@@ -209,16 +261,18 @@
             <output-table name="@MyTableVar" start-index="66" stop-index="76"/>
         </output>
         <where start-index="78" stop-index="95" literal-stop-index="98">
-            <and-predicate>
-                <predicate start-index="84" stop-index="95" literal-stop-index="98">
-                    <column-left-value name="order_id" start-index="84" stop-index="91" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="95" stop-index="95" />
+            <expr>
+                <binary-operation-expression start-index="84" stop-index="95" literal-stop-index="98">
+                    <left>
+                        <column name="order_id" start-index="84" stop-index="91" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="95" stop-index="98" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="95" stop-index="95" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
@@ -235,16 +289,18 @@
             </output-columns>
         </output>
         <where start-index="61" stop-index="78" literal-stop-index="81">
-            <and-predicate>
-                <predicate start-index="67" stop-index="74" literal-stop-index="81">
-                    <column-left-value name="order_id" start-index="67" stop-index="74" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="78" stop-index="78" />
+            <expr>
+                <binary-operation-expression start-index="67" stop-index="78" literal-stop-index="81">
+                    <left>
+                        <column name="order_id" start-index="67" stop-index="74" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="78" stop-index="81" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="78" stop-index="78" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
@@ -252,48 +308,54 @@
         <table name="t_order" start-index="12" stop-index="18" />
         <output start-index="20" stop-index="35"/>
         <where start-index="37" stop-index="54" literal-stop-index="57">
-            <and-predicate>
-                <predicate start-index="43" stop-index="50" literal-stop-index="54">
-                    <column-left-value name="order_id" start-index="43" stop-index="50" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="54" stop-index="54" />
+            <expr>
+                <binary-operation-expression start-index="43" stop-index="54" literal-stop-index="57">
+                    <left>
+                        <column name="order_id" start-index="43" stop-index="50" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="54" stop-index="57" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="54" stop-index="54" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_top" parameters="1000">
         <table name="t_order" start-index="20" stop-index="26" />
         <where start-index="28" stop-index="45" literal-stop-index="48">
-            <and-predicate>
-                <predicate start-index="34" stop-index="45" literal-stop-index="48">
-                    <column-left-value name="order_id" start-index="34" stop-index="41" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="45" stop-index="45" />
+            <expr>
+                <binary-operation-expression start-index="34" stop-index="45" literal-stop-index="48">
+                    <left>
+                        <column name="order_id" start-index="34" stop-index="41" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="45" stop-index="48" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="45" stop-index="45" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_with_top_percent" parameters="1000">
         <table name="t_order" start-index="28" stop-index="34" />
         <where start-index="36" stop-index="53" literal-stop-index="56">
-            <and-predicate>
-                <predicate start-index="42" stop-index="53" literal-stop-index="56">
-                    <column-left-value name="order_id" start-index="42" stop-index="49" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="53" stop-index="53" />
+            <expr>
+                <binary-operation-expression start-index="42" stop-index="53" literal-stop-index="56">
+                    <left>
+                        <column name="order_id" start-index="42" stop-index="49" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="53" stop-index="56" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="53" stop-index="53" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
@@ -319,13 +381,21 @@
         </with>
         <table name="t_order" start-index="79" stop-index="85" />
         <where start-index="96" stop-index="132">
-            <and-predicate>
-                <predicate start-index="96" stop-index="132">
-                    <column-left-value owner="t_order" name="order_id" start-index="110" stop-index="117" />
-                    <operator type="=" />
-                    <column-right-value owner="cte" name="order_id" start-index="125" stop-index="132" />
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="102" stop-index="132">
+                    <left>
+                        <column name="order_id" start-index="102" stop-index="117">
+                            <owner name="t_order" start-index="102" stop-index="108" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <column name="order_id" start-index="121" stop-index="132">
+                            <owner name="cte" start-index="121" stop-index="123" />
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
@@ -347,39 +417,60 @@
         </with>
         <table name="t_order" start-index="59" stop-index="65" />
         <where start-index="76" stop-index="112">
-            <and-predicate>
-                <predicate start-index="82" stop-index="112">
-                    <column-left-value owner="t_order" name="order_id" start-index="90" stop-index="97" />
-                    <operator type="=" />
-                    <column-right-value owner="cte" name="order_id" start-index="105" stop-index="112" />
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="82" stop-index="112">
+                    <left>
+                        <column name="order_id" start-index="82" stop-index="97">
+                            <owner name="t_order" start-index="82" stop-index="88" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <column name="order_id" start-index="101" stop-index="112">
+                            <owner name="cte" start-index="101" stop-index="103" />
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 
     <delete sql-case-id="delete_multi_tables" parameters="1">
         <where start-index="56" stop-index="124">
-            <and-predicate>
-                <predicate start-index="62" stop-index="101">
-                    <column-left-value name="order_id" start-index="62" stop-index="77">
-                        <owner name="t_order" start-index="62" stop-index="68"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <column-right-value name="order_id" start-index="62" stop-index="77">
-                        <owner name="t_order" start-index="62" stop-index="68"/>
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="107" stop-index="124">
-                    <column-left-value name="status" start-index="107" stop-index="120">
-                        <owner name="t_order" start-index="107" stop-index="113"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="124" stop-index="124"/>
-                        <literal-expression value="1" start-index="124" stop-index="124"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="62" stop-index="124">
+                    <left>
+                        <binary-operation-expression start-index="62" stop-index="101">
+                            <left>
+                                <column name="order_id" start-index="62" stop-index="77">
+                                    <owner name="t_order" start-index="62" stop-index="68" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="81" stop-index="101">
+                                    <owner name="t_order_item" start-index="81" stop-index="92" />
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>and</operator>
+                    <right>
+                        <binary-operation-expression start-index="107" stop-index="124">
+                            <left>
+                                <column name="status" start-index="107" stop-index="120">
+                                    <owner name="t_order" start-index="107" stop-index="113" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="124" stop-index="124" />
+                                <parameter-marker-expression value="0" start-index="124" stop-index="124" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <table name="t_order" start-index="7" stop-index="13"/>
         <table name="t_order_item" start-index="16" stop-index="27"/>
@@ -387,18 +478,20 @@
 
     <delete sql-case-id="delete_multi_tables_with_using" parameters="1">
         <where start-index="115" stop-index="138">
-            <and-predicate>
-                <predicate start-index="121" stop-index="138">
-                    <column-left-value name="status" start-index="121" stop-index="134">
-                        <owner name="t_order" start-index="121" stop-index="127"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="138" stop-index="138"/>
-                        <literal-expression value="1" start-index="138" stop-index="138"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="121" stop-index="138">
+                    <left>
+                        <column name="status" start-index="121" stop-index="134">
+                            <owner name="t_order" start-index="121" stop-index="127" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="138" stop-index="138" />
+                        <parameter-marker-expression value="0" start-index="138" stop-index="138" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <table name="t_order" start-index="12" stop-index="18"/>
         <table name="t_order_item" start-index="21" stop-index="32"/>
@@ -407,16 +500,18 @@
     <delete sql-case-id="delete_with_query_hint" parameters="1000">
         <table name="t_order" start-index="12" stop-index="18" />
         <where start-index="20" stop-index="37" literal-stop-index="40">
-            <and-predicate>
-                <predicate start-index="26" stop-index="37" literal-stop-index="40">
-                    <column-left-value name="order_id" start-index="26" stop-index="33" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
+            <expr>
+                <binary-operation-expression start-index="26" stop-index="37" literal-stop-index="40">
+                    <left>
+                        <column name="order_id" start-index="26" stop-index="33" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="37" stop-index="40" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="37" stop-index="37" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </delete>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
index 318bbc3..ff2665a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/insert.xml
@@ -679,7 +679,7 @@
     </insert>
 
     <insert sql-case-id="insert_with_batch_and_composite_expression" parameters="1, 1, 'init', 2, 2, 'init'">
-            <table name="t_order" start-index="12" stop-index="18" />
+        <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="46">
             <column name="order_id" start-index="21" stop-index="28" />
             <column name="user_id" start-index="31" stop-index="37" />
@@ -1165,17 +1165,19 @@
                 <column-projection name="user_id" start-index="65" stop-index="71" />
                 <column-projection name="status" start-index="74" stop-index="79" />
             </projections>
-            <where start-index="94" stop-index="111">
-                <and-predicate>
-                    <predicate start-index="100" stop-index="111" literal-stop-index="113">
-                        <column-left-value name="order_id" start-index="100" stop-index="107" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="111" stop-index="111" />
+            <where start-index="94" stop-index="111" literal-stop-index="113">
+                <expr>
+                    <binary-operation-expression start-index="100" stop-index="111" literal-stop-index="113">
+                        <left>
+                            <column name="order_id" start-index="100" stop-index="107" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="111" stop-index="113" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="111" stop-index="111" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -1192,17 +1194,19 @@
                 <column-projection name="user_id" start-index="37" stop-index="43" />
                 <column-projection name="status" start-index="46" stop-index="51" />
             </projections>
-            <where start-index="66" stop-index="83">
-                <and-predicate>
-                    <predicate start-index="72" stop-index="83" literal-stop-index="85">
-                        <column-left-value name="order_id" start-index="72" stop-index="79" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="83" stop-index="83" />
+            <where start-index="66" stop-index="83" literal-stop-index="85">
+                <expr>
+                    <binary-operation-expression start-index="72" stop-index="83" literal-stop-index="85">
+                        <left>
+                            <column name="order_id" start-index="72" stop-index="79" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="83" stop-index="85" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="83" stop-index="83" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -1224,20 +1228,22 @@
                 <column-projection name="item_id" start-index="83" stop-index="89" />
                 <column-projection name="order_id" start-index="92" stop-index="99" />
                 <column-projection name="user_id" start-index="102" stop-index="108" />
-                <expression-projection start-index="111" stop-index="118" />
-                <expression-projection start-index="121" stop-index="132" />
+                <expression-projection text="insert" start-index="111" stop-index="118" />
+                <expression-projection text="2017-08-08" start-index="121" stop-index="132" />
             </projections>
-            <where start-index="152" stop-index="168">
-                <and-predicate>
-                    <predicate start-index="158" stop-index="168" literal-stop-index="170">
-                        <column-left-value name="item_id" start-index="158" stop-index="164" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="168" stop-index="168" />
+            <where start-index="152" stop-index="168" literal-stop-index="170">
+                <expr>
+                    <binary-operation-expression start-index="158" stop-index="168" literal-stop-index="170">
+                        <left>
+                            <column name="item_id" start-index="158" stop-index="164" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="168" stop-index="170" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="168" stop-index="168" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -1257,20 +1263,22 @@
             <projections start-index="74" stop-index="114">
                 <column-projection name="order_id" start-index="74" stop-index="81" />
                 <column-projection name="user_id" start-index="84" stop-index="90" />
-                <expression-projection start-index="93" stop-index="100" />
-                <expression-projection start-index="103" stop-index="114" />
+                <expression-projection text="insert" start-index="93" stop-index="100" />
+                <expression-projection text="2017-08-08" start-index="103" stop-index="114" />
             </projections>
-            <where start-index="134" stop-index="151">
-                <and-predicate>
-                    <predicate start-index="140" stop-index="151" literal-stop-index="153">
-                        <column-left-value name="order_id" start-index="140" stop-index="147" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="151" stop-index="151" />
+            <where start-index="134" stop-index="151" literal-stop-index="153">
+                <expr>
+                    <binary-operation-expression start-index="140" stop-index="151" literal-stop-index="153">
+                        <left>
+                            <column name="order_id" start-index="140" stop-index="147" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="151" stop-index="153" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="151" stop-index="151" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -1291,17 +1299,19 @@
                 <column-projection name="user_id" start-index="64" stop-index="70" />
                 <column-projection name="status" start-index="73" stop-index="78" />
             </projections>
-            <where start-index="93" stop-index="110">
-                <and-predicate>
-                    <predicate start-index="99" stop-index="110" literal-stop-index="112">
-                        <column-left-value name="order_id" start-index="99" stop-index="106" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="110" stop-index="110" literal-stop-index="112" />
+            <where start-index="93" stop-index="110" literal-stop-index="112">
+                <expr>
+                    <binary-operation-expression start-index="99" stop-index="110" literal-stop-index="112">
+                        <left>
+                            <column name="order_id" start-index="99" stop-index="106" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="110" stop-index="112" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="110" stop-index="110" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
         <on-duplicate-key-columns start-index="112" stop-index="158" literal-start-index="114" literal-stop-index="160">
@@ -1328,7 +1338,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_digit_literals_value">
         <table name="digit_literals_value_test" start-index="12" stop-index="36" />
         <columns start-index="37" stop-index="42">
@@ -1342,7 +1352,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_with_clause">
         <with start-index="0" stop-index="70">
             <common-table-expression name = "cte" start-index="5" stop-index="70">
@@ -1378,7 +1388,7 @@
             </projections>
         </select>
     </insert>
-    
+
     <insert sql-case-id="insert_without_columns_with_with_clause">
         <with start-index="0" stop-index="50">
             <common-table-expression name="cte" start-index="5" stop-index="50">
@@ -1410,7 +1420,7 @@
             </projections>
         </select>
     </insert>
-    
+
     <insert sql-case-id="insert_without_into_keyword" parameters="1, 1, 'init'">
         <table name="t_order" start-index="7" stop-index="13" />
         <columns start-index="15" stop-index="41">
@@ -1435,7 +1445,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_default_values">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="46">
@@ -1444,12 +1454,12 @@
             <column name="status" start-index="40" stop-index="45" />
         </columns>
     </insert>
-    
+
     <insert sql-case-id="insert_without_columns_with_default_values">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="19" stop-index="19" />
     </insert>
-    
+
     <insert sql-case-id="insert_with_top">
         <table name="t_order" start-index="15" stop-index="21" />
         <columns start-index="23" stop-index="41">
@@ -1466,7 +1476,7 @@
             </projections>
         </select>
     </insert>
-    
+
     <insert sql-case-id="insert_with_top_percent">
         <table name="t_order" start-index="23" stop-index="29" />
         <columns start-index="31" stop-index="49">
@@ -1483,7 +1493,7 @@
             </projections>
         </select>
     </insert>
-    
+
     <insert sql-case-id="insert_with_output_clause" parameters="1, 1">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="38">
@@ -1518,7 +1528,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_output_clause_without_output_table_columns" parameters="1, 1">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="38">
@@ -1549,7 +1559,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_output_clause_without_output_table" parameters="1, 1">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="38">
@@ -1579,7 +1589,7 @@
             </value>
         </values>
     </insert>
-    
+
     <insert sql-case-id="insert_with_output_clause_column_shorthand" parameters="1, 1">
         <table name="t_order" start-index="12" stop-index="18" />
         <columns start-index="20" stop-index="38">
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
index 3e5904e..f2e7521 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/replace.xml
@@ -849,17 +849,19 @@
                 <column-projection name="user_id" start-index="66" stop-index="72" />
                 <column-projection name="status" start-index="75" stop-index="80" />
             </projections>
-            <where start-index="95" stop-index="112">
-                <and-predicate>
-                    <predicate start-index="101" stop-index="112" literal-stop-index="114">
-                        <column-left-value name="order_id" start-index="101" stop-index="108" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="112" stop-index="112" />
+            <where start-index="95" stop-index="112" literal-stop-index="114">
+                <expr>
+                    <binary-operation-expression start-index="101" stop-index="112" literal-stop-index="114">
+                        <left>
+                            <column name="order_id" start-index="101" stop-index="108" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="112" stop-index="114" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="112" stop-index="112" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -876,17 +878,19 @@
                 <column-projection name="user_id" start-index="38" stop-index="44" />
                 <column-projection name="status" start-index="47" stop-index="52" />
             </projections>
-            <where start-index="67" stop-index="84">
-                <and-predicate>
-                    <predicate start-index="73" stop-index="84" literal-stop-index="86">
-                        <column-left-value name="order_id" start-index="73" stop-index="80" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="84" stop-index="84" />
+            <where start-index="67" stop-index="84" literal-stop-index="86">
+                <expr>
+                    <binary-operation-expression start-index="73" stop-index="84" literal-stop-index="86">
+                        <left>
+                            <column name="order_id" start-index="73" stop-index="80" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="84" stop-index="86" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="84" stop-index="84" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -901,11 +905,6 @@
             <column name="creation_date" start-index="62" stop-index="74" />
         </columns>
         <select>
-<!--            <table-reference>-->
-<!--                <table-factor>-->
-<!--                    <table name="t_order_item" start-index="140" stop-index="151" />-->
-<!--                </table-factor>-->
-<!--            </table-reference>-->
             <from>
                 <simple-table name="t_order_item" start-index="140" stop-index="151" />
             </from>
@@ -913,20 +912,22 @@
                 <column-projection name="item_id" start-index="84" stop-index="90" />
                 <column-projection name="order_id" start-index="93" stop-index="100" />
                 <column-projection name="user_id" start-index="103" stop-index="109" />
-                <expression-projection start-index="112" stop-index="119" />
-                <expression-projection start-index="122" stop-index="133" />
+                <expression-projection text="insert" start-index="112" stop-index="119" />
+                <expression-projection text="2017-08-08" start-index="122" stop-index="133" />
             </projections>
-            <where start-index="153" stop-index="169">
-                <and-predicate>
-                    <predicate start-index="159" stop-index="169" literal-stop-index="171">
-                        <column-left-value name="item_id" start-index="159" stop-index="165" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="169" stop-index="169" />
+            <where start-index="153" stop-index="169" literal-stop-index="171">
+                <expr>
+                    <binary-operation-expression start-index="159" stop-index="169" literal-stop-index="171">
+                        <left>
+                            <column name="item_id" start-index="159" stop-index="165" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="169" stop-index="171" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="169" stop-index="169" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
@@ -946,20 +947,22 @@
             <projections start-index="75" stop-index="115">
                 <column-projection name="order_id" start-index="75" stop-index="82" />
                 <column-projection name="user_id" start-index="85" stop-index="91" />
-                <expression-projection start-index="94" stop-index="101" />
-                <expression-projection start-index="104" stop-index="115" />
+                <expression-projection text="insert" start-index="94" stop-index="101" />
+                <expression-projection text="2017-08-08" start-index="104" stop-index="115" />
             </projections>
-            <where start-index="135" stop-index="152">
-                <and-predicate>
-                    <predicate start-index="141" stop-index="152" literal-stop-index="154">
-                        <column-left-value name="order_id" start-index="141" stop-index="148" />
-                        <operator type="=" />
-                        <compare-right-value>
-                            <parameter-marker-expression value="0" start-index="152" stop-index="152" />
+            <where start-index="135" stop-index="152" literal-stop-index="154">
+                <expr>
+                    <binary-operation-expression start-index="141" stop-index="152" literal-stop-index="154">
+                        <left>
+                            <column name="order_id" start-index="141" stop-index="148" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
                             <literal-expression value="100" start-index="152" stop-index="154" />
-                        </compare-right-value>
-                    </predicate>
-                </and-predicate>
+                            <parameter-marker-expression value="0" start-index="152" stop-index="152" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
             </where>
         </select>
     </insert>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
index 0a2beb2..ee62338 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-aggregate.xml
@@ -43,15 +43,26 @@
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(*)" start-index="7" stop-index="14" />
         </projections>
         <where start-index="45" stop-index="64">
-            <and-predicate>
-                <predicate start-index="51" stop-index="64">
-                    <column-left-value name="order_id" start-index="51" stop-index="58" />
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <common-expression text="1-1" start-index="62" stop-index="64" literal-start-index="62" literal-stop-index="64" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="51" stop-index="64">
+                    <left>
+                        <column name="order_id" start-index="51" stop-index="58" />
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <binary-operation-expression start-index="62" stop-index="64">
+                            <left>
+                                <literal-expression value="1" start-index="62" stop-index="62" />
+                            </left>
+                            <operator>-</operator>
+                            <right>
+                                <literal-expression value="1" start-index="64" stop-index="64" />
+                            </right>
+                        </binary-operation-expression>
+                        <common-expression text="1-1" start-index="62" stop-index="64" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -63,15 +74,26 @@
             <aggregation-projection type="COUNT" alias="orders_count" inner-expression="(*)" start-index="7" stop-index="14" />
         </projections>
         <where start-index="45" stop-index="66">
-            <and-predicate>
-                <predicate start-index="51" stop-index="66">
-                    <column-left-value name="order_id" start-index="51" stop-index="58" />
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <common-expression text="1 - 1" start-index="62" stop-index="66" literal-start-index="62" literal-stop-index="66"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="51" stop-index="66">
+                    <left>
+                        <column name="order_id" start-index="51" stop-index="58" />
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <binary-operation-expression start-index="62" stop-index="66">
+                            <left>
+                                <literal-expression value="1" start-index="62" stop-index="62" />
+                            </left>
+                            <operator>-</operator>
+                            <right>
+                                <literal-expression value="1" start-index="66" stop-index="66" />
+                            </right>
+                        </binary-operation-expression>
+                        <common-expression text="1 - 1" start-index="62" stop-index="66" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -117,46 +139,91 @@
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
         <where start-index="62" stop-index="171" literal-stop-index="172">
-            <and-predicate>
-                <predicate start-index="68" stop-index="88">
-                    <column-left-value name="user_id" start-index="68" stop-index="76">
-                        <owner name="o" start-index="68" stop-index="68" />
-                    </column-left-value>
-                    <column-right-value name="user_id" start-index="80" stop-index="88">
-                        <owner name="i" start-index="80" stop-index="80" />
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="94" stop-index="116">
-                    <column-left-value name="order_id" start-index="94" stop-index="103">
-                        <owner name="o" start-index="94" stop-index="94" />
-                    </column-left-value>
-                    <column-right-value name="order_id" start-index="107" stop-index="116">
-                        <owner name="i" start-index="107" stop-index="107" />
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="122" stop-index="140">
-                    <column-left-value name="user_id" start-index="122" stop-index="130">
-                        <owner name="o" start-index="122" stop-index="122" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="136" stop-index="136" />
-                        <parameter-marker-expression value="1" start-index="139" stop-index="139" />
-                        <literal-expression value="1" start-index="136" stop-index="136" />
-                        <literal-expression value="2" start-index="139" stop-index="139" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="146" stop-index="171" literal-stop-index="172">
-                    <column-left-value name="order_id" start-index="146" stop-index="155">
-                        <owner name="o" start-index="146" stop-index="146" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="165" stop-index="165" />
-                        <between-literal-expression value="9" start-index="165" stop-index="165" />
-                        <and-parameter-marker-expression value="3" start-index="171" stop-index="171" />
-                        <and-literal-expression value="10" start-index="171" stop-index="172" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="68" stop-index="171" literal-stop-index="172">
+                    <left>
+                        <binary-operation-expression start-index="68" stop-index="140">
+                            <left>
+                                <binary-operation-expression start-index="68" stop-index="116">
+                                    <left>
+                                        <binary-operation-expression start-index="68" stop-index="88">
+                                            <left>
+                                                <column name="user_id" start-index="68" stop-index="76">
+                                                    <owner name="o" start-index="68" stop-index="68" />
+                                                </column>
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <column name="user_id" start-index="80" stop-index="88">
+                                                    <owner name="i" start-index="80" stop-index="80" />
+                                                </column>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <binary-operation-expression start-index="94" stop-index="116">
+                                            <left>
+                                                <column name="order_id" start-index="94" stop-index="103">
+                                                    <owner name="o" start-index="94" stop-index="94" />
+                                                </column>
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <column name="order_id" start-index="107" stop-index="116">
+                                                    <owner name="i" start-index="107" stop-index="107" />
+                                                </column>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <in-expression start-index="122" stop-index="140">
+                                    <not>false</not>
+                                    <left>
+                                        <column name="user_id" start-index="122" stop-index="130">
+                                            <owner name="o" start-index="122" stop-index="122" />
+                                        </column>
+                                    </left>
+                                    <right>
+                                        <list-expression start-index="135" stop-index="140">
+                                            <items>
+                                                <literal-expression value="1" start-index="136" stop-index="136" />
+                                                <parameter-marker-expression value="0" start-index="136" stop-index="136" />
+                                            </items>
+                                            <items>
+                                                <literal-expression value="2" start-index="139" stop-index="139" />
+                                                <parameter-marker-expression value="1" start-index="139" stop-index="139" />
+                                            </items>
+                                        </list-expression>
+                                    </right>
+                                </in-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="146" stop-index="171" literal-stop-index="172">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="146" stop-index="155">
+                                    <owner name="o" start-index="146" stop-index="146" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="165" stop-index="165" />
+                                <parameter-marker-expression value="2" start-index="165" stop-index="165" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="171" stop-index="172" />
+                                <parameter-marker-expression value="3" start-index="171" stop-index="171" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -195,30 +262,51 @@
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
         <where start-index="119" stop-index="174" literal-stop-index="175">
-            <and-predicate>
-                <predicate start-index="125" stop-index="143">
-                    <column-left-value name="user_id" start-index="125" stop-index="133">
-                        <owner name="o" start-index="125" stop-index="125" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="139" stop-index="139" />
-                        <parameter-marker-expression value="1" start-index="142" stop-index="142" />
-                        <literal-expression value="1" start-index="139" stop-index="139" />
-                        <literal-expression value="2" start-index="142" stop-index="142" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="149" stop-index="174" literal-stop-index="175">
-                    <column-left-value name="order_id" start-index="149" stop-index="158">
-                        <owner name="o" start-index="149" stop-index="149" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="168" stop-index="168" />
-                        <between-literal-expression value="9" start-index="168" stop-index="168" />
-                        <and-parameter-marker-expression value="3" start-index="174" stop-index="174" />
-                        <and-literal-expression value="10" start-index="174" stop-index="175" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="125" stop-index="174" literal-stop-index="175">
+                    <left>
+                        <in-expression start-index="125" stop-index="143">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="125" stop-index="133">
+                                    <owner name="o" start-index="125" stop-index="125" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="138" stop-index="143">
+                                    <items>
+                                        <literal-expression value="1" start-index="139" stop-index="139" />
+                                        <parameter-marker-expression value="0" start-index="139" stop-index="139" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="142" stop-index="142" />
+                                        <parameter-marker-expression value="1" start-index="142" stop-index="142" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="149" stop-index="174" literal-stop-index="175">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="149" stop-index="158">
+                                    <owner name="o" start-index="149" stop-index="149" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="168" stop-index="168" />
+                                <parameter-marker-expression value="2" start-index="168" stop-index="168" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="174" stop-index="175" />
+                                <parameter-marker-expression value="3" start-index="174" stop-index="174" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
index a6e596d..5ccd443e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-expression.xml
@@ -19,58 +19,95 @@
 <sql-parser-test-cases>
     <select sql-case-id="select_with_expression">
         <from>
-            <simple-table name="t_order" alias="o" start-index="38" stop-index="49" />
+            <simple-table name="t_order" alias="o" start-index="38" stop-index="49"/>
         </from>
         <projections start-index="7" stop-index="31">
             <!-- TODO check expression-projection's stop-index whether include alias -->
-            <expression-projection alias="exp" start-index="7" stop-index="31" />
+            <expression-projection text="o.order_id + 1 * 2" alias="exp" start-index="7" stop-index="31"/>
         </projections>
         <order-by>
-            <column-item name="order_id" start-index="60" stop-index="69" >
-                <owner name="o" start-index="60" stop-index="60" />
+            <column-item name="order_id" start-index="60" stop-index="69">
+                <owner name="o" start-index="60" stop-index="60"/>
+            </column-item>
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_with_expression_for_postgresql">
+        <from>
+            <simple-table name="t_order" alias="o" start-index="38" stop-index="49"/>
+        </from>
+        <projections start-index="7" stop-index="31">
+            <!-- 'text' is different from other database -->
+            <expression-projection text="o.order_id+1*2" alias="exp" start-index="7" stop-index="31"/>
+        </projections>
+        <order-by>
+            <column-item name="order_id" start-index="60" stop-index="69">
+                <owner name="o" start-index="60" stop-index="60"/>
             </column-item>
         </order-by>
     </select>
 
     <select sql-case-id="select_with_date_function">
         <from>
-            <simple-table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="51" stop-index="69" />
+            <simple-table name="t_order_item" alias="i" start-delimiter="`" end-delimiter="`" start-index="51" stop-index="69"/>
         </from>
         <projections start-index="7" stop-index="44">
-            <expression-projection alias="creation_date" start-index="7" stop-index="44" />
+            <expression-projection text="DATE(i.creation_date)" alias="creation_date" start-index="7" stop-index="44"/>
         </projections>
         <order-by>
-            <expression-item expression="DATE(i.creation_date)" order-direction="DESC" start-index="80" stop-index="100" />
+            <expression-item expression="DATE(i.creation_date)" order-direction="DESC" start-index="80" stop-index="100"/>
         </order-by>
     </select>
 
     <select sql-case-id="select_with_regexp" parameters="'init', 1, 2">
         <from>
-            <simple-table name="t_order_item" alias="t" start-index="14" stop-index="27" />
+            <simple-table name="t_order_item" alias="t" start-index="14" stop-index="27"/>
         </from>
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <where start-index="29" stop-index="75" literal-stop-index="80">
-            <and-predicate>
-                <!-- FIXME cannot parse REGEXP -->
-                <!--<predicate start-index="35" stop-index="51" literal-stop-index="56">-->
-                    <!--<column-left-value name="status" start-index="35" stop-index="51" literal-stop-index="56">-->
-                        <!--<owner name="t" start-index="35" stop-index="35" />-->
-                    <!--</column-left-value>-->
-                <!--</predicate>-->
-                <predicate start-index="57" stop-index="75"  literal-start-index="62" literal-stop-index="80">
-                    <column-left-value name="item_id" start-index="57" stop-index="65" literal-start-index="62" literal-stop-index="70">
-                        <owner name="t" start-index="57" stop-index="57" literal-start-index="62" literal-stop-index="62" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="1" start-index="71" stop-index="71" />
-                        <parameter-marker-expression value="2" start-index="74" stop-index="74" />
-                        <literal-expression value="1" start-index="76" stop-index="76" />
-                        <literal-expression value="2" start-index="79" stop-index="79" />
-                    </in-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="35" stop-index="75" literal-stop-index="80">
+                    <left>
+                        <binary-operation-expression start-index="35" stop-index="51" literal-stop-index="56">
+                            <left>
+                                <column name="status" start-index="35" stop-index="42">
+                                    <owner name="t" start-index="35" stop-index="35"/>
+                                </column>
+                            </left>
+                            <operator>REGEXP</operator>
+                            <right>
+                                <literal-expression value="init" start-index="51" stop-index="56"/>
+                                <parameter-marker-expression value="0" start-index="51" stop-index="51"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <in-expression start-index="57" stop-index="75" literal-start-index="62" literal-stop-index="80">
+                            <not>false</not>
+                            <left>
+                                <column name="item_id" start-index="57" stop-index="65" literal-start-index="62" literal-stop-index="70">
+                                    <owner name="t" start-index="57" stop-index="57" literal-start-index="62" literal-stop-index="62"/>
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="70" stop-index="75" literal-start-index="75" literal-stop-index="80">
+                                    <items>
+                                        <literal-expression value="1" start-index="76" stop-index="76"/>
+                                        <parameter-marker-expression value="1" start-index="71" stop-index="71"/>
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="79" stop-index="79"/>
+                                        <parameter-marker-expression value="2" start-index="74" stop-index="74"/>
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -82,45 +119,1432 @@
             <column-projection start-index="11" stop-index="19" name="item_id" alias="item_id">
                 <owner start-index="11" stop-index="11" name="o"/>
             </column-projection>
-            <expression-projection start-index="33" stop-index="124" alias="stateName" />
+            <expression-projection text="case when t.status = 'init' then '已启用' when t.status = 'failed' then '已停用' end" start-index="33" stop-index="124" alias="stateName"/>
         </projections>
         <from>
             <join-table>
                 <left>
-                    <simple-table start-index="135" stop-index="143" name="t_order" alias="t" />
+                    <simple-table start-index="135" stop-index="143" name="t_order" alias="t"/>
                 </left>
                 <right>
-                    <simple-table start-index="155" stop-index="171" name="t_order_item" alias="o" />
+                    <simple-table start-index="155" stop-index="171" name="t_order_item" alias="o"/>
                 </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="176" stop-index="197">
                             <column-left-value name="order_id" start-index="176" stop-index="185">
-                                <owner name="o" start-index="176" stop-index="176" />
+                                <owner name="o" start-index="176" stop-index="176"/>
                             </column-left-value>
                             <column-right-value name="order_id" start-index="188" stop-index="197">
-                                <owner name="t" start-index="188" stop-index="188" />
+                                <owner name="t" start-index="188" stop-index="188"/>
                             </column-right-value>
                         </predicate>
                     </and-predicate>
                 </joinSpecification>
             </join-table>
         </from>
-        <where start-index="198" stop-index="219">
-            <and-predicate>
-                <predicate start-index="205" stop-index="219" >
-                    <operator type="=" />
-                    <column-left-value name="order_id" start-index="205" stop-index="214">
-                        <owner name="t" start-index="205" stop-index="205" />
-                    </column-left-value>
-                    <compare-right-value operator="=">
-                        <literal-expression value="1000" start-index="216" stop-index="219" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+        <where start-index="199" stop-index="219">
+            <expr>
+                <binary-operation-expression start-index="205" stop-index="219">
+                    <left>
+                        <column name="order_id" start-index="205" stop-index="214">
+                            <owner name="t" start-index="205" stop-index="205"/>
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1000" start-index="216" stop-index="219"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <limit start-index="221" stop-index="227">
-            <row-count value="1" start-index="227" stop-index="227" />
+            <row-count value="1" start-index="227" stop-index="227"/>
         </limit>
     </select>
+
+    <select sql-case-id="select_where_with_expr_with_or" parameters="1,2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="71">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="71">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="43">
+                                    <owner name="t_order" start-index="28" stop-index="34"/>
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="47" stop-index="47"/>
+                                <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>OR</operator>
+                    <right>
+                        <binary-operation-expression start-index="52" stop-index="71">
+                            <left>
+                                <literal-expression value="2" start-index="52" stop-index="52"/>
+                                <parameter-marker-expression value="1" start-index="52" stop-index="52"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="56" stop-index="71">
+                                    <owner name="t_order" start-index="56" stop-index="62"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_or_sign" parameters="1, 2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
+        <projections start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7" />
+        </projections>
+        <where start-index="22" stop-index="71">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="71">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="52">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="43">
+                                    <owner name="t_order" start-index="28" stop-index="34" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <common-expression text="? || ?" literal-text="1 || 2" start-index="47" stop-index="52" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <column name="order_id" start-index="56" stop-index="71">
+                            <owner name="t_order" start-index="56" stop-index="62" />
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_xor" parameters="1,2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="72">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="72">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="43">
+                                    <owner name="t_order" start-index="28" stop-index="34"/>
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="47" stop-index="47"/>
+                                <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>XOR</operator>
+                    <right>
+                        <binary-operation-expression start-index="53" stop-index="72">
+                            <left>
+                                <literal-expression value="2" start-index="53" stop-index="53"/>
+                                <parameter-marker-expression value="1" start-index="53" stop-index="53"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="57" stop-index="72">
+                                    <owner name="t_order" start-index="57" stop-index="63"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_and" parameters="1,2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="72">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="72">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="43">
+                                    <owner name="t_order" start-index="28" stop-index="34"/>
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="47" stop-index="47"/>
+                                <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="53" stop-index="72">
+                            <left>
+                                <literal-expression value="2" start-index="53" stop-index="53"/>
+                                <parameter-marker-expression value="1" start-index="53" stop-index="53"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="57" stop-index="72">
+                                    <owner name="t_order" start-index="57" stop-index="63"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_and_sign" parameters="1,2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="71">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="71">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="43">
+                                    <owner name="t_order" start-index="28" stop-index="34"/>
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="47" stop-index="47"/>
+                                <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>&amp;&amp;</operator>
+                    <right>
+                        <binary-operation-expression start-index="52" stop-index="71">
+                            <left>
+                                <literal-expression value="2" start-index="52" stop-index="52"/>
+                                <parameter-marker-expression value="1" start-index="52" stop-index="52"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="56" stop-index="71">
+                                    <owner name="t_order" start-index="56" stop-index="62"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_not" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="53">
+            <expr>
+                <not-expression start-index="28" stop-index="53">
+                    <expr>
+                        <binary-operation-expression start-index="33" stop-index="52">
+                            <left>
+                                <literal-expression value="1" start-index="33" stop-index="33"/>
+                                <parameter-marker-expression value="0" start-index="33" stop-index="33"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="37" stop-index="52">
+                                    <owner name="t_order" start-index="37" stop-index="43"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </expr>
+                </not-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_not_sign" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="52">
+            <expr>
+                <not-expression start-index="28" stop-index="52">
+                    <expr>
+                        <binary-operation-expression start-index="32" stop-index="51">
+                            <left>
+                                <literal-expression value="1" start-index="32" stop-index="32"/>
+                                <parameter-marker-expression value="0" start-index="32" stop-index="32"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="36" stop-index="51">
+                                    <owner name="t_order" start-index="36" stop-index="42"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </expr>
+                </not-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_is" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="56">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="56">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <literal-expression value="1" start-index="28" stop-index="28"/>
+                                <parameter-marker-expression value="0" start-index="28" stop-index="28"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="32" stop-index="47">
+                                    <owner name="t_order" start-index="32" stop-index="38"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>IS</operator>
+                    <right>
+                        <literal-expression value="51..56" start-index="51" stop-index="56"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_expr_with_is_not" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="60">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="60">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="47">
+                            <left>
+                                <literal-expression value="1" start-index="28" stop-index="28"/>
+                                <parameter-marker-expression value="0" start-index="28" stop-index="28"/>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="32" stop-index="47">
+                                    <owner name="t_order" start-index="32" stop-index="38"/>
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>IS</operator>
+                    <right>
+                        <literal-expression value="51..60" start-index="51" stop-index="60"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_boolean_primary_with_is">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="49">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="49">
+                    <left>
+                        <column name="status" start-index="28" stop-index="41">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>IS</operator>
+                    <right>
+                        <literal-expression value="45..49" start-index="45" stop-index="49"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_boolean_primary_with_is_not">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="53">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="53">
+                    <left>
+                        <column name="status" start-index="28" stop-index="41">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>IS</operator>
+                    <right>
+                        <literal-expression value="45..53" start-index="45" stop-index="53"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_boolean_primary_with_null_safe">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="62">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="62">
+                    <left>
+                        <column name="status" start-index="28" stop-index="41">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&lt;=&gt;</operator>
+                    <right>
+                        <column name="order_id" start-index="47" stop-index="62">
+                            <owner name="t_order" start-index="47" stop-index="53"/>
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_boolean_primary_with_comparison_predicate">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="61">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="61">
+                    <left>
+                        <column name="status" start-index="28" stop-index="41">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&gt;=</operator>
+                    <right>
+                        <column name="order_id" start-index="46" stop-index="61">
+                            <owner name="t_order" start-index="46" stop-index="52"/>
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_boolean_primary_with_comparison_subquery" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="98">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="98">
+                    <left>
+                        <column name="status" start-index="28" stop-index="41">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <subquery start-index="49" stop-index="98">
+                            <select>
+                                <from start-index="69" stop-index="80">
+                                    <simple-table name="t_order_item" start-index="69" stop-index="80"/>
+                                </from>
+                                <projections distinct-row="false" start-index="57" stop-index="62">
+                                    <column-projection name="status" start-index="57" stop-index="62"/>
+                                </projections>
+                                <where start-index="82" stop-index="97">
+                                    <expr>
+                                        <binary-operation-expression start-index="88" stop-index="97">
+                                            <left>
+                                                <column name="status" start-index="88" stop-index="93"/>
+                                            </left>
+                                            <operator>&gt;</operator>
+                                            <right>
+                                                <literal-expression value="1" start-index="97" stop-index="97"/>
+                                                <parameter-marker-expression value="0" start-index="97" stop-index="97"/>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </expr>
+                                </where>
+                            </select>
+                        </subquery>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_in_subquery" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="103">
+            <expr>
+                <in-expression start-index="28" stop-index="103">
+                    <not>true</not>
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <right>
+                        <subquery start-index="52" stop-index="103">
+                            <select>
+                                <from start-index="74" stop-index="85">
+                                    <simple-table name="t_order_item" start-index="74" stop-index="85"/>
+                                </from>
+                                <projections distinct-row="false" start-index="60" stop-index="67">
+                                    <column-projection name="order_id" start-index="60" stop-index="67"/>
+                                </projections>
+                                <where start-index="87" stop-index="102">
+                                    <expr>
+                                        <binary-operation-expression start-index="93" stop-index="102">
+                                            <left>
+                                                <column name="status" start-index="93" stop-index="98"/>
+                                            </left>
+                                            <operator>&gt;</operator>
+                                            <right>
+                                                <literal-expression value="1" start-index="102" stop-index="102"/>
+                                                <parameter-marker-expression value="0" start-index="102" stop-index="102"/>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </expr>
+                                </where>
+                            </select>
+                        </subquery>
+                    </right>
+                </in-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_in_expr" parameters="1,2,3">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="56">
+            <expr>
+                <in-expression start-index="28" stop-index="56">
+                    <not>false</not>
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <right>
+                        <list-expression start-index="48" stop-index="56">
+                            <items>
+                                <literal-expression value="1" start-index="49" stop-index="49"/>
+                                <parameter-marker-expression value="0" start-index="49" stop-index="49"/>
+                            </items>
+                            <items>
+                                <literal-expression value="2" start-index="52" stop-index="52"/>
+                                <parameter-marker-expression value="1" start-index="52" stop-index="52"/>
+                            </items>
+                            <items>
+                                <literal-expression value="3" start-index="55" stop-index="55"/>
+                                <parameter-marker-expression value="2" start-index="55" stop-index="55"/>
+                            </items>
+                        </list-expression>
+                    </right>
+                </in-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_between" parameters="1,2">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="59">
+            <expr>
+                <between-expression start-index="28" stop-index="59">
+                    <not>false</not>
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <between-expr>
+                        <literal-expression value="1" start-index="53" stop-index="53"/>
+                        <parameter-marker-expression value="0" start-index="53" stop-index="53"/>
+                    </between-expr>
+                    <and-expr>
+                        <literal-expression value="2" start-index="59" stop-index="59"/>
+                        <parameter-marker-expression value="1" start-index="59" stop-index="59"/>
+                    </and-expr>
+                </between-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_sounds_like">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="60">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="60">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>SOUNDS LIKE</operator>
+                    <right>
+                        <literal-expression value="1%" start-index="57" stop-index="60"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_like">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="68">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="68">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>NOT LIKE</operator>
+                    <right>
+                        <list-expression start-index="54" stop-index="68">
+                            <items>
+                                <literal-expression value="1%" start-index="54" stop-index="57"/>
+                            </items>
+                            <items>
+                                <literal-expression value="$" start-index="66" stop-index="68"/>
+                            </items>
+                        </list-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_predicate_with_regexp">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="62">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="62">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>NOT REGEXP</operator>
+                    <right>
+                        <literal-expression value="[123]" start-index="56" stop-index="62"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_vertical_bar" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>|</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_ampersand" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&amp;</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_signed_left_shift" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="48">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="48">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&lt;&lt;</operator>
+                    <right>
+                        <literal-expression value="1" start-index="48" stop-index="48"/>
+                        <parameter-marker-expression value="0" start-index="48" stop-index="48"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_signed_right_shift" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="48">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="48">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>&gt;&gt;</operator>
+                    <right>
+                        <literal-expression value="1" start-index="48" stop-index="48"/>
+                        <parameter-marker-expression value="0" start-index="48" stop-index="48"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_plus" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>+</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_minus" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>-</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_asterisk" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>*</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_slash" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>/</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_div" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="49">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="49">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>DIV</operator>
+                    <right>
+                        <literal-expression value="1" start-index="49" stop-index="49"/>
+                        <parameter-marker-expression value="0" start-index="49" stop-index="49"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_mod" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="49">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="49">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>MOD</operator>
+                    <right>
+                        <literal-expression value="1" start-index="49" stop-index="49"/>
+                        <parameter-marker-expression value="0" start-index="49" stop-index="49"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_mod_sign" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>%</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_caret" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>^</operator>
+                    <right>
+                        <literal-expression value="1" start-index="47" stop-index="47"/>
+                        <parameter-marker-expression value="0" start-index="47" stop-index="47"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_plus_interval">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="63">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="63">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>+</operator>
+                    <right>
+                        <expression-projection text="INTERVAL1SECOND" start-index="47" stop-index="63" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_bit_expr_with_minus_interval">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="63">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="63">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="43">
+                            <owner name="t_order" start-index="28" stop-index="34"/>
+                        </column>
+                    </left>
+                    <operator>-</operator>
+                    <right>
+                        <expression-projection text="INTERVAL1SECOND" start-index="47" stop-index="63" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_literals" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="39">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <literal-expression value="1" start-index="28" stop-index="28"/>
+                        <parameter-marker-expression value="0" start-index="28" stop-index="28"/>
+                    </left>
+                    <operator>&lt;</operator>
+                    <right>
+                        <column name="order_id" start-index="32" stop-index="39"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_column">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="43">
+            <expr>
+                <column name="order_id" start-index="28" stop-index="43">
+                    <owner name="t_order" start-index="28" stop-index="34"/>
+                </column>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_function_call">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="43">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="43">
+                    <left>
+                        <expression-projection text="now()" start-index="28" stop-index="32" />
+                    </left>
+                    <operator>&lt;</operator>
+                    <right>
+                        <column name="order_id" start-index="36" stop-index="43"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_collate">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="64">
+            <expr>
+                <common-expression text="order_id collate 'utf8mb4_0900_ai_ci'" start-index="28" stop-index="64"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_variable">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="55">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="55">
+                    <left>
+                        <common-expression text="@@max_connections" start-index="28" stop-index="44"/>
+                    </left>
+                    <operator>&lt;</operator>
+                    <right>
+                        <column name="order_id" start-index="48" stop-index="55"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_plus" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <literal-expression value="1" start-index="28" stop-index="28"/>
+                        <parameter-marker-expression value="0" start-index="28" stop-index="28"/>
+                    </left>
+                    <operator>+</operator>
+                    <right>
+                        <column name="order_id" start-index="32" stop-index="47">
+                            <owner name="t_order" start-index="32" stop-index="38"/>
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_minus" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="47">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="47">
+                    <left>
+                        <literal-expression value="1" start-index="28" stop-index="28"/>
+                        <parameter-marker-expression value="0" start-index="28" stop-index="28"/>
+                    </left>
+                    <operator>-</operator>
+                    <right>
+                        <column name="order_id" start-index="32" stop-index="47">
+                            <owner name="t_order" start-index="32" stop-index="38"/>
+                        </column>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_tilde">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="44">
+            <expr>
+                <common-expression text="~t_order.order_id" start-index="28" stop-index="44"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_not">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="44">
+            <expr>
+                <not-expression start-index="28" stop-index="44">
+                    <expr>
+                        <column name="order_id" start-index="29" stop-index="44">
+                            <owner name="t_order" start-index="29" stop-index="35"/>
+                        </column>
+                    </expr>
+                </not-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_binary">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="50">
+            <expr>
+                <common-expression text="BINARY t_order.order_id" start-index="28" stop-index="50"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_row" parameters="'abc'">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
+        <projections start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7" />
+        </projections>
+        <where start-index="22" stop-index="61" literal-stop-index="65">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="61" literal-stop-index="65">
+                    <left>
+                        <common-expression text="ROW(?, now())" literal-text="ROW('abc', now())" start-index="28" stop-index="40" literal-stop-index="44"/>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <common-expression text="(order_id, status)" start-index="44" stop-index="61" literal-start-index="48" literal-stop-index="65"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_subquery" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="79">
+            <expr>
+                <subquery start-index="28" stop-index="79">
+                    <select>
+                        <from start-index="50" stop-index="61">
+                            <simple-table name="t_order_item" start-index="50" stop-index="61"/>
+                        </from>
+                        <projections distinct-row="false" start-index="36" stop-index="43">
+                            <column-projection name="order_id" start-index="36" stop-index="43"/>
+                        </projections>
+                        <where start-index="63" stop-index="78">
+                            <expr>
+                                <binary-operation-expression start-index="69" stop-index="78">
+                                    <left>
+                                        <column name="status" start-index="69" stop-index="74"/>
+                                    </left>
+                                    <operator>&gt;</operator>
+                                    <right>
+                                        <literal-expression value="1" start-index="78" stop-index="78"/>
+                                        <parameter-marker-expression value="0" start-index="78" stop-index="78"/>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
+                        </where>
+                    </select>
+                </subquery>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_exists_subquery" parameters="1">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="87">
+            <expr>
+                <exists-subquery start-index="28" stop-index="87">
+                    <not>false</not>
+                    <subquery start-index="35" stop-index="87">
+                        <select>
+                            <from start-index="57" stop-index="68">
+                                <simple-table name="t_order_item" start-index="57" stop-index="68"/>
+                            </from>
+                            <projections distinct-row="false" start-index="43" stop-index="50">
+                                <column-projection name="order_id" start-index="43" stop-index="50"/>
+                            </projections>
+                            <where start-index="70" stop-index="85">
+                                <expr>
+                                    <binary-operation-expression start-index="76" stop-index="85">
+                                        <left>
+                                            <column name="status" start-index="76" stop-index="81"/>
+                                        </left>
+                                        <operator>&gt;</operator>
+                                        <right>
+                                            <literal-expression value="1" start-index="85" stop-index="85"/>
+                                            <parameter-marker-expression value="0" start-index="85" stop-index="85"/>
+                                        </right>
+                                    </binary-operation-expression>
+                                </expr>
+                            </where>
+                        </select>
+                    </subquery>
+                </exists-subquery>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_odbc_escape_syntax" parameters="'1994-02-04 12:23:00'">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
+        <projections start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7" />
+        </projections>
+        <where start-index="22" stop-index="33" literal-stop-index="53">
+            <expr>
+                <common-expression text="{ts ?}" literal-text="{ts '1994-02-04 12:23:00'}" start-index="28" stop-index="33" literal-stop-index="53"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_json_extract_sign">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="44">
+            <expr>
+                <common-expression text="order_id -&gt;&quot;$[1]&quot;" start-index="28" stop-index="44"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_json_unquote_extract_sign">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20"/>
+        </from>
+        <projections distinct-row="false" start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7"/>
+        </projections>
+        <where start-index="22" stop-index="46">
+            <expr>
+                <common-expression text="order_id -&gt;&gt; &quot;$[1]&quot;" start-index="28" stop-index="46"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_match" parameters="'keyword'">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
+        <projections start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7" />
+        </projections>
+        <where start-index="22" stop-index="80" literal-stop-index="88">
+            <expr>
+                <common-expression text="MATCH (order_id) AGAINST (? IN NATURAL LANGUAGE MODE)" literal-text="MATCH (order_id) AGAINST ('keyword' IN NATURAL LANGUAGE MODE)" start-index="28" stop-index="80" literal-stop-index="88"/>
+            </expr>
+        </where>
+    </select>
+
+    <select sql-case-id="select_where_with_simple_expr_with_case" parameters="1,'true','false'">
+        <from start-index="14" stop-index="20">
+            <simple-table name="t_order" start-index="14" stop-index="20" />
+        </from>
+        <projections start-index="7" stop-index="7">
+            <shorthand-projection start-index="7" stop-index="7" />
+        </projections>
+        <where start-index="22" stop-index="67" literal-stop-index="78">
+            <expr>
+                <common-expression text="CASE WHEN order_id &gt; ? THEN ? ELSE ? END" literal-text="CASE WHEN order_id > 1 THEN 'true' ELSE 'false' END" start-index="28" stop-index="67" literal-stop-index="78" />
+            </expr>
+        </where>
+    </select>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
index 9fb6899..86f473f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-group-by.xml
@@ -148,30 +148,51 @@
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="items_count" start-index="7" stop-index="14" />
         </projections>
         <where start-index="119" stop-index="174" literal-stop-index="175">
-            <and-predicate>
-                <predicate start-index="125" stop-index="143">
-                    <column-left-value name="user_id" start-index="125" stop-index="133">
-                        <owner name="o" start-index="125" stop-index="125" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="139" stop-index="139" />
-                        <parameter-marker-expression value="1" start-index="142" stop-index="142" />
-                        <literal-expression value="1" start-index="139" stop-index="139" />
-                        <literal-expression value="2" start-index="142" stop-index="142" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="149" stop-index="174" literal-stop-index="175">
-                    <column-left-value name="order_id" start-index="149" stop-index="158">
-                        <owner name="o" start-index="149" stop-index="149" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="168" stop-index="168" />
-                        <between-literal-expression value="9" start-index="168" stop-index="168" />
-                        <and-parameter-marker-expression value="3" start-index="174" stop-index="174" />
-                        <and-literal-expression value="10" start-index="174" stop-index="175" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="125" stop-index="174" literal-stop-index="175">
+                    <left>
+                        <in-expression start-index="125" stop-index="143">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="125" stop-index="133">
+                                    <owner name="o" start-index="125" stop-index="125" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="138" stop-index="143">
+                                    <items>
+                                        <literal-expression value="1" start-index="139" stop-index="139" />
+                                        <parameter-marker-expression value="0" start-index="139" stop-index="139" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="142" stop-index="142" />
+                                        <parameter-marker-expression value="1" start-index="142" stop-index="142" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="149" stop-index="174" literal-stop-index="175">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="149" stop-index="158">
+                                    <owner name="o" start-index="149" stop-index="149" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="168" stop-index="168" />
+                                <parameter-marker-expression value="2" start-index="168" stop-index="168" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="174" stop-index="175" />
+                                <parameter-marker-expression value="3" start-index="174" stop-index="174" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <group-by>
             <column-item name="user_id" start-index="185" stop-index="193" literal-start-index="186" literal-stop-index="194">
@@ -243,21 +264,30 @@
             <simple-table  name="t_order_item" start-delimiter="`" end-delimiter="`" start-index="91" stop-index="104" />
         </from>
         <projections start-index="7" stop-index="84">
-            <expression-projection alias="creation_date" start-index="7" stop-index="62" />
+            <expression-projection text="date_format(creation_date,  '%y-%m-%d')" alias="creation_date" start-index="7" stop-index="62" />
             <aggregation-projection type="COUNT" inner-expression="(*)" alias="c_number" start-index="65" stop-index="72" />
         </projections>
-        <where start-index="106" stop-index="130" literal-stop-index="135">
-            <and-predicate>
-                <predicate start-index="112" stop-index="129" literal-stop-index="135">
-                    <column-left-value name="order_id" start-index="112" stop-index="119" />
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
-                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
-                        <literal-expression value="1000" start-index="125" stop-index="128" />
-                        <literal-expression value="1100" start-index="131" stop-index="134" />
-                    </in-right-value>
-                </predicate>
-            </and-predicate>
+        <where start-index="106" stop-index="129" literal-stop-index="135">
+            <expr>
+                <in-expression start-index="112" stop-index="129" literal-stop-index="135">
+                    <not>false</not>
+                    <left>
+                        <column name="order_id" start-index="112" stop-index="119" />
+                    </left>
+                    <right>
+                        <list-expression start-index="124" stop-index="129" literal-stop-index="135">
+                            <items>
+                                <literal-expression value="1000" start-index="125" stop-index="128" />
+                                <parameter-marker-expression value="0" start-index="125" stop-index="125" />
+                            </items>
+                            <items>
+                                <literal-expression value="1100" start-index="131" stop-index="134" />
+                                <parameter-marker-expression value="1" start-index="128" stop-index="128" />
+                            </items>
+                        </list-expression>
+                    </right>
+                </in-expression>
+            </expr>
         </where>
         <group-by>
             <expression-item expression="date_format(creation_date,'%y-%m-%d')" start-index="140" stop-index="177" literal-start-index="146" literal-stop-index="183" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-into.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-into.xml
index 86bead0..91e2ea2 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-into.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-into.xml
@@ -25,16 +25,18 @@
             <column-projection name="status" start-index="7" stop-index="12"/>
         </projections>
         <where start-index="38" stop-index="55">
-            <and-predicate>
-                <predicate start-index="44" stop-index="55">
-                    <column-left-value name="order_id" start-index="44" stop-index="51"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="55" stop-index="55"/>
-                        <literal-expression value="1" start-index="55" stop-index="55"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="44" stop-index="55">
+                    <left>
+                        <column name="order_id" start-index="44" stop-index="51" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="55" stop-index="55" />
+                        <parameter-marker-expression value="0" start-index="55" stop-index="55" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -46,16 +48,18 @@
             <column-projection name="status" start-index="7" stop-index="12"/>
         </projections>
         <where start-index="27" stop-index="44">
-            <and-predicate>
-                <predicate start-index="33" stop-index="44">
-                    <column-left-value name="order_id" start-index="33" stop-index="40"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="44" stop-index="44"/>
-                        <literal-expression value="1" start-index="44" stop-index="44"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="44">
+                    <left>
+                        <column name="order_id" start-index="33" stop-index="40" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="44" stop-index="44" />
+                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -68,16 +72,18 @@
             <column-projection name="status" start-index="16" stop-index="21"/>
         </projections>
         <where start-index="36" stop-index="53">
-            <and-predicate>
-                <predicate start-index="42" stop-index="53">
-                    <column-left-value name="order_id" start-index="42" stop-index="49"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="53" stop-index="53"/>
-                        <literal-expression value="1" start-index="53" stop-index="53"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="42" stop-index="53">
+                    <left>
+                        <column name="order_id" start-index="42" stop-index="49" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="53" stop-index="53" />
+                        <parameter-marker-expression value="0" start-index="53" stop-index="53" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -150,16 +156,18 @@
             <column-projection name="status" start-index="7" stop-index="12"/>
         </projections>
         <where start-index="27" stop-index="44">
-            <and-predicate>
-                <predicate start-index="33" stop-index="44">
-                    <column-left-value name="order_id" start-index="33" stop-index="40"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="44" stop-index="44"/>
-                        <literal-expression value="1" start-index="44" stop-index="44"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="44">
+                    <left>
+                        <column name="order_id" start-index="33" stop-index="40" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="44" stop-index="44" />
+                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <lock start-index="57" stop-index="66"/>
     </select>
@@ -172,16 +180,18 @@
             <column-projection name="status" start-index="7" stop-index="12"/>
         </projections>
         <where start-index="27" stop-index="44">
-            <and-predicate>
-                <predicate start-index="33" stop-index="44">
-                    <column-left-value name="order_id" start-index="33" stop-index="40"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="44" stop-index="44"/>
-                        <literal-expression value="1" start-index="44" stop-index="44"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="44">
+                    <left>
+                        <column name="order_id" start-index="33" stop-index="40" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="44" stop-index="44" />
+                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <lock start-index="46" stop-index="55"/>
     </select>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
index ca7e641..d17f713 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-join.xml
@@ -46,18 +46,20 @@
             </shorthand-projection>
         </projections>
         <where start-index="79" stop-index="98" literal-stop-index="101">
-            <and-predicate>
-                <predicate start-index="85" stop-index="98" literal-stop-index="101">
-                    <column-left-value name="order_id" start-index="85" stop-index="94">
-                        <owner name="o" start-index="85" stop-index="85" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="98" stop-index="98" />
+            <expr>
+                <binary-operation-expression start-index="85" stop-index="98" literal-stop-index="101">
+                    <left>
+                        <column name="order_id" start-index="85" stop-index="94">
+                            <owner name="o" start-index="85" stop-index="85" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="98" stop-index="101" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="98" stop-index="98" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -90,18 +92,20 @@
             </shorthand-projection>
         </projections>
         <where start-index="97" stop-index="122" literal-stop-index="125">
-            <and-predicate>
-                <predicate start-index="103" stop-index="122" literal-stop-index="125">
-                    <column-left-value name="order_id" start-index="103" stop-index="118">
-                        <owner name="t_order" start-index="103" stop-index="109" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="122" stop-index="122" />
+            <expr>
+                <binary-operation-expression start-index="103" stop-index="122" literal-stop-index="125">
+                    <left>
+                        <column name="order_id" start-index="103" stop-index="118">
+                            <owner name="t_order" start-index="103" stop-index="109" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="122" stop-index="125" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="122" stop-index="122" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -122,18 +126,20 @@
             </shorthand-projection>
         </projections>
         <where start-index="62" stop-index="81" literal-stop-index="84">
-            <and-predicate>
-                <predicate start-index="68" stop-index="81" literal-stop-index="84">
-                    <column-left-value name="order_id" start-index="68" stop-index="77">
-                        <owner name="o" start-index="68" stop-index="68" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="81" stop-index="81" />
+            <expr>
+                <binary-operation-expression start-index="68" stop-index="81" literal-stop-index="84">
+                    <left>
+                        <column name="order_id" start-index="68" stop-index="77">
+                            <owner name="o" start-index="68" stop-index="68" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
                         <literal-expression value="1000" start-index="81" stop-index="84" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="81" stop-index="81" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-lock.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-lock.xml
index 10ff4ad..5f4ca0c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-lock.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-lock.xml
@@ -19,16 +19,18 @@
 <sql-parser-test-cases>
     <select sql-case-id="select_lock_with_lock_in" parameters="1">
         <where start-index="22" stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39"/>
-                        <literal-expression value="1" start-index="39" stop-index="39"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="39" stop-index="39" />
+                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="20">
             <simple-table name="t_order" start-index="14" stop-index="20"/>
@@ -41,16 +43,18 @@
 
     <select sql-case-id="select_lock_with_for_update" parameters="1">
         <where start-index="22" stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39"/>
-                        <literal-expression value="1" start-index="39" stop-index="39"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="39" stop-index="39" />
+                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="20">
             <simple-table name="t_order" start-index="14" stop-index="20"/>
@@ -63,16 +67,18 @@
 
     <select sql-case-id="select_lock_with_for_share" parameters="1">
         <where start-index="22" stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39"/>
-                        <literal-expression value="1" start-index="39" stop-index="39"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="39" stop-index="39" />
+                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="20">
             <simple-table name="t_order" start-index="14" stop-index="20"/>
@@ -85,16 +91,18 @@
 
     <select sql-case-id="select_lock_with_nowait" parameters="1">
         <where start-index="22" stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39"/>
-                        <literal-expression value="1" start-index="39" stop-index="39"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="39" stop-index="39" />
+                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="20">
             <simple-table name="t_order" start-index="14" stop-index="20"/>
@@ -107,16 +115,18 @@
 
     <select sql-case-id="select_lock_with_skip_locked" parameters="1">
         <where start-index="22" stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35"/>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39"/>
-                        <literal-expression value="1" start-index="39" stop-index="39"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="39">
+                    <left>
+                        <column name="order_id" start-index="28" stop-index="35" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="1" start-index="39" stop-index="39" />
+                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="20">
             <simple-table name="t_order" start-index="14" stop-index="20"/>
@@ -129,27 +139,40 @@
 
     <select sql-case-id="select_lock_with_of" parameters="1">
         <where start-index="36" stop-index="106">
-            <and-predicate>
-                <predicate start-index="42" stop-index="81">
-                    <column-left-value name="order_id" start-index="42" stop-index="57">
-                        <owner name="t_order" start-index="42" stop-index="48"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <column-right-value name="order_id" start-index="42" stop-index="57">
-                        <owner name="t_order" start-index="42" stop-index="48"/>
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="87" stop-index="106">
-                    <column-left-value name="order_id" start-index="87" stop-index="102">
-                        <owner name="t_order" start-index="87" stop-index="93"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="106" stop-index="106"/>
-                        <literal-expression value="1" start-index="106" stop-index="106"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="42" stop-index="106">
+                    <left>
+                        <binary-operation-expression start-index="42" stop-index="81">
+                            <left>
+                                <column name="order_id" start-index="42" stop-index="57">
+                                    <owner name="t_order" start-index="42" stop-index="48" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="61" stop-index="81">
+                                    <owner name="t_order_item" start-index="61" stop-index="72" />
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="87" stop-index="106">
+                            <left>
+                                <column name="order_id" start-index="87" stop-index="102">
+                                    <owner name="t_order" start-index="87" stop-index="93" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="106" stop-index="106" />
+                                <parameter-marker-expression value="0" start-index="106" stop-index="106" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="34">
             <join-table start-index="14" stop-index="34">
@@ -172,36 +195,60 @@
 
     <select sql-case-id="select_lock_with_of_multi_tables" parameters="1">
         <where start-index="44" stop-index="151">
-            <and-predicate>
-                <predicate start-index="50" stop-index="89">
-                    <column-left-value name="order_id" start-index="50" stop-index="65">
-                        <owner name="t_order" start-index="50" stop-index="56"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <column-right-value name="order_id" start-index="50" stop-index="65">
-                        <owner name="t_order" start-index="50" stop-index="56"/>
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="95" stop-index="126">
-                    <column-left-value name="user_id" start-index="95" stop-index="109">
-                        <owner name="t_order" start-index="95" stop-index="101"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <column-right-value name="user_id" start-index="95" stop-index="109">
-                        <owner name="t_order" start-index="95" stop-index="101"/>
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="132" stop-index="151">
-                    <column-left-value name="order_id" start-index="132" stop-index="147">
-                        <owner name="t_order" start-index="132" stop-index="138"/>
-                    </column-left-value>
-                    <operator type="="/>
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="151" stop-index="151"/>
-                        <literal-expression value="1" start-index="151" stop-index="151"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="50" stop-index="151">
+                    <left>
+                        <binary-operation-expression start-index="50" stop-index="126">
+                            <left>
+                                <binary-operation-expression start-index="50" stop-index="89">
+                                    <left>
+                                        <column name="order_id" start-index="50" stop-index="65">
+                                            <owner name="t_order" start-index="50" stop-index="56" />
+                                        </column>
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <column name="order_id" start-index="69" stop-index="89">
+                                            <owner name="t_order_item" start-index="69" stop-index="80" />
+                                        </column>
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <binary-operation-expression start-index="95" stop-index="126">
+                                    <left>
+                                        <column name="user_id" start-index="95" stop-index="109">
+                                            <owner name="t_order" start-index="95" stop-index="101" />
+                                        </column>
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <column name="user_id" start-index="113" stop-index="126">
+                                            <owner name="t_user" start-index="113" stop-index="118" />
+                                        </column>
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="132" stop-index="151">
+                            <left>
+                                <column name="order_id" start-index="132" stop-index="147">
+                                    <owner name="t_order" start-index="132" stop-index="138" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="151" stop-index="151" />
+                                <parameter-marker-expression value="0" start-index="151" stop-index="151" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <from start-index="14" stop-index="42">
             <join-table start-index="14" stop-index="42">
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
index 1a7454e..3338398 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-or.xml
@@ -25,26 +25,35 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="55">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="1" start-index="39" stop-index="39" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="44" stop-index="55">
-                    <column-left-value name="order_id" start-index="44" stop-index="51" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="55" stop-index="55" />
-                        <literal-expression value="2" start-index="55" stop-index="55" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="55">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="39">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="35" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="39" stop-index="39" />
+                                <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>OR</operator>
+                    <right>
+                        <binary-operation-expression start-index="44" stop-index="55">
+                            <left>
+                                <column name="order_id" start-index="44" stop-index="51" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="2" start-index="55" stop-index="55" />
+                                <parameter-marker-expression value="1" start-index="55" stop-index="55" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -56,26 +65,35 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="54">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="1" start-index="39" stop-index="39" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="44" stop-index="54">
-                    <column-left-value name="user_id" start-index="44" stop-index="50" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="54" stop-index="54" />
-                        <literal-expression value="2" start-index="54" stop-index="54" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="54">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="39">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="35" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="39" stop-index="39" />
+                                <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>OR</operator>
+                    <right>
+                        <binary-operation-expression start-index="44" stop-index="54">
+                            <left>
+                                <column name="user_id" start-index="44" stop-index="50" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="2" start-index="54" stop-index="54" />
+                                <parameter-marker-expression value="1" start-index="54" stop-index="54" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -87,26 +105,35 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="53" literal-stop-index="58">
-            <and-predicate>
-                <predicate start-index="28" stop-index="39">
-                    <column-left-value name="order_id" start-index="28" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="1" start-index="39" stop-index="39" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="44" stop-index="53" literal-stop-index="58">
-                    <column-left-value name="status" start-index="44" stop-index="49" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="53" stop-index="53" />
-                        <literal-expression value="init" start-index="53" stop-index="58" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="53" literal-stop-index="58">
+                    <left>
+                        <binary-operation-expression start-index="28" stop-index="39">
+                            <left>
+                                <column name="order_id" start-index="28" stop-index="35" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="39" stop-index="39" />
+                                <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>OR</operator>
+                    <right>
+                        <binary-operation-expression start-index="44" stop-index="53" literal-stop-index="58">
+                            <left>
+                                <column name="status" start-index="44" stop-index="49" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="53" stop-index="58" />
+                                <parameter-marker-expression value="1" start-index="53" stop-index="53" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -118,42 +145,52 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="71" literal-stop-index="76">
-            <and-predicate>
-                <predicate start-index="29" stop-index="40">
-                    <column-left-value name="order_id" start-index="29" stop-index="36" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="40" stop-index="40" />
-                        <literal-expression value="1" start-index="40" stop-index="40" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="61" stop-index="71" literal-start-index="66" literal-stop-index="76">
-                    <column-left-value name="user_id" start-index="61" stop-index="67" literal-start-index="66" literal-stop-index="72" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="71" stop-index="71" />
-                        <literal-expression value="3" start-index="76" stop-index="76" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="45" stop-index="54" literal-stop-index="59">
-                    <column-left-value name="status" start-index="45" stop-index="50" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="54" stop-index="54" />
-                        <literal-expression value="init" start-index="54" stop-index="59" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="61" stop-index="71" literal-start-index="66" literal-stop-index="76">
-                    <column-left-value name="user_id" start-index="61" stop-index="67" literal-start-index="66" literal-stop-index="72" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="71" stop-index="71" />
-                        <literal-expression value="3" start-index="76" stop-index="76" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="71" literal-stop-index="76">
+                    <left>
+                        <binary-operation-expression start-index="29" stop-index="54" literal-stop-index="59">
+                            <left>
+                                <binary-operation-expression start-index="29" stop-index="40">
+                                    <left>
+                                        <column name="order_id" start-index="29" stop-index="36" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1" start-index="40" stop-index="40" />
+                                        <parameter-marker-expression value="0" start-index="40" stop-index="40" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>OR</operator>
+                            <right>
+                                <binary-operation-expression start-index="45" stop-index="54" literal-stop-index="59">
+                                    <left>
+                                        <column name="status" start-index="45" stop-index="50" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="init" start-index="54" stop-index="59" />
+                                        <parameter-marker-expression value="1" start-index="54" stop-index="54" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="61" stop-index="71" literal-start-index="66" literal-stop-index="76">
+                            <left>
+                                <column name="user_id" start-index="61" stop-index="67" literal-start-index="66" literal-stop-index="72" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="3" start-index="76" stop-index="76" />
+                                <parameter-marker-expression value="2" start-index="71" stop-index="71" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -165,110 +202,86 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="113" literal-stop-index="118">
-            <and-predicate>
-                <predicate start-index="30" stop-index="39" literal-stop-index="44">
-                    <column-left-value name="status" start-index="30" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="init" start-index="39" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="46" stop-index="57" literal-start-index="51" literal-stop-index="62">
-                    <column-left-value name="order_id" start-index="46" stop-index="53" literal-start-index="51" literal-stop-index="58" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="57" stop-index="57" />
-                        <literal-expression value="1" start-index="62" stop-index="62" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="83" stop-index="93" literal-start-index="88" literal-stop-index="98">
-                    <column-left-value name="user_id" start-index="83" stop-index="89" literal-start-index="88" literal-stop-index="94" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="3" start-index="93" stop-index="93" />
-                        <literal-expression value="3" start-index="98" stop-index="98" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="30" stop-index="39" literal-stop-index="44">
-                    <column-left-value name="status" start-index="30" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="init" start-index="39" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="46" stop-index="57" literal-start-index="51" literal-stop-index="62">
-                    <column-left-value name="order_id" start-index="46" stop-index="53" literal-start-index="51" literal-stop-index="58" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="57" stop-index="57" />
-                        <literal-expression value="1" start-index="62" stop-index="62" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="99" stop-index="109" literal-start-index="104" literal-stop-index="114">
-                    <column-left-value name="user_id" start-index="99" stop-index="105" literal-start-index="104" literal-stop-index="110" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="4" start-index="109" stop-index="109" />
-                        <literal-expression value="4" start-index="114" stop-index="114" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="30" stop-index="39" literal-stop-index="44">
-                    <column-left-value name="status" start-index="30" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="init" start-index="39" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="63" stop-index="74" literal-start-index="68" literal-stop-index="79">
-                    <column-left-value name="order_id" start-index="63" stop-index="70" literal-start-index="68" literal-stop-index="75" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="74" stop-index="74" />
-                        <literal-expression value="2" start-index="79" stop-index="79" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="83" stop-index="93" literal-start-index="88" literal-stop-index="98">
-                    <column-left-value name="user_id" start-index="83" stop-index="89" literal-start-index="88" literal-stop-index="94" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="3" start-index="93" stop-index="93" />
-                        <literal-expression value="3" start-index="98" stop-index="98" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="30" stop-index="39" literal-stop-index="44">
-                    <column-left-value name="status" start-index="30" stop-index="35" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
-                        <literal-expression value="init" start-index="39" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="63" stop-index="74" literal-start-index="68" literal-stop-index="79">
-                    <column-left-value name="order_id" start-index="63" stop-index="70" literal-start-index="68" literal-stop-index="75" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="74" stop-index="74" />
-                        <literal-expression value="2" start-index="79" stop-index="79" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="99" stop-index="109" literal-start-index="104" literal-stop-index="114">
-                    <column-left-value name="user_id" start-index="99" stop-index="105" literal-start-index="104" literal-stop-index="110" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="4" start-index="109" stop-index="109" />
-                        <literal-expression value="4" start-index="114" stop-index="114" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="30" stop-index="111" literal-stop-index="116">
+                    <left>
+                        <binary-operation-expression start-index="30" stop-index="76" literal-stop-index="81">
+                            <left>
+                                <binary-operation-expression start-index="30" stop-index="39" literal-stop-index="44">
+                                    <left>
+                                        <column name="status" start-index="30" stop-index="35" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="init" start-index="39" stop-index="44" />
+                                        <parameter-marker-expression value="0" start-index="39" stop-index="39" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <binary-operation-expression start-index="46" stop-index="75" literal-start-index="51" literal-stop-index="80">
+                                    <left>
+                                        <binary-operation-expression start-index="46" stop-index="57" literal-start-index="51" literal-stop-index="62">
+                                            <left>
+                                                <column name="order_id" start-index="46" stop-index="53" literal-start-index="51" literal-stop-index="58" />
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <literal-expression value="1" start-index="62" stop-index="62" />
+                                                <parameter-marker-expression value="1" start-index="57" stop-index="57" />
+                                            </right>
+                                        </binary-operation-expression>
+                                    </left>
+                                    <operator>OR</operator>
+                                    <right>
+                                        <binary-operation-expression start-index="63" stop-index="74" literal-start-index="68" literal-stop-index="79">
+                                            <left>
+                                                <column name="order_id" start-index="63" stop-index="70" literal-start-index="68" literal-stop-index="75" />
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <literal-expression value="2" start-index="79" stop-index="79" />
+                                                <parameter-marker-expression value="2" start-index="74" stop-index="74" />
+                                            </right>
+                                        </binary-operation-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="83" stop-index="110" literal-start-index="88" literal-stop-index="115">
+                            <left>
+                                <binary-operation-expression start-index="83" stop-index="93" literal-start-index="88" literal-stop-index="98">
+                                    <left>
+                                        <column name="user_id" start-index="83" stop-index="89" literal-start-index="88" literal-stop-index="94" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="3" start-index="98" stop-index="98" />
+                                        <parameter-marker-expression value="3" start-index="93" stop-index="93" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>OR</operator>
+                            <right>
+                                <binary-operation-expression start-index="99" stop-index="109" literal-start-index="104" literal-stop-index="114">
+                                    <left>
+                                        <column name="user_id" start-index="99" stop-index="105" literal-start-index="104" literal-stop-index="110" />
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="4" start-index="114" stop-index="114" />
+                                        <parameter-marker-expression value="4" start-index="109" stop-index="109" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -309,50 +322,58 @@
             </shorthand-projection>
         </projections>
         <where start-index="99" stop-index="156">
-            <and-predicate>
-                <predicate start-index="106" stop-index="119">
-                    <column-left-value name="order_id" start-index="106" stop-index="115">
-                        <owner name="o" start-index="106" stop-index="106" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
-                        <literal-expression value="1" start-index="119" stop-index="119" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="144" stop-index="156">
-                    <column-left-value name="user_id" start-index="144" stop-index="152">
-                        <owner name="o" start-index="144" stop-index="144" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="156" stop-index="156" />
-                        <literal-expression value="3" start-index="156" stop-index="156" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="124" stop-index="137">
-                    <column-left-value name="order_id" start-index="124" stop-index="133">
-                        <owner name="o" start-index="124" stop-index="124" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="137" stop-index="137" />
-                        <literal-expression value="2" start-index="137" stop-index="137" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="144" stop-index="156">
-                    <column-left-value name="user_id" start-index="144" stop-index="152">
-                        <owner name="o" start-index="144" stop-index="144" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="156" stop-index="156" />
-                        <literal-expression value="3" start-index="156" stop-index="156" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="105" stop-index="156">
+                    <left>
+                        <binary-operation-expression start-index="106" stop-index="137">
+                            <left>
+                                <binary-operation-expression start-index="106" stop-index="119">
+                                    <left>
+                                        <column name="order_id" start-index="106" stop-index="115">
+                                            <owner name="o" start-index="106" stop-index="106" />
+                                        </column>
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="1" start-index="119" stop-index="119" />
+                                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>OR</operator>
+                            <right>
+                                <binary-operation-expression start-index="124" stop-index="137">
+                                    <left>
+                                        <column name="order_id" start-index="124" stop-index="133">
+                                            <owner name="o" start-index="124" stop-index="124" />
+                                        </column>
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="2" start-index="137" stop-index="137" />
+                                        <parameter-marker-expression value="1" start-index="137" stop-index="137" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="144" stop-index="156">
+                            <left>
+                                <column name="user_id" start-index="144" stop-index="152">
+                                    <owner name="o" start-index="144" stop-index="144" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="3" start-index="156" stop-index="156" />
+                                <parameter-marker-expression value="2" start-index="156" stop-index="156" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -412,70 +433,77 @@
             </shorthand-projection>
         </projections>
         <where start-index="147" stop-index="221" literal-stop-index="226">
-            <and-predicate>
-                <predicate start-index="154" stop-index="167">
-                    <column-left-value name="order_id" start-index="154" stop-index="163">
-                        <owner name="o" start-index="154" stop-index="154" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="167" stop-index="167" />
-                        <literal-expression value="1" start-index="167" stop-index="167" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="192" stop-index="204">
-                    <column-left-value name="user_id" start-index="192" stop-index="200">
-                        <owner name="o" start-index="192" stop-index="192" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="204" stop-index="204" />
-                        <literal-expression value="3" start-index="204" stop-index="204" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="210" stop-index="221" literal-stop-index="226">
-                    <column-left-value name="status" start-index="210" stop-index="217">
-                        <owner name="o" start-index="210" stop-index="210" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="3" start-index="221" stop-index="221" />
-                        <literal-expression value="init" start-index="221" stop-index="226" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
-            <and-predicate>
-                <predicate start-index="172" stop-index="185">
-                    <column-left-value name="order_id" start-index="172" stop-index="181">
-                        <owner name="o" start-index="172" stop-index="172" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="185" stop-index="185" />
-                        <literal-expression value="2" start-index="185" stop-index="185" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="192" stop-index="204">
-                    <column-left-value name="user_id" start-index="192" stop-index="200">
-                        <owner name="o" start-index="192" stop-index="192" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="2" start-index="204" stop-index="204" />
-                        <literal-expression value="3" start-index="204" stop-index="204" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="210" stop-index="221" literal-stop-index="226">
-                    <column-left-value name="status" start-index="210" stop-index="217">
-                        <owner name="o" start-index="210" stop-index="210" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="3" start-index="221" stop-index="221" />
-                        <literal-expression value="init" start-index="221" stop-index="226" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="153" stop-index="221" literal-stop-index="226">
+                    <left>
+                        <binary-operation-expression start-index="153" stop-index="204">
+                            <left>
+                                <binary-operation-expression start-index="154" stop-index="185">
+                                    <left>
+                                        <binary-operation-expression start-index="154" stop-index="167">
+                                            <left>
+                                                <column name="order_id" start-index="154" stop-index="163">
+                                                    <owner name="o" start-index="154" stop-index="154" />
+                                                </column>
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <literal-expression value="1" start-index="167" stop-index="167" />
+                                                <parameter-marker-expression value="0" start-index="167" stop-index="167" />
+                                            </right>
+                                        </binary-operation-expression>
+                                    </left>
+                                    <operator>OR</operator>
+                                    <right>
+                                        <binary-operation-expression start-index="172" stop-index="185">
+                                            <left>
+                                                <column name="order_id" start-index="172" stop-index="181">
+                                                    <owner name="o" start-index="172" stop-index="172" />
+                                                </column>
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
+                                                <literal-expression value="2" start-index="185" stop-index="185" />
+                                                <parameter-marker-expression value="1" start-index="185" stop-index="185" />
+                                            </right>
+                                        </binary-operation-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </left>
+                            <operator>AND</operator>
+                            <right>
+                                <binary-operation-expression start-index="192" stop-index="204">
+                                    <left>
+                                        <column name="user_id" start-index="192" stop-index="200">
+                                            <owner name="o" start-index="192" stop-index="192" />
+                                        </column>
+                                    </left>
+                                    <operator>=</operator>
+                                    <right>
+                                        <literal-expression value="3" start-index="204" stop-index="204" />
+                                        <parameter-marker-expression value="2" start-index="204" stop-index="204" />
+                                    </right>
+                                </binary-operation-expression>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="210" stop-index="221" literal-stop-index="226">
+                            <left>
+                                <column name="status" start-index="210" stop-index="217">
+                                    <owner name="o" start-index="210" stop-index="210" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="221" stop-index="226" />
+                                <parameter-marker-expression value="3" start-index="221" stop-index="221" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
index e7ef615..5e0235d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-order-by.xml
@@ -49,27 +49,39 @@
             </shorthand-projection>
         </projections>
         <where start-index="42" stop-index="92">
-            <and-predicate>
-                <predicate start-index="48" stop-index="70">
-                    <column-left-value name="order_id" start-index="48" stop-index="57">
-                        <owner name="o" start-index="48" stop-index="48" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <column-right-value name="order_id" start-index="61" stop-index="70">
-                        <owner name="i" start-index="61" stop-index="61" />
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="76" stop-index="92">
-                    <column-left-value name="status" start-index="76" stop-index="83">
-                        <owner name="o" start-index="76" stop-index="76" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" />
-                        <literal-expression value="init" start-index="87" stop-index="92" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="48" stop-index="92">
+                    <left>
+                        <binary-operation-expression start-index="48" stop-index="70">
+                            <left>
+                                <column name="order_id" start-index="48" stop-index="57">
+                                    <owner name="o" start-index="48" stop-index="48" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="61" stop-index="70">
+                                    <owner name="i" start-index="61" stop-index="61" />
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="76" stop-index="92">
+                            <left>
+                                <column name="status" start-index="76" stop-index="83">
+                                    <owner name="o" start-index="76" stop-index="76" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="87" stop-index="92" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="order_id" order-direction="DESC" start-index="103" stop-index="112">
@@ -112,26 +124,39 @@
             </shorthand-projection>
         </projections>
         <where start-index="42" stop-index="92">
-            <and-predicate>
-                <predicate start-index="48" stop-index="70">
-                    <column-left-value name="order_id" start-index="48" stop-index="57">
-                        <owner name="o" start-index="48" stop-index="48" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <column-right-value name="order_id" start-index="61" stop-index="70">
-                        <owner name="i" start-index="61" stop-index="61" />
-                    </column-right-value>
-                </predicate>
-                <predicate start-index="76" stop-index="92">
-                    <column-left-value name="status" start-index="76" stop-index="83">
-                        <owner name="o" start-index="76" stop-index="76" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <literal-expression value="init" start-index="87" stop-index="92" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="48" stop-index="92">
+                    <left>
+                        <binary-operation-expression start-index="48" stop-index="70">
+                            <left>
+                                <column name="order_id" start-index="48" stop-index="57">
+                                    <owner name="o" start-index="48" stop-index="48" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <column name="order_id" start-index="61" stop-index="70">
+                                    <owner name="i" start-index="61" stop-index="61" />
+                                </column>
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="76" stop-index="92">
+                            <left>
+                                <column name="status" start-index="76" stop-index="83">
+                                    <owner name="o" start-index="76" stop-index="76" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="init" start-index="87" stop-index="92" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="creation_date" order-direction="DESC" start-index="103" stop-index="117">
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
index 55efd35..0e621bf 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -21,27 +20,27 @@
         <from>
             <join-table>
                 <left>
-                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30" />
+                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30"/>
                 </left>
                 <right>
-                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50" />
+                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50"/>
                 </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="55" stop-index="75">
                             <column-left-value name="user_id" start-index="55" stop-index="63">
-                                <owner name="o" start-index="55" stop-index="55" />
+                                <owner name="o" start-index="55" stop-index="55"/>
                             </column-left-value>
                             <column-right-value name="user_id" start-index="67" stop-index="75">
-                                <owner name="i" start-index="67" stop-index="67" />
+                                <owner name="i" start-index="67" stop-index="67"/>
                             </column-right-value>
                         </predicate>
                         <predicate start-index="81" stop-index="103">
                             <column-left-value name="order_id" start-index="81" stop-index="90">
-                                <owner name="o" start-index="81" stop-index="81" />
+                                <owner name="o" start-index="81" stop-index="81"/>
                             </column-left-value>
                             <column-right-value name="order_id" start-index="94" stop-index="103">
-                                <owner name="i" start-index="94" stop-index="94" />
+                                <owner name="i" start-index="94" stop-index="94"/>
                             </column-right-value>
                         </predicate>
                     </and-predicate>
@@ -50,48 +49,69 @@
         </from>
         <projections start-index="7" stop-index="15">
             <column-projection name="user_id" start-index="7" stop-index="15">
-                <owner name="i" start-index="7" stop-index="7" />
+                <owner name="i" start-index="7" stop-index="7"/>
             </column-projection>
         </projections>
         <where start-index="105" stop-index="160" literal-stop-index="161">
-            <and-predicate>
-                <predicate start-index="111" stop-index="129">
-                    <column-left-value name="user_id" start-index="111" stop-index="119">
-                        <owner name="o" start-index="111" stop-index="111" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
-                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
-                        <literal-expression value="1" start-index="125" stop-index="125" />
-                        <literal-expression value="2" start-index="128" stop-index="128" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="135" stop-index="160" literal-stop-index="161">
-                    <column-left-value name="order_id" start-index="135" stop-index="144">
-                        <owner name="o" start-index="135" stop-index="135" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="154" stop-index="154" />
-                        <between-literal-expression value="9" start-index="154" stop-index="154" />
-                        <and-parameter-marker-expression value="3" start-index="160" stop-index="160" />
-                        <and-literal-expression value="10" start-index="160" stop-index="161"/>
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="111" stop-index="160" literal-stop-index="161">
+                    <left>
+                        <in-expression start-index="111" stop-index="129">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="111" stop-index="119">
+                                    <owner name="o" start-index="111" stop-index="111"/>
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="124" stop-index="129">
+                                    <items>
+                                        <literal-expression value="1" start-index="125" stop-index="125"/>
+                                        <parameter-marker-expression value="0" start-index="125" stop-index="125"/>
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="128" stop-index="128"/>
+                                        <parameter-marker-expression value="1" start-index="128" stop-index="128"/>
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="135" stop-index="160" literal-stop-index="161">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="135" stop-index="144">
+                                    <owner name="o" start-index="135" stop-index="135"/>
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="154" stop-index="154"/>
+                                <parameter-marker-expression value="2" start-index="154" stop-index="154"/>
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="160" stop-index="161"/>
+                                <parameter-marker-expression value="3" start-index="160" stop-index="160"/>
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <group-by>
             <column-item name="item_id" start-index="171" stop-index="179" literal-start-index="172" literal-stop-index="180">
-                <owner name="i" start-index="171" stop-index="171" literal-start-index="172" literal-stop-index="172" />
+                <owner name="i" start-index="171" stop-index="171" literal-start-index="172" literal-stop-index="172"/>
             </column-item>
         </group-by>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="190" stop-index="198" literal-start-index="191" literal-stop-index="199">
-                <owner name="i" start-index="190" stop-index="190" literal-start-index="191" literal-stop-index="191" />
+                <owner name="i" start-index="190" stop-index="190" literal-start-index="191" literal-stop-index="191"/>
             </column-item>
         </order-by>
         <limit start-index="205" stop-index="214" literal-start-index="206" literal-stop-index="215">
-            <offset value="5" parameter-index="4" start-index="211" stop-index="211" literal-start-index="212" literal-stop-index="212" />
-            <row-count value="3" parameter-index="5" start-index="214" stop-index="214" literal-start-index="215" literal-stop-index="215" />
+            <offset value="5" parameter-index="4" start-index="211" stop-index="211" literal-start-index="212" literal-stop-index="212"/>
+            <row-count value="3" parameter-index="5" start-index="214" stop-index="214" literal-start-index="215" literal-stop-index="215"/>
         </limit>
     </select>
 
@@ -99,27 +119,27 @@
         <from>
             <join-table>
                 <left>
-                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30" />
+                    <simple-table name="t_order" alias="o" start-index="22" stop-index="30"/>
                 </left>
                 <right>
-                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50" />
+                    <simple-table name="t_order_item" alias="i" start-index="37" stop-index="50"/>
                 </right>
                 <joinSpecification>
                     <and-predicate>
                         <predicate start-index="55" stop-index="75">
                             <column-left-value name="user_id" start-index="55" stop-index="63">
-                                <owner name="o" start-index="55" stop-index="55" />
+                                <owner name="o" start-index="55" stop-index="55"/>
                             </column-left-value>
                             <column-right-value name="user_id" start-index="67" stop-index="75">
-                                <owner name="i" start-index="67" stop-index="67" />
+                                <owner name="i" start-index="67" stop-index="67"/>
                             </column-right-value>
                         </predicate>
                         <predicate start-index="81" stop-index="103">
                             <column-left-value name="order_id" start-index="81" stop-index="90">
-                                <owner name="o" start-index="81" stop-index="81" />
+                                <owner name="o" start-index="81" stop-index="81"/>
                             </column-left-value>
                             <column-right-value name="order_id" start-index="94" stop-index="103">
-                                <owner name="i" start-index="94" stop-index="94" />
+                                <owner name="i" start-index="94" stop-index="94"/>
                             </column-right-value>
                         </predicate>
                     </and-predicate>
@@ -128,54 +148,75 @@
         </from>
         <projections start-index="7" stop-index="15">
             <column-projection name="user_id" start-index="7" stop-index="15">
-                <owner name="i" start-index="7" stop-index="7" />
+                <owner name="i" start-index="7" stop-index="7"/>
             </column-projection>
         </projections>
         <where start-index="105" stop-index="160" literal-stop-index="161">
-            <and-predicate>
-                <predicate start-index="111" stop-index="129">
-                    <column-left-value name="user_id" start-index="111" stop-index="119">
-                        <owner name="o" start-index="111" stop-index="111" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
-                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
-                        <literal-expression value="1" start-index="125" stop-index="125" />
-                        <literal-expression value="2" start-index="128" stop-index="128" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="135" stop-index="160" literal-stop-index="161">
-                    <column-left-value name="order_id" start-index="135" stop-index="144">
-                        <owner name="o" start-index="135" stop-index="135" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="154" stop-index="154" />
-                        <between-literal-expression value="9" start-index="154" stop-index="154" />
-                        <and-parameter-marker-expression value="3" start-index="160" stop-index="160" />
-                        <and-literal-expression value="10" start-index="160" stop-index="161" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="111" stop-index="160" literal-stop-index="161">
+                    <left>
+                        <in-expression start-index="111" stop-index="129">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="111" stop-index="119">
+                                    <owner name="o" start-index="111" stop-index="111"/>
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="124" stop-index="129">
+                                    <items>
+                                        <literal-expression value="1" start-index="125" stop-index="125"/>
+                                        <parameter-marker-expression value="0" start-index="125" stop-index="125"/>
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="128" stop-index="128"/>
+                                        <parameter-marker-expression value="1" start-index="128" stop-index="128"/>
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="135" stop-index="160" literal-stop-index="161">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="135" stop-index="144">
+                                    <owner name="o" start-index="135" stop-index="135"/>
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="154" stop-index="154"/>
+                                <parameter-marker-expression value="2" start-index="154" stop-index="154"/>
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="160" stop-index="161"/>
+                                <parameter-marker-expression value="3" start-index="160" stop-index="160"/>
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <group-by>
             <column-item name="user_id" start-index="171" stop-index="179" literal-start-index="172" literal-stop-index="180">
-                <owner name="i" start-index="171" stop-index="171" literal-start-index="172" literal-stop-index="172" />
+                <owner name="i" start-index="171" stop-index="171" literal-start-index="172" literal-stop-index="172"/>
             </column-item>
         </group-by>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="190" stop-index="198" literal-start-index="191" literal-stop-index="199">
-                <owner name="i" start-index="190" stop-index="190" literal-start-index="191" literal-stop-index="191" />
+                <owner name="i" start-index="190" stop-index="190" literal-start-index="191" literal-stop-index="191"/>
             </column-item>
         </order-by>
         <limit start-index="205" stop-index="214" literal-start-index="206" literal-stop-index="215">
-            <offset value="5" parameter-index="4" start-index="211" stop-index="211" literal-start-index="212" literal-stop-index="212" />
-            <row-count value="3" parameter-index="5" start-index="214" stop-index="214" literal-start-index="215" literal-stop-index="215" />
+            <offset value="5" parameter-index="4" start-index="211" stop-index="211" literal-start-index="212" literal-stop-index="212"/>
+            <row-count value="3" parameter-index="5" start-index="214" stop-index="214" literal-start-index="215" literal-stop-index="215"/>
         </limit>
     </select>
 
     <select sql-case-id="select_pagination_with_top_and_group_by_and_order_by" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -183,45 +224,45 @@
                     <select>
                         <projections start-index="22" stop-index="158">
                             <top-projection alias="rownum_" start-index="22" stop-index="70">
-                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="84" stop-index="92">
-                                <owner name="i" start-index="84" stop-index="84" />
+                                <owner name="i" start-index="84" stop-index="84"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
-                                <owner name="o" start-index="95" stop-index="95" />
+                                <owner name="o" start-index="95" stop-index="95"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="119" stop-index="126">
-                                <owner name="o" start-index="119" stop-index="119" />
+                                <owner name="o" start-index="119" stop-index="119"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
-                                <owner name="o" start-index="139" stop-index="139" />
+                                <owner name="o" start-index="139" stop-index="139"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o" />
+                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i" />
+                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="198" stop-index="218">
                                             <column-left-value name="user_id" start-index="198" stop-index="206">
-                                                <owner name="o" start-index="198" stop-index="198" />
+                                                <owner name="o" start-index="198" stop-index="198"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="210" stop-index="218">
-                                                <owner name="i" start-index="210" stop-index="210" />
+                                                <owner name="i" start-index="210" stop-index="210"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="224" stop-index="246">
                                             <column-left-value name="order_id" start-index="224" stop-index="233">
-                                                <owner name="o" start-index="224" stop-index="224" />
+                                                <owner name="o" start-index="224" stop-index="224"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="237" stop-index="246">
-                                                <owner name="i" start-index="237" stop-index="237" />
+                                                <owner name="i" start-index="237" stop-index="237"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -229,34 +270,55 @@
                             </join-table>
                         </from>
                         <where start-index="248" stop-index="303" literal-stop-index="304">
-                            <and-predicate>
-                                <predicate start-index="254" stop-index="272">
-                                    <column-left-value name="user_id" start-index="254" stop-index="262">
-                                        <owner name="o" start-index="254" stop-index="254" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
-                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
-                                        <literal-expression value="1" start-index="268" stop-index="268" />
-                                        <literal-expression value="2" start-index="271" stop-index="271" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="278" stop-index="303" literal-stop-index="304">
-                                    <column-left-value name="order_id" start-index="278" stop-index="287">
-                                        <owner name="o" start-index="278" stop-index="278" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
-                                        <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
-                                        <between-literal-expression value="9" start-index="297" stop-index="297" />
-                                        <and-literal-expression value="10" start-index="303" stop-index="304" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="254" stop-index="303" literal-stop-index="304">
+                                    <left>
+                                        <in-expression start-index="254" stop-index="272">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="254" stop-index="262">
+                                                    <owner name="o" start-index="254" stop-index="254" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="267" stop-index="272">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="268" stop-index="268" />
+                                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="271" stop-index="271" />
+                                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="278" stop-index="303" literal-stop-index="304">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="278" stop-index="287">
+                                                    <owner name="o" start-index="278" stop-index="278" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="297" stop-index="297" />
+                                                <parameter-marker-expression value="3" start-index="297" stop-index="297" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="303" stop-index="304" />
+                                                <parameter-marker-expression value="4" start-index="303" stop-index="303" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="item_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
-                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
+                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -264,24 +326,26 @@
             </subquery-table>
         </from>
         <where start-index="333" stop-index="354" literal-start-index="334" literal-stop-index="355">
-            <and-predicate>
-                <predicate start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
-                    <column-left-value start-index="339" stop-index="350" literal-start-index="340" literal-stop-index="351" name="rownum_">
-                        <owner start-index="339" stop-index="342" literal-start-index="340" literal-stop-index="343" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="354" stop-index="354" value="5" />
-                        <literal-expression start-index="355" stop-index="355" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
+                    <left>
+                        <column name="rownum_" start-index="339" stop-index="350" literal-start-index="340" literal-stop-index="351">
+                            <owner name="row_" start-index="339" stop-index="342" literal-start-index="340" literal-stop-index="343" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="355" stop-index="355" />
+                        <parameter-marker-expression value="5" start-index="354" stop-index="354" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_percent_with_ties_and_group_by_and_order_by" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -289,45 +353,45 @@
                     <select>
                         <projections start-index="22" stop-index="176">
                             <top-projection alias="rownum_" start-index="22" stop-index="88">
-                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="102" stop-index="110">
-                                <owner name="i" start-index="102" stop-index="102" />
+                                <owner name="i" start-index="102" stop-index="102"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
-                                <owner name="o" start-index="113" stop-index="113" />
+                                <owner name="o" start-index="113" stop-index="113"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="137" stop-index="144">
-                                <owner name="o" start-index="137" stop-index="137" />
+                                <owner name="o" start-index="137" stop-index="137"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
-                                <owner name="o" start-index="157" stop-index="157" />
+                                <owner name="o" start-index="157" stop-index="157"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o" />
+                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i" />
+                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="216" stop-index="236">
                                             <column-left-value name="user_id" start-index="216" stop-index="224">
-                                                <owner name="o" start-index="216" stop-index="216" />
+                                                <owner name="o" start-index="216" stop-index="216"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="228" stop-index="236">
-                                                <owner name="i" start-index="228" stop-index="228" />
+                                                <owner name="i" start-index="228" stop-index="228"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="242" stop-index="264">
                                             <column-left-value name="order_id" start-index="242" stop-index="251">
-                                                <owner name="o" start-index="242" stop-index="242" />
+                                                <owner name="o" start-index="242" stop-index="242"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="255" stop-index="264">
-                                                <owner name="i" start-index="255" stop-index="255" />
+                                                <owner name="i" start-index="255" stop-index="255"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -335,34 +399,55 @@
                             </join-table>
                         </from>
                         <where start-index="266" stop-index="321" literal-stop-index="322">
-                            <and-predicate>
-                                <predicate start-index="272" stop-index="290">
-                                    <column-left-value name="user_id" start-index="272" stop-index="280">
-                                        <owner name="o" start-index="272" stop-index="272" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
-                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
-                                        <literal-expression value="1" start-index="286" stop-index="286" />
-                                        <literal-expression value="2" start-index="289" stop-index="289" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="296" stop-index="321" literal-stop-index="322">
-                                    <column-left-value name="order_id" start-index="296" stop-index="305">
-                                        <owner name="o" start-index="296" stop-index="296" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
-                                        <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
-                                        <between-literal-expression value="9" start-index="315" stop-index="315" />
-                                        <and-literal-expression value="10" start-index="321" stop-index="322" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="272" stop-index="321" literal-stop-index="322">
+                                    <left>
+                                        <in-expression start-index="272" stop-index="290">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="272" stop-index="280">
+                                                    <owner name="o" start-index="272" stop-index="272" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="285" stop-index="290">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="286" stop-index="286" />
+                                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="289" stop-index="289" />
+                                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="296" stop-index="321" literal-stop-index="322">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="296" stop-index="305">
+                                                    <owner name="o" start-index="296" stop-index="296" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="315" stop-index="315" />
+                                                <parameter-marker-expression value="3" start-index="315" stop-index="315" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="321" stop-index="322" />
+                                                <parameter-marker-expression value="4" start-index="321" stop-index="321" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="item_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
-                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
+                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -370,24 +455,26 @@
             </subquery-table>
         </from>
         <where start-index="351" stop-index="372" literal-start-index="352" literal-stop-index="373">
-            <and-predicate>
-                <predicate start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
-                    <column-left-value start-index="357" stop-index="368" literal-start-index="358" literal-stop-index="369" name="rownum_">
-                        <owner start-index="357" stop-index="360" literal-start-index="358" literal-stop-index="361" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="372" stop-index="372" value="5" />
-                        <literal-expression start-index="373" stop-index="373" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
+                    <left>
+                        <column name="rownum_" start-index="357" stop-index="368" literal-start-index="358" literal-stop-index="369">
+                            <owner name="row_" start-index="357" stop-index="360" literal-start-index="358" literal-stop-index="361" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="373" stop-index="373" />
+                        <parameter-marker-expression value="5" start-index="372" stop-index="372" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_and_group_by_and_order_by_and_parentheses" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -395,45 +482,45 @@
                     <select>
                         <projections start-index="22" stop-index="160">
                             <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="86" stop-index="94">
-                                <owner name="i" start-index="86" stop-index="86" />
+                                <owner name="i" start-index="86" stop-index="86"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                <owner name="o" start-index="97" stop-index="97" />
+                                <owner name="o" start-index="97" stop-index="97"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                <owner name="o" start-index="121" stop-index="121" />
+                                <owner name="o" start-index="121" stop-index="121"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                <owner name="o" start-index="141" stop-index="141" />
+                                <owner name="o" start-index="141" stop-index="141"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="200" stop-index="220">
                                             <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                <owner name="o" start-index="200" stop-index="200" />
+                                                <owner name="o" start-index="200" stop-index="200"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                <owner name="i" start-index="212" stop-index="212" />
+                                                <owner name="i" start-index="212" stop-index="212"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="226" stop-index="248">
                                             <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                <owner name="o" start-index="226" stop-index="226" />
+                                                <owner name="o" start-index="226" stop-index="226"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                <owner name="i" start-index="239" stop-index="239" />
+                                                <owner name="i" start-index="239" stop-index="239"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -441,34 +528,55 @@
                             </join-table>
                         </from>
                         <where start-index="250" stop-index="305" literal-stop-index="306">
-                            <and-predicate>
-                                <predicate start-index="256" stop-index="274">
-                                    <column-left-value name="user_id" start-index="256" stop-index="264">
-                                        <owner name="o" start-index="256" stop-index="256" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                        <literal-expression value="1" start-index="270" stop-index="270" />
-                                        <literal-expression value="2" start-index="273" stop-index="273" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                    <column-left-value name="order_id" start-index="280" stop-index="289">
-                                        <owner name="o" start-index="280" stop-index="280" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="256" stop-index="305" literal-stop-index="306">
+                                    <left>
+                                        <in-expression start-index="256" stop-index="274">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="256" stop-index="264">
+                                                    <owner name="o" start-index="256" stop-index="256" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="269" stop-index="274">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="280" stop-index="305" literal-stop-index="306">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="280" stop-index="289">
+                                                    <owner name="o" start-index="280" stop-index="280" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="299" stop-index="299" />
+                                                <parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="305" stop-index="306" />
+                                                <parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="item_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
-                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
+                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -476,24 +584,26 @@
             </subquery-table>
         </from>
         <where start-index="335" stop-index="356" literal-start-index="336" literal-stop-index="357">
-            <and-predicate>
-                <predicate start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
-                    <column-left-value start-index="341" stop-index="352" literal-start-index="342" literal-stop-index="353" name="rownum_">
-                        <owner start-index="341" stop-index="344" literal-start-index="342" literal-stop-index="345" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="356" stop-index="356" value="5" />
-                        <literal-expression start-index="357" stop-index="357" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
+                    <left>
+                        <column name="rownum_" start-index="341" stop-index="352" literal-start-index="342" literal-stop-index="353">
+                            <owner name="row_" start-index="341" stop-index="344" literal-start-index="342" literal-stop-index="345" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="357" stop-index="357" />
+                        <parameter-marker-expression value="5" start-index="356" stop-index="356" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_percent_with_ties_and_group_by_and_order_by_and_parentheses" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -501,45 +611,45 @@
                     <select>
                         <projections start-index="22" stop-index="178">
                             <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="104" stop-index="112">
-                                <owner name="i" start-index="104" stop-index="104" />
+                                <owner name="i" start-index="104" stop-index="104"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                <owner name="o" start-index="115" stop-index="115" />
+                                <owner name="o" start-index="115" stop-index="115"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                <owner name="o" start-index="139" stop-index="139" />
+                                <owner name="o" start-index="139" stop-index="139"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                <owner name="o" start-index="159" stop-index="159" />
+                                <owner name="o" start-index="159" stop-index="159"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="218" stop-index="238">
                                             <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                <owner name="o" start-index="218" stop-index="218" />
+                                                <owner name="o" start-index="218" stop-index="218"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                <owner name="i" start-index="230" stop-index="230" />
+                                                <owner name="i" start-index="230" stop-index="230"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="244" stop-index="266">
                                             <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                <owner name="o" start-index="244" stop-index="244" />
+                                                <owner name="o" start-index="244" stop-index="244"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                <owner name="i" start-index="257" stop-index="257" />
+                                                <owner name="i" start-index="257" stop-index="257"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -547,34 +657,55 @@
                             </join-table>
                         </from>
                         <where start-index="268" stop-index="323" literal-stop-index="324">
-                            <and-predicate>
-                                <predicate start-index="274" stop-index="292">
-                                    <column-left-value name="user_id" start-index="274" stop-index="282">
-                                        <owner name="o" start-index="274" stop-index="274" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                        <literal-expression value="1" start-index="288" stop-index="288" />
-                                        <literal-expression value="2" start-index="291" stop-index="291" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                    <column-left-value name="order_id" start-index="298" stop-index="307">
-                                        <owner name="o" start-index="298" stop-index="298" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="274" stop-index="323" literal-stop-index="324">
+                                    <left>
+                                        <in-expression start-index="274" stop-index="292">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="274" stop-index="282">
+                                                    <owner name="o" start-index="274" stop-index="274" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="287" stop-index="292">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="298" stop-index="323" literal-stop-index="324">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="298" stop-index="307">
+                                                    <owner name="o" start-index="298" stop-index="298" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="317" stop-index="317" />
+                                                <parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="323" stop-index="324" />
+                                                <parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="item_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
-                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
+                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -582,24 +713,26 @@
             </subquery-table>
         </from>
         <where start-index="353" stop-index="374" literal-start-index="354" literal-stop-index="375">
-            <and-predicate>
-                <predicate start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
-                    <column-left-value start-index="359" stop-index="370" literal-start-index="360" literal-stop-index="371" name="rownum_">
-                        <owner start-index="359" stop-index="362" literal-start-index="360" literal-stop-index="363" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="374" stop-index="374" value="5" />
-                        <literal-expression start-index="375" stop-index="375" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
+                    <left>
+                        <column name="rownum_" start-index="359" stop-index="370" literal-start-index="360" literal-stop-index="371">
+                            <owner name="row_" start-index="359" stop-index="362" literal-start-index="360" literal-stop-index="363" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="375" stop-index="375" />
+                        <parameter-marker-expression value="5" start-index="374" stop-index="374" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_and_diff_group_by_and_order_by" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -607,45 +740,45 @@
                     <select>
                         <projections start-index="22" stop-index="158">
                             <top-projection alias="rownum_" start-index="22" stop-index="70">
-                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="84" stop-index="92">
-                                <owner name="i" start-index="84" stop-index="84" />
+                                <owner name="i" start-index="84" stop-index="84"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="95" stop-index="104">
-                                <owner name="o" start-index="95" stop-index="95" />
+                                <owner name="o" start-index="95" stop-index="95"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="119" stop-index="126">
-                                <owner name="o" start-index="119" stop-index="119" />
+                                <owner name="o" start-index="119" stop-index="119"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="139" stop-index="147">
-                                <owner name="o" start-index="139" stop-index="139" />
+                                <owner name="o" start-index="139" stop-index="139"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o" />
+                                    <simple-table start-index="165" stop-index="173" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i" />
+                                    <simple-table start-index="180" stop-index="193" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="198" stop-index="218">
                                             <column-left-value name="user_id" start-index="198" stop-index="206">
-                                                <owner name="o" start-index="198" stop-index="198" />
+                                                <owner name="o" start-index="198" stop-index="198"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="210" stop-index="218">
-                                                <owner name="i" start-index="210" stop-index="210" />
+                                                <owner name="i" start-index="210" stop-index="210"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="224" stop-index="246">
                                             <column-left-value name="order_id" start-index="224" stop-index="233">
-                                                <owner name="o" start-index="224" stop-index="224" />
+                                                <owner name="o" start-index="224" stop-index="224"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="237" stop-index="246">
-                                                <owner name="i" start-index="237" stop-index="237" />
+                                                <owner name="i" start-index="237" stop-index="237"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -653,34 +786,55 @@
                             </join-table>
                         </from>
                         <where start-index="248" stop-index="303" literal-stop-index="304">
-                            <and-predicate>
-                                <predicate start-index="254" stop-index="272">
-                                    <column-left-value name="user_id" start-index="254" stop-index="262">
-                                        <owner name="o" start-index="254" stop-index="254" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
-                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
-                                        <literal-expression value="1" start-index="268" stop-index="268" />
-                                        <literal-expression value="2" start-index="271" stop-index="271" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="278" stop-index="303" literal-stop-index="304">
-                                    <column-left-value name="order_id" start-index="278" stop-index="287">
-                                        <owner name="o" start-index="278" stop-index="278" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="297" stop-index="297" />
-                                        <and-parameter-marker-expression value="4" start-index="303" stop-index="303" />
-                                        <between-literal-expression value="9" start-index="297" stop-index="297" />
-                                        <and-literal-expression value="10" start-index="303" stop-index="304" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="254" stop-index="303" literal-stop-index="304">
+                                    <left>
+                                        <in-expression start-index="254" stop-index="272">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="254" stop-index="262">
+                                                    <owner name="o" start-index="254" stop-index="254" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="267" stop-index="272">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="268" stop-index="268" />
+                                                        <parameter-marker-expression value="1" start-index="268" stop-index="268" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="271" stop-index="271" />
+                                                        <parameter-marker-expression value="2" start-index="271" stop-index="271" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="278" stop-index="303" literal-stop-index="304">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="278" stop-index="287">
+                                                    <owner name="o" start-index="278" stop-index="278" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="297" stop-index="297" />
+                                                <parameter-marker-expression value="3" start-index="297" stop-index="297" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="303" stop-index="304" />
+                                                <parameter-marker-expression value="4" start-index="303" stop-index="303" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="user_id" start-index="314" stop-index="322" literal-start-index="315" literal-stop-index="323">
-                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315" />
+                                <owner name="i" start-index="314" stop-index="314" literal-start-index="315" literal-stop-index="315"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -688,24 +842,26 @@
             </subquery-table>
         </from>
         <where start-index="333" stop-index="354" literal-start-index="334" literal-stop-index="355">
-            <and-predicate>
-                <predicate start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
-                    <column-left-value start-index="339" stop-index="350" literal-start-index="340" literal-stop-index="351" name="rownum_">
-                        <owner start-index="339" stop-index="342" literal-start-index="340" literal-stop-index="343" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="354" stop-index="354" value="5" />
-                        <literal-expression start-index="355" stop-index="355" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="339" stop-index="354" literal-start-index="340" literal-stop-index="355">
+                    <left>
+                        <column name="rownum_" start-index="339" stop-index="350" literal-start-index="340" literal-stop-index="351">
+                            <owner name="row_" start-index="339" stop-index="342" literal-start-index="340" literal-stop-index="343" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="355" stop-index="355" />
+                        <parameter-marker-expression value="5" start-index="354" stop-index="354" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_percent_with_ties_and_diff_group_by_and_order_by" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -713,45 +869,45 @@
                     <select>
                         <projections start-index="22" stop-index="176">
                             <top-projection alias="rownum_" start-index="22" stop-index="88">
-                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26" />
+                                <top-value value="3" parameter-index="0" start-index="26" stop-index="26"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="102" stop-index="110">
-                                <owner name="i" start-index="102" stop-index="102" />
+                                <owner name="i" start-index="102" stop-index="102"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="113" stop-index="122">
-                                <owner name="o" start-index="113" stop-index="113" />
+                                <owner name="o" start-index="113" stop-index="113"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="137" stop-index="144">
-                                <owner name="o" start-index="137" stop-index="137" />
+                                <owner name="o" start-index="137" stop-index="137"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="157" stop-index="165">
-                                <owner name="o" start-index="157" stop-index="157" />
+                                <owner name="o" start-index="157" stop-index="157"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o" />
+                                    <simple-table start-index="183" stop-index="191" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i" />
+                                    <simple-table start-index="198" stop-index="211" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="216" stop-index="236">
                                             <column-left-value name="user_id" start-index="216" stop-index="224">
-                                                <owner name="o" start-index="216" stop-index="216" />
+                                                <owner name="o" start-index="216" stop-index="216"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="228" stop-index="236">
-                                                <owner name="i" start-index="228" stop-index="228" />
+                                                <owner name="i" start-index="228" stop-index="228"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="242" stop-index="264">
                                             <column-left-value name="order_id" start-index="242" stop-index="251">
-                                                <owner name="o" start-index="242" stop-index="242" />
+                                                <owner name="o" start-index="242" stop-index="242"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="255" stop-index="264">
-                                                <owner name="i" start-index="255" stop-index="255" />
+                                                <owner name="i" start-index="255" stop-index="255"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -759,34 +915,55 @@
                             </join-table>
                         </from>
                         <where start-index="266" stop-index="321" literal-stop-index="322">
-                            <and-predicate>
-                                <predicate start-index="272" stop-index="290">
-                                    <column-left-value name="user_id" start-index="272" stop-index="280">
-                                        <owner name="o" start-index="272" stop-index="272" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
-                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
-                                        <literal-expression value="1" start-index="286" stop-index="286" />
-                                        <literal-expression value="2" start-index="289" stop-index="289" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="296" stop-index="321" literal-stop-index="322">
-                                    <column-left-value name="order_id" start-index="296" stop-index="305">
-                                        <owner name="o" start-index="296" stop-index="296" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="315" stop-index="315" />
-                                        <and-parameter-marker-expression value="4" start-index="321" stop-index="321" />
-                                        <between-literal-expression value="9" start-index="315" stop-index="315" />
-                                        <and-literal-expression value="10" start-index="321" stop-index="322" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="272" stop-index="321" literal-stop-index="322">
+                                    <left>
+                                        <in-expression start-index="272" stop-index="290">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="272" stop-index="280">
+                                                    <owner name="o" start-index="272" stop-index="272" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="285" stop-index="290">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="286" stop-index="286" />
+                                                        <parameter-marker-expression value="1" start-index="286" stop-index="286" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="289" stop-index="289" />
+                                                        <parameter-marker-expression value="2" start-index="289" stop-index="289" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="296" stop-index="321" literal-stop-index="322">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="296" stop-index="305">
+                                                    <owner name="o" start-index="296" stop-index="296" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="315" stop-index="315" />
+                                                <parameter-marker-expression value="3" start-index="315" stop-index="315" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="321" stop-index="322" />
+                                                <parameter-marker-expression value="4" start-index="321" stop-index="321" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="user_id" start-index="332" stop-index="340" literal-start-index="333" literal-stop-index="341">
-                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333" />
+                                <owner name="i" start-index="332" stop-index="332" literal-start-index="333" literal-stop-index="333"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -794,24 +971,26 @@
             </subquery-table>
         </from>
         <where start-index="351" stop-index="372" literal-start-index="352" literal-stop-index="373">
-            <and-predicate>
-                <predicate start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
-                    <column-left-value start-index="357" stop-index="368" literal-start-index="358" literal-stop-index="369" name="rownum_">
-                        <owner start-index="357" stop-index="360" literal-start-index="358" literal-stop-index="361" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="372" stop-index="372" value="5" />
-                        <literal-expression start-index="373" stop-index="373" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="357" stop-index="372" literal-start-index="358" literal-stop-index="373">
+                    <left>
+                        <column name="rownum_" start-index="357" stop-index="368" literal-start-index="358" literal-stop-index="369">
+                            <owner name="row_" start-index="357" stop-index="360" literal-start-index="358" literal-stop-index="361" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="373" stop-index="373" />
+                        <parameter-marker-expression value="5" start-index="372" stop-index="372" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_and_diff_group_by_and_order_by_and_parentheses" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -819,45 +998,45 @@
                     <select>
                         <projections start-index="22" stop-index="160">
                             <top-projection alias="rownum_" start-index="22" stop-index="72">
-                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="86" stop-index="94">
-                                <owner name="i" start-index="86" stop-index="86" />
+                                <owner name="i" start-index="86" stop-index="86"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="97" stop-index="106">
-                                <owner name="o" start-index="97" stop-index="97" />
+                                <owner name="o" start-index="97" stop-index="97"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="121" stop-index="128">
-                                <owner name="o" start-index="121" stop-index="121" />
+                                <owner name="o" start-index="121" stop-index="121"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="141" stop-index="149">
-                                <owner name="o" start-index="141" stop-index="141" />
+                                <owner name="o" start-index="141" stop-index="141"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o" />
+                                    <simple-table start-index="167" stop-index="175" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i" />
+                                    <simple-table start-index="182" stop-index="195" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="200" stop-index="220">
                                             <column-left-value name="user_id" start-index="200" stop-index="208">
-                                                <owner name="o" start-index="200" stop-index="200" />
+                                                <owner name="o" start-index="200" stop-index="200"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="212" stop-index="220">
-                                                <owner name="i" start-index="212" stop-index="212" />
+                                                <owner name="i" start-index="212" stop-index="212"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="226" stop-index="248">
                                             <column-left-value name="order_id" start-index="226" stop-index="235">
-                                                <owner name="o" start-index="226" stop-index="226" />
+                                                <owner name="o" start-index="226" stop-index="226"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="239" stop-index="248">
-                                                <owner name="i" start-index="239" stop-index="239" />
+                                                <owner name="i" start-index="239" stop-index="239"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -865,34 +1044,55 @@
                             </join-table>
                         </from>
                         <where start-index="250" stop-index="305" literal-stop-index="306">
-                            <and-predicate>
-                                <predicate start-index="256" stop-index="274">
-                                    <column-left-value name="user_id" start-index="256" stop-index="264">
-                                        <owner name="o" start-index="256" stop-index="256" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                        <literal-expression value="1" start-index="270" stop-index="270" />
-                                        <literal-expression value="2" start-index="273" stop-index="273" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                    <column-left-value name="order_id" start-index="280" stop-index="289">
-                                        <owner name="o" start-index="280" stop-index="280" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="256" stop-index="305" literal-stop-index="306">
+                                    <left>
+                                        <in-expression start-index="256" stop-index="274">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="256" stop-index="264">
+                                                    <owner name="o" start-index="256" stop-index="256" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="269" stop-index="274">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="280" stop-index="305" literal-stop-index="306">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="280" stop-index="289">
+                                                    <owner name="o" start-index="280" stop-index="280" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="299" stop-index="299" />
+                                                <parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="305" stop-index="306" />
+                                                <parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="user_id" start-index="316" stop-index="324" literal-start-index="317" literal-stop-index="325">
-                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317" />
+                                <owner name="i" start-index="316" stop-index="316" literal-start-index="317" literal-stop-index="317"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -900,24 +1100,26 @@
             </subquery-table>
         </from>
         <where start-index="335" stop-index="356" literal-start-index="336" literal-stop-index="357">
-            <and-predicate>
-                <predicate start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
-                    <column-left-value start-index="341" stop-index="352" literal-start-index="342" literal-stop-index="353" name="rownum_">
-                        <owner start-index="341" stop-index="344" literal-start-index="342" literal-stop-index="345" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="356" stop-index="356" value="5" />
-                        <literal-expression start-index="357" stop-index="357" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="341" stop-index="356" literal-start-index="342" literal-stop-index="357">
+                    <left>
+                        <column name="rownum_" start-index="341" stop-index="352" literal-start-index="342" literal-stop-index="353">
+                            <owner name="row_" start-index="341" stop-index="344" literal-start-index="342" literal-stop-index="345" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="357" stop-index="357" />
+                        <parameter-marker-expression value="5" start-index="356" stop-index="356" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_top_percent_with_ties_and_diff_group_by_and_order_by_and_parentheses" parameters="3, 1, 2, 9, 10, 6">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table alias="row_">
@@ -925,45 +1127,45 @@
                     <select>
                         <projections start-index="22" stop-index="178">
                             <top-projection alias="rownum_" start-index="22" stop-index="90">
-                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27" />
+                                <top-value value="3" parameter-index="0" start-index="27" stop-index="27"/>
                             </top-projection>
                             <column-projection name="item_id" start-index="104" stop-index="112">
-                                <owner name="i" start-index="104" stop-index="104" />
+                                <owner name="i" start-index="104" stop-index="104"/>
                             </column-projection>
                             <column-projection name="order_id" alias="order_id" start-index="115" stop-index="124">
-                                <owner name="o" start-index="115" stop-index="115" />
+                                <owner name="o" start-index="115" stop-index="115"/>
                             </column-projection>
                             <column-projection name="status" alias="status" start-index="139" stop-index="146">
-                                <owner name="o" start-index="139" stop-index="139" />
+                                <owner name="o" start-index="139" stop-index="139"/>
                             </column-projection>
                             <column-projection name="user_id" alias="user_id" start-index="159" stop-index="167">
-                                <owner name="o" start-index="159" stop-index="159" />
+                                <owner name="o" start-index="159" stop-index="159"/>
                             </column-projection>
                         </projections>
                         <from>
                             <join-table>
                                 <left>
-                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o" />
+                                    <simple-table start-index="185" stop-index="193" name="t_order" alias="o"/>
                                 </left>
                                 <right>
-                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i" />
+                                    <simple-table start-index="200" stop-index="213" name="t_order_item" alias="i"/>
                                 </right>
                                 <joinSpecification>
                                     <and-predicate>
                                         <predicate start-index="218" stop-index="238">
                                             <column-left-value name="user_id" start-index="218" stop-index="226">
-                                                <owner name="o" start-index="218" stop-index="218" />
+                                                <owner name="o" start-index="218" stop-index="218"/>
                                             </column-left-value>
                                             <column-right-value name="user_id" start-index="230" stop-index="238">
-                                                <owner name="i" start-index="230" stop-index="230" />
+                                                <owner name="i" start-index="230" stop-index="230"/>
                                             </column-right-value>
                                         </predicate>
                                         <predicate start-index="244" stop-index="266">
                                             <column-left-value name="order_id" start-index="244" stop-index="253">
-                                                <owner name="o" start-index="244" stop-index="244" />
+                                                <owner name="o" start-index="244" stop-index="244"/>
                                             </column-left-value>
                                             <column-right-value name="order_id" start-index="257" stop-index="266">
-                                                <owner name="i" start-index="257" stop-index="257" />
+                                                <owner name="i" start-index="257" stop-index="257"/>
                                             </column-right-value>
                                         </predicate>
                                     </and-predicate>
@@ -971,34 +1173,55 @@
                             </join-table>
                         </from>
                         <where start-index="268" stop-index="323" literal-stop-index="324">
-                            <and-predicate>
-                                <predicate start-index="274" stop-index="292">
-                                    <column-left-value name="user_id" start-index="274" stop-index="282">
-                                        <owner name="o" start-index="274" stop-index="274" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                        <literal-expression value="1" start-index="288" stop-index="288" />
-                                        <literal-expression value="2" start-index="291" stop-index="291" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                    <column-left-value name="order_id" start-index="298" stop-index="307">
-                                        <owner name="o" start-index="298" stop-index="298" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="274" stop-index="323" literal-stop-index="324">
+                                    <left>
+                                        <in-expression start-index="274" stop-index="292">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="274" stop-index="282">
+                                                    <owner name="o" start-index="274" stop-index="274" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="287" stop-index="292">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="298" stop-index="323" literal-stop-index="324">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="298" stop-index="307">
+                                                    <owner name="o" start-index="298" stop-index="298" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="317" stop-index="317" />
+                                                <parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="323" stop-index="324" />
+                                                <parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                         <group-by>
                             <column-item name="user_id" start-index="334" stop-index="342" literal-start-index="335" literal-stop-index="343">
-                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335" />
+                                <owner name="i" start-index="334" stop-index="334" literal-start-index="335" literal-stop-index="335"/>
                             </column-item>
                         </group-by>
                     </select>
@@ -1006,34 +1229,36 @@
             </subquery-table>
         </from>
         <where start-index="353" stop-index="374" literal-start-index="354" literal-stop-index="375">
-            <and-predicate>
-                <predicate start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
-                    <column-left-value start-index="359" stop-index="370" literal-start-index="360" literal-stop-index="371" name="rownum_">
-                        <owner start-index="359" stop-index="362" literal-start-index="360" literal-stop-index="363" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="374" stop-index="374" value="5" />
-                        <literal-expression start-index="375" stop-index="375" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="359" stop-index="374" literal-start-index="360" literal-stop-index="375">
+                    <left>
+                        <column name="rownum_" start-index="359" stop-index="370" literal-start-index="360" literal-stop-index="371">
+                            <owner name="row_" start-index="359" stop-index="362" literal-start-index="360" literal-stop-index="363" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="375" stop-index="375" />
+                        <parameter-marker-expression value="5" start-index="374" stop-index="374" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_row_number_and_group_by_and_order_by" parameters="1, 2, 9, 7, 5, 3">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection  start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table start-index="14" stop-index="382" alias="t">
                 <subquery>
                     <select>
                         <projections start-index="22" stop-index="43">
-                            <shorthand-projection start-index="22" stop-index="27" >
+                            <shorthand-projection start-index="22" stop-index="27">
                                 <owner start-index="22" stop-index="25" name="row_"/>
                             </shorthand-projection>
-                            <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
+                            <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_"/>
                         </projections>
                         <from>
                             <subquery-table alias="row_">
@@ -1081,30 +1306,51 @@
                                             </join-table>
                                         </from>
                                         <where start-index="247" stop-index="314">
-                                            <and-predicate>
-                                                <predicate start-index="253" stop-index="277">
-                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                        <owner start-index="253" stop-index="259" name="order0_" />
-                                                    </column-left-value>
-                                                    <in-right-value>
-                                                        <literal-expression start-index="273" stop-index="273" value="1" />
-                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
-                                                        <literal-expression start-index="276" stop-index="276" value="2"/>
-                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                    </in-right-value>
-                                                </predicate>
-                                                <predicate start-index="283" stop-index="314">
-                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                        <owner start-index="283" stop-index="289" name="order0_"/>
-                                                    </column-left-value>
-                                                    <between-right-value>
-                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
-                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                    </between-right-value>
-                                                </predicate>
-                                            </and-predicate>
+                                            <expr>
+                                                <binary-operation-expression start-index="253" stop-index="314">
+                                                    <left>
+                                                        <in-expression start-index="253" stop-index="277">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="user_id" start-index="253" stop-index="267">
+                                                                    <owner name="order0_" start-index="253" stop-index="259" />
+                                                                </column>
+                                                            </left>
+                                                            <right>
+                                                                <list-expression start-index="272" stop-index="277">
+                                                                    <items>
+                                                                        <literal-expression value="1" start-index="273" stop-index="273" />
+                                                                        <parameter-marker-expression value="0" start-index="273" stop-index="273" />
+                                                                    </items>
+                                                                    <items>
+                                                                        <literal-expression value="2" start-index="276" stop-index="276" />
+                                                                        <parameter-marker-expression value="1" start-index="276" stop-index="276" />
+                                                                    </items>
+                                                                </list-expression>
+                                                            </right>
+                                                        </in-expression>
+                                                    </left>
+                                                    <operator>AND</operator>
+                                                    <right>
+                                                        <between-expression start-index="283" stop-index="314">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="order_id" start-index="283" stop-index="298">
+                                                                    <owner name="order0_" start-index="283" stop-index="289" />
+                                                                </column>
+                                                            </left>
+                                                            <between-expr>
+                                                                <literal-expression value="9" start-index="308" stop-index="308" />
+                                                                <parameter-marker-expression value="2" start-index="308" stop-index="308" />
+                                                            </between-expr>
+                                                            <and-expr>
+                                                                <literal-expression value="7" start-index="314" stop-index="314" />
+                                                                <parameter-marker-expression value="3" start-index="314" stop-index="314" />
+                                                            </and-expr>
+                                                        </between-expression>
+                                                    </right>
+                                                </binary-operation-expression>
+                                            </expr>
                                         </where>
                                         <group-by>
                                             <column-item start-index="325" stop-index="333" name="item_id">
@@ -1121,50 +1367,54 @@
                             </subquery-table>
                         </from>
                         <where start-index="365" stop-index="381">
-                            <and-predicate>
-                                <predicate start-index="371" stop-index="381">
-                                    <column-left-value start-index="371" stop-index="376" name="rownum" />
-                                    <operator type="&lt;="/>
-                                    <compare-right-value>
-                                        <literal-expression start-index="381" stop-index="381" value="5"/>
-                                        <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
-                                    </compare-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="371" stop-index="381">
+                                    <left>
+                                        <column name="rownum" start-index="371" stop-index="376" />
+                                    </left>
+                                    <operator>&lt;=</operator>
+                                    <right>
+                                        <literal-expression value="5" start-index="381" stop-index="381" />
+                                        <parameter-marker-expression value="4" start-index="381" stop-index="381" />
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
         <where start-index="386" stop-index="404">
-            <and-predicate>
-                <predicate start-index="392" stop-index="404">
-                    <column-left-value start-index="392" stop-index="400" name="rownum_">
-                        <owner start-index="392" stop-index="392" name="t"/>
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <literal-expression start-index="404" stop-index="404" value="3" />
-                        <parameter-marker-expression start-index="404" stop-index="404" value="5"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="392" stop-index="404">
+                    <left>
+                        <column name="rownum_" start-index="392" stop-index="400">
+                            <owner name="t" start-index="392" stop-index="392" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="3" start-index="404" stop-index="404" />
+                        <parameter-marker-expression value="5" start-index="404" stop-index="404" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_pagination_with_row_number_and_diff_group_by_and_order_by" parameters="1, 2, 9, 7, 5, 3">
         <projections start-index="7" stop-index="7">
-            <shorthand-projection  start-index="7" stop-index="7" />
+            <shorthand-projection start-index="7" stop-index="7"/>
         </projections>
         <from>
             <subquery-table start-index="14" stop-index="382" alias="t">
                 <subquery>
                     <select>
                         <projections start-index="22" stop-index="43">
-                            <shorthand-projection start-index="22" stop-index="27" >
+                            <shorthand-projection start-index="22" stop-index="27">
                                 <owner start-index="22" stop-index="25" name="row_"/>
                             </shorthand-projection>
-                            <column-projection start-index="30" stop-index="35" name="rownum"  alias="rownum_"/>
+                            <column-projection start-index="30" stop-index="35" name="rownum" alias="rownum_"/>
                         </projections>
                         <from>
                             <subquery-table alias="row_">
@@ -1212,30 +1462,51 @@
                                             </join-table>
                                         </from>
                                         <where start-index="247" stop-index="314">
-                                            <and-predicate>
-                                                <predicate start-index="253" stop-index="277">
-                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                        <owner start-index="253" stop-index="259" name="order0_" />
-                                                    </column-left-value>
-                                                    <in-right-value>
-                                                        <literal-expression start-index="273" stop-index="273" value="1" />
-                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0"/>
-                                                        <literal-expression start-index="276" stop-index="276" value="2"/>
-                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                    </in-right-value>
-                                                </predicate>
-                                                <predicate start-index="283" stop-index="314">
-                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                        <owner start-index="283" stop-index="289" name="order0_"/>
-                                                    </column-left-value>
-                                                    <between-right-value>
-                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2"/>
-                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                    </between-right-value>
-                                                </predicate>
-                                            </and-predicate>
+                                            <expr>
+                                                <binary-operation-expression start-index="253" stop-index="314">
+                                                    <left>
+                                                        <in-expression start-index="253" stop-index="277">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="user_id" start-index="253" stop-index="267">
+                                                                    <owner name="order0_" start-index="253" stop-index="259" />
+                                                                </column>
+                                                            </left>
+                                                            <right>
+                                                                <list-expression start-index="272" stop-index="277">
+                                                                    <items>
+                                                                        <literal-expression value="1" start-index="273" stop-index="273" />
+                                                                        <parameter-marker-expression value="0" start-index="273" stop-index="273" />
+                                                                    </items>
+                                                                    <items>
+                                                                        <literal-expression value="2" start-index="276" stop-index="276" />
+                                                                        <parameter-marker-expression value="1" start-index="276" stop-index="276" />
+                                                                    </items>
+                                                                </list-expression>
+                                                            </right>
+                                                        </in-expression>
+                                                    </left>
+                                                    <operator>AND</operator>
+                                                    <right>
+                                                        <between-expression start-index="283" stop-index="314">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="order_id" start-index="283" stop-index="298">
+                                                                    <owner name="order0_" start-index="283" stop-index="289" />
+                                                                </column>
+                                                            </left>
+                                                            <between-expr>
+                                                                <literal-expression value="9" start-index="308" stop-index="308" />
+                                                                <parameter-marker-expression value="2" start-index="308" stop-index="308" />
+                                                            </between-expr>
+                                                            <and-expr>
+                                                                <literal-expression value="7" start-index="314" stop-index="314" />
+                                                                <parameter-marker-expression value="3" start-index="314" stop-index="314" />
+                                                            </and-expr>
+                                                        </between-expression>
+                                                    </right>
+                                                </binary-operation-expression>
+                                            </expr>
                                         </where>
                                         <group-by>
                                             <column-item start-index="325" stop-index="333" name="user_id">
@@ -1252,34 +1523,38 @@
                             </subquery-table>
                         </from>
                         <where start-index="365" stop-index="381">
-                            <and-predicate>
-                                <predicate start-index="371" stop-index="381">
-                                    <column-left-value start-index="371" stop-index="376" name="rownum" />
-                                    <operator type="&lt;="/>
-                                    <compare-right-value>
-                                        <literal-expression start-index="381" stop-index="381" value="5"/>
-                                        <parameter-marker-expression start-index="381" stop-index="381" value="4"/>
-                                    </compare-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="371" stop-index="381">
+                                    <left>
+                                        <column name="rownum" start-index="371" stop-index="376" />
+                                    </left>
+                                    <operator>&lt;=</operator>
+                                    <right>
+                                        <literal-expression value="5" start-index="381" stop-index="381" />
+                                        <parameter-marker-expression value="4" start-index="381" stop-index="381" />
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
         <where start-index="386" stop-index="404">
-            <and-predicate>
-                <predicate start-index="392" stop-index="404">
-                    <column-left-value start-index="392" stop-index="400" name="rownum_">
-                        <owner start-index="392" stop-index="392" name="t"/>
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <literal-expression start-index="404" stop-index="404" value="3" />
-                        <parameter-marker-expression start-index="404" stop-index="404" value="5"/>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="392" stop-index="404">
+                    <left>
+                        <column name="rownum_" start-index="392" stop-index="400">
+                            <owner name="t" start-index="392" stop-index="392" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="3" start-index="404" stop-index="404" />
+                        <parameter-marker-expression value="5" start-index="404" stop-index="404" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
index 0785b3e..a01c546 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-pagination.xml
@@ -55,30 +55,51 @@
         </projections>
         <!-- TODO parameters-count should be 4, because the last parameter is in offset -->
         <where start-index="99" stop-index="154" literal-stop-index="155">
-            <and-predicate>
-                <predicate start-index="105" stop-index="123">
-                    <column-left-value name="user_id" start-index="105" stop-index="113">
-                        <owner name="o" start-index="105" stop-index="105" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
-                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
-                        <literal-expression value="1" start-index="119" stop-index="119" />
-                        <literal-expression value="2" start-index="122" stop-index="122" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="129" stop-index="154" literal-stop-index="155">
-                    <column-left-value name="order_id" start-index="129" stop-index="138">
-                        <owner name="o" start-index="129" stop-index="129" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="148" stop-index="148" />
-                        <between-literal-expression value="9" start-index="148" stop-index="148" />
-                        <and-parameter-marker-expression value="3" start-index="154" stop-index="154" />
-                        <and-literal-expression value="10" start-index="154" stop-index="155" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="105" stop-index="154" literal-stop-index="155">
+                    <left>
+                        <in-expression start-index="105" stop-index="123">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="105" stop-index="113">
+                                    <owner name="o" start-index="105" stop-index="105" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="119" stop-index="122">
+                                    <items>
+                                        <literal-expression value="1" start-index="119" stop-index="119" />
+                                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="122" stop-index="122" />
+                                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="129" stop-index="154" literal-stop-index="155">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="129" stop-index="138">
+                                    <owner name="o" start-index="129" stop-index="129" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="148" stop-index="148" />
+                                <parameter-marker-expression value="2" start-index="148" stop-index="148" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="154" stop-index="155" />
+                                <parameter-marker-expression value="3" start-index="154" stop-index="154" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="165" stop-index="173" literal-start-index="166" literal-stop-index="174">
@@ -128,30 +149,51 @@
             </shorthand-projection>
         </projections>
         <where start-index="99" stop-index="154" literal-stop-index="155">
-            <and-predicate>
-                <predicate start-index="105" stop-index="123">
-                    <column-left-value name="user_id" start-index="105" stop-index="113">
-                        <owner name="o" start-index="105" stop-index="105" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
-                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
-                        <literal-expression value="1" start-index="119" stop-index="119" />
-                        <literal-expression value="2" start-index="122" stop-index="122" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="129" stop-index="154" literal-stop-index="155">
-                    <column-left-value name="order_id" start-index="129" stop-index="138">
-                        <owner name="o" start-index="129" stop-index="129" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="148" stop-index="148" />
-                        <between-literal-expression value="9" start-index="148" stop-index="148" />
-                        <and-parameter-marker-expression value="3" start-index="154" stop-index="154" />
-                        <and-literal-expression value="10" start-index="154" stop-index="155" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="105" stop-index="154" literal-stop-index="155">
+                    <left>
+                        <in-expression start-index="105" stop-index="123">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="105" stop-index="113">
+                                    <owner name="o" start-index="105" stop-index="105" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="118" stop-index="123">
+                                    <items>
+                                        <literal-expression value="1" start-index="119" stop-index="119" />
+                                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="122" stop-index="122" />
+                                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="129" stop-index="154" literal-stop-index="155">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="129" stop-index="138">
+                                    <owner name="o" start-index="129" stop-index="129" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="148" stop-index="148" />
+                                <parameter-marker-expression value="2" start-index="148" stop-index="148" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="154" stop-index="155" />
+                                <parameter-marker-expression value="3" start-index="154" stop-index="154" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="165" stop-index="173" literal-start-index="166" literal-stop-index="174">
@@ -200,30 +242,51 @@
             </shorthand-projection>
         </projections>
         <where start-index="103" stop-index="162" literal-stop-index="163">
-            <and-predicate>
-                <predicate start-index="109" stop-index="129">
-                    <column-left-value name="user_id" start-delimiter="`" end-delimiter="`" start-index="109" stop-index="119">
-                        <owner name="o" start-index="109" stop-index="109" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
-                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
-                        <literal-expression value="1" start-index="125" stop-index="125" />
-                        <literal-expression value="2" start-index="128" stop-index="128" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="135" stop-index="162" literal-stop-index="163">
-                    <column-left-value name="order_id" start-delimiter="`" end-delimiter="`" start-index="135" stop-index="146">
-                        <owner name="o" start-index="135" stop-index="135" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="156" stop-index="156" />
-                        <between-literal-expression value="9" start-index="156" stop-index="156" />
-                        <and-parameter-marker-expression value="3" start-index="162" stop-index="162" />
-                        <and-literal-expression value="10" start-index="162" stop-index="163" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="109" stop-index="162" literal-stop-index="163">
+                    <left>
+                        <in-expression start-index="109" stop-index="129">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-delimiter="`" end-delimiter="`" start-index="109" stop-index="119">
+                                    <owner name="o" start-index="109" stop-index="109" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="124" stop-index="129">
+                                    <items>
+                                        <literal-expression value="1" start-index="125" stop-index="125" />
+                                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="128" stop-index="128" />
+                                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="135" stop-index="162" literal-stop-index="163">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-delimiter="`" end-delimiter="`" start-index="135" stop-index="146">
+                                    <owner name="o" start-index="135" stop-index="135" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="156" stop-index="156" />
+                                <parameter-marker-expression value="2" start-index="156" stop-index="156" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="162" stop-index="163" />
+                                <parameter-marker-expression value="3" start-index="162" stop-index="162" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="173" stop-index="181" literal-start-index="174" literal-stop-index="182">
@@ -273,30 +336,51 @@
             </shorthand-projection>
         </projections>
         <where start-index="103" stop-index="162" literal-stop-index="163">
-            <and-predicate>
-                <predicate start-index="109" stop-index="129">
-                    <column-left-value name="user_id" start-delimiter="`" end-delimiter="`" start-index="109" stop-index="119">
-                        <owner name="o" start-index="109" stop-index="109" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
-                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
-                        <literal-expression value="1" start-index="125" stop-index="125" />
-                        <literal-expression value="2" start-index="128" stop-index="128" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="135" stop-index="162" literal-stop-index="163">
-                    <column-left-value name="order_id" start-delimiter="`" end-delimiter="`" start-index="135" stop-index="146">
-                        <owner name="o" start-index="135" stop-index="135" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="156" stop-index="156" />
-                        <between-literal-expression value="9" start-index="156" stop-index="156" />
-                        <and-parameter-marker-expression value="3" start-index="162" stop-index="162" />
-                        <and-literal-expression value="10" start-index="162" stop-index="163" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="109" stop-index="162" literal-stop-index="163">
+                    <left>
+                        <in-expression start-index="109" stop-index="129">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-delimiter="`" end-delimiter="`" start-index="109" stop-index="119">
+                                    <owner name="o" start-index="109" stop-index="109" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="124" stop-index="129">
+                                    <items>
+                                        <literal-expression value="1" start-index="125" stop-index="125" />
+                                        <parameter-marker-expression value="0" start-index="125" stop-index="125" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="128" stop-index="128" />
+                                        <parameter-marker-expression value="1" start-index="128" stop-index="128" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="135" stop-index="162" literal-stop-index="163">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-delimiter="`" end-delimiter="`" start-index="135" stop-index="146">
+                                    <owner name="o" start-index="135" stop-index="135" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="156" stop-index="156" />
+                                <parameter-marker-expression value="2" start-index="156" stop-index="156" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="162" stop-index="163" />
+                                <parameter-marker-expression value="3" start-index="162" stop-index="162" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="173" stop-index="181" literal-start-index="174" literal-stop-index="182">
@@ -365,30 +449,51 @@
                             </join-table>
                         </from>
                         <where start-index="250" stop-index="305" literal-stop-index="306">
-                            <and-predicate>
-                                <predicate start-index="256" stop-index="274">
-                                    <column-left-value name="user_id" start-index="256" stop-index="264">
-                                        <owner name="o" start-index="256" stop-index="256" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                        <literal-expression value="1" start-index="270" stop-index="270" />
-                                        <literal-expression value="2" start-index="273" stop-index="273" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                    <column-left-value name="order_id" start-index="280" stop-index="289">
-                                        <owner name="o" start-index="280" stop-index="280" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="256" stop-index="305" literal-stop-index="306">
+                                    <left>
+                                        <in-expression start-index="256" stop-index="274">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="256" stop-index="264">
+                                                    <owner name="o" start-index="256" stop-index="256" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="269" stop-index="274">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="280" stop-index="305" literal-stop-index="306">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="280" stop-index="289">
+                                                    <owner name="o" start-index="280" stop-index="280" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="299" stop-index="299" />
+                                                <parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="305" stop-index="306" />
+                                                <parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
@@ -452,30 +557,51 @@
                             </join-table>
                         </from>
                         <where start-index="268" stop-index="323" literal-stop-index="324">
-                            <and-predicate>
-                                <predicate start-index="274" stop-index="292">
-                                    <column-left-value name="user_id" start-index="274" stop-index="282">
-                                        <owner name="o" start-index="274" stop-index="274" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                        <literal-expression value="1" start-index="288" stop-index="288" />
-                                        <literal-expression value="2" start-index="291" stop-index="291" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                    <column-left-value name="order_id" start-index="298" stop-index="307">
-                                        <owner name="o" start-index="298" stop-index="298" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="274" stop-index="323" literal-stop-index="324">
+                                    <left>
+                                        <in-expression start-index="274" stop-index="292">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="274" stop-index="282">
+                                                    <owner name="o" start-index="274" stop-index="274" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="287" stop-index="292">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="298" stop-index="323" literal-stop-index="324">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="298" stop-index="307">
+                                                    <owner name="o" start-index="298" stop-index="298" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="317" stop-index="317" />
+                                                <parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="323" stop-index="324" />
+                                                <parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
@@ -521,30 +647,51 @@
         </projections>
         <!-- TODO parameters-count should be 4, because the last parameter is in offset -->
         <where start-index="99" stop-index="154" literal-stop-index="155">
-            <and-predicate>
-                <predicate start-index="105" stop-index="123">
-                    <column-left-value name="user_id" start-index="105" stop-index="113">
-                        <owner name="o" start-index="105" stop-index="105" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
-                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
-                        <literal-expression value="1" start-index="119" stop-index="119" />
-                        <literal-expression value="2" start-index="122" stop-index="122" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="129" stop-index="154" literal-stop-index="155">
-                    <column-left-value name="order_id" start-index="129" stop-index="138">
-                        <owner name="o" start-index="129" stop-index="129" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="148" stop-index="148" />
-                        <between-literal-expression value="9" start-index="148" stop-index="148" />
-                        <and-parameter-marker-expression value="3" start-index="154" stop-index="154" />
-                        <and-literal-expression value="10" start-index="154" stop-index="155" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="105" stop-index="154" literal-stop-index="155">
+                    <left>
+                        <in-expression start-index="105" stop-index="123">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="105" stop-index="113">
+                                    <owner name="o" start-index="105" stop-index="105" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="119" stop-index="122">
+                                    <items>
+                                        <literal-expression value="1" start-index="119" stop-index="119" />
+                                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="122" stop-index="122" />
+                                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="129" stop-index="154" literal-stop-index="155">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="129" stop-index="138">
+                                    <owner name="o" start-index="129" stop-index="129" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="148" stop-index="148" />
+                                <parameter-marker-expression value="2" start-index="148" stop-index="148" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="154" stop-index="155" />
+                                <parameter-marker-expression value="3" start-index="154" stop-index="154" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="165" stop-index="173" literal-start-index="166" literal-stop-index="174">
@@ -594,30 +741,51 @@
             </shorthand-projection>
         </projections>
         <where start-index="99" stop-index="154" literal-stop-index="155">
-            <and-predicate>
-                <predicate start-index="105" stop-index="123">
-                    <column-left-value name="user_id" start-index="105" stop-index="113">
-                        <owner name="o" start-index="105" stop-index="105" />
-                    </column-left-value>
-                    <in-right-value>
-                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
-                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
-                        <literal-expression value="1" start-index="119" stop-index="119" />
-                        <literal-expression value="2" start-index="122" stop-index="122" />
-                    </in-right-value>
-                </predicate>
-                <predicate start-index="129" stop-index="154" literal-stop-index="155">
-                    <column-left-value name="order_id" start-index="129" stop-index="138">
-                        <owner name="o" start-index="129" stop-index="129" />
-                    </column-left-value>
-                    <between-right-value>
-                        <between-parameter-marker-expression value="2" start-index="148" stop-index="148" />
-                        <between-literal-expression value="9" start-index="148" stop-index="148" />
-                        <and-parameter-marker-expression value="3" start-index="154" stop-index="154" />
-                        <and-literal-expression value="10" start-index="154" stop-index="155" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="105" stop-index="154" literal-stop-index="155">
+                    <left>
+                        <in-expression start-index="105" stop-index="123">
+                            <not>false</not>
+                            <left>
+                                <column name="user_id" start-index="105" stop-index="113">
+                                    <owner name="o" start-index="105" stop-index="105" />
+                                </column>
+                            </left>
+                            <right>
+                                <list-expression start-index="119" stop-index="122">
+                                    <items>
+                                        <literal-expression value="1" start-index="119" stop-index="119" />
+                                        <parameter-marker-expression value="0" start-index="119" stop-index="119" />
+                                    </items>
+                                    <items>
+                                        <literal-expression value="2" start-index="122" stop-index="122" />
+                                        <parameter-marker-expression value="1" start-index="122" stop-index="122" />
+                                    </items>
+                                </list-expression>
+                            </right>
+                        </in-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <between-expression start-index="129" stop-index="154" literal-stop-index="155">
+                            <not>false</not>
+                            <left>
+                                <column name="order_id" start-index="129" stop-index="138">
+                                    <owner name="o" start-index="129" stop-index="129" />
+                                </column>
+                            </left>
+                            <between-expr>
+                                <literal-expression value="9" start-index="148" stop-index="148" />
+                                <parameter-marker-expression value="2" start-index="148" stop-index="148" />
+                            </between-expr>
+                            <and-expr>
+                                <literal-expression value="10" start-index="154" stop-index="155" />
+                                <parameter-marker-expression value="3" start-index="154" stop-index="154" />
+                            </and-expr>
+                        </between-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" order-direction="DESC" start-index="165" stop-index="173" literal-start-index="166" literal-stop-index="174">
@@ -685,48 +853,71 @@
                             </join-table>
                         </from>
                         <where start-index="250" stop-index="305" literal-stop-index="306">
-                            <and-predicate>
-                                <predicate start-index="256" stop-index="274">
-                                    <column-left-value name="user_id" start-index="256" stop-index="264">
-                                        <owner name="o" start-index="256" stop-index="256" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                        <literal-expression value="1" start-index="270" stop-index="270" />
-                                        <literal-expression value="2" start-index="273" stop-index="273" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                    <column-left-value name="order_id" start-index="280" stop-index="289">
-                                        <owner name="o" start-index="280" stop-index="280" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="256" stop-index="305" literal-stop-index="306">
+                                    <left>
+                                        <in-expression start-index="256" stop-index="274">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="256" stop-index="264">
+                                                    <owner name="o" start-index="256" stop-index="256" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="269" stop-index="274">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="280" stop-index="305" literal-stop-index="306">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="280" stop-index="289">
+                                                    <owner name="o" start-index="280" stop-index="280" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="299" stop-index="299" />
+                                                <parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="305" stop-index="306" />
+                                                <parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
         <where start-index="316" stop-index="337" literal-start-index="317" literal-stop-index="338">
-            <and-predicate>
-                <predicate start-index="322" stop-index="337" literal-start-index="323" literal-stop-index="338">
-                    <column-left-value start-index="322" stop-index="333" literal-start-index="323" literal-stop-index="334" name="rownum_">
-                        <owner start-index="322" stop-index="325" literal-start-index="323" literal-stop-index="326" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="337" stop-index="337" value="5" />
-                        <literal-expression start-index="338" stop-index="338" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="322" stop-index="337" literal-start-index="323" literal-stop-index="338">
+                    <left>
+                        <column name="rownum_" start-index="322" stop-index="333" literal-start-index="323" literal-stop-index="334">
+                            <owner name="row_" start-index="322" stop-index="325" literal-start-index="323" literal-stop-index="326" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="338" stop-index="338" />
+                        <parameter-marker-expression value="5" start-index="337" stop-index="337" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -786,48 +977,71 @@
                             </join-table>
                         </from>
                         <where start-index="268" stop-index="323" literal-stop-index="324">
-                            <and-predicate>
-                                <predicate start-index="274" stop-index="292">
-                                    <column-left-value name="user_id" start-index="274" stop-index="282">
-                                        <owner name="o" start-index="274" stop-index="274" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                        <literal-expression value="1" start-index="288" stop-index="288" />
-                                        <literal-expression value="2" start-index="291" stop-index="291" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                    <column-left-value name="order_id" start-index="298" stop-index="307">
-                                        <owner name="o" start-index="298" stop-index="298" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="274" stop-index="323" literal-stop-index="324">
+                                    <left>
+                                        <in-expression start-index="274" stop-index="292">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="274" stop-index="282">
+                                                    <owner name="o" start-index="274" stop-index="274" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="287" stop-index="292">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="298" stop-index="323" literal-stop-index="324">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="298" stop-index="307">
+                                                    <owner name="o" start-index="298" stop-index="298" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="317" stop-index="317" />
+                                                <parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="323" stop-index="324" />
+                                                <parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
         <where start-index="334" stop-index="355" literal-start-index="335" literal-stop-index="356">
-            <and-predicate>
-                <predicate start-index="340" stop-index="355" literal-start-index="341" literal-stop-index="356">
-                    <column-left-value start-index="340" stop-index="351" literal-start-index="341" literal-stop-index="352" name="rownum_">
-                        <owner start-index="340" stop-index="343" literal-start-index="341" literal-stop-index="344" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="355" stop-index="355" value="5" />
-                        <literal-expression start-index="356" stop-index="356" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="340" stop-index="355" literal-start-index="341" literal-stop-index="356">
+                    <left>
+                        <column name="rownum_" start-index="340" stop-index="351" literal-start-index="341" literal-stop-index="352">
+                            <owner name="row_" start-index="340" stop-index="343" literal-start-index="341" literal-stop-index="344" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="6" start-index="356" stop-index="356" />
+                        <parameter-marker-expression value="5" start-index="355" stop-index="355" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -887,48 +1101,71 @@
                             </join-table>
                         </from>
                         <where start-index="250" stop-index="305" literal-stop-index="306">
-                            <and-predicate>
-                                <predicate start-index="256" stop-index="274">
-                                    <column-left-value name="user_id" start-index="256" stop-index="264">
-                                        <owner name="o" start-index="256" stop-index="256" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
-                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
-                                        <literal-expression value="1" start-index="270" stop-index="270" />
-                                        <literal-expression value="2" start-index="273" stop-index="273" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="280" stop-index="305" literal-stop-index="306">
-                                    <column-left-value name="order_id" start-index="280" stop-index="289">
-                                        <owner name="o" start-index="280" stop-index="280" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="299" stop-index="299" />
-                                        <and-parameter-marker-expression value="4" start-index="305" stop-index="305" />
-                                        <between-literal-expression value="9" start-index="299" stop-index="299" />
-                                        <and-literal-expression value="10" start-index="305" stop-index="306" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="256" stop-index="305" literal-stop-index="306">
+                                    <left>
+                                        <in-expression start-index="256" stop-index="274">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="256" stop-index="264">
+                                                    <owner name="o" start-index="256" stop-index="256" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="269" stop-index="274">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="270" stop-index="270" />
+                                                        <parameter-marker-expression value="1" start-index="270" stop-index="270" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="273" stop-index="273" />
+                                                        <parameter-marker-expression value="2" start-index="273" stop-index="273" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="280" stop-index="305" literal-stop-index="306">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="280" stop-index="289">
+                                                    <owner name="o" start-index="280" stop-index="280" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="299" stop-index="299" />
+                                                <parameter-marker-expression value="3" start-index="299" stop-index="299" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="305" stop-index="306" />
+                                                <parameter-marker-expression value="4" start-index="305" stop-index="305" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
-        <where start-index="316" stop-index="337" literal-start-index="317" literal-stop-index="338">
-            <and-predicate>
-                <predicate start-index="322" stop-index="338" literal-start-index="323" literal-stop-index="339">
-                    <column-left-value start-index="322" stop-index="333" literal-start-index="323" literal-stop-index="334" name="rownum_">
-                        <owner start-index="322" stop-index="325" literal-start-index="323" literal-stop-index="326" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;=" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="338" stop-index="338" value="5" />
-                        <literal-expression start-index="339" stop-index="339" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+        <where start-index="316" stop-index="338" literal-start-index="317" literal-stop-index="339">
+            <expr>
+                <binary-operation-expression start-index="322" stop-index="338" literal-start-index="323" literal-stop-index="339">
+                    <left>
+                        <column name="rownum_" start-index="322" stop-index="333" literal-start-index="323" literal-stop-index="334">
+                            <owner name="row_" start-index="322" stop-index="325" literal-start-index="323" literal-stop-index="326" />
+                        </column>
+                    </left>
+                    <operator>&gt;=</operator>
+                    <right>
+                        <literal-expression value="6" start-index="339" stop-index="339" />
+                        <parameter-marker-expression value="5" start-index="338" stop-index="338" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -988,48 +1225,71 @@
                             </join-table>
                         </from>
                         <where start-index="268" stop-index="323" literal-stop-index="324">
-                            <and-predicate>
-                                <predicate start-index="274" stop-index="292">
-                                    <column-left-value name="user_id" start-index="274" stop-index="282">
-                                        <owner name="o" start-index="274" stop-index="274" />
-                                    </column-left-value>
-                                    <in-right-value>
-                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
-                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
-                                        <literal-expression value="1" start-index="288" stop-index="288" />
-                                        <literal-expression value="2" start-index="291" stop-index="291" />
-                                    </in-right-value>
-                                </predicate>
-                                <predicate start-index="298" stop-index="323" literal-stop-index="324">
-                                    <column-left-value name="order_id" start-index="298" stop-index="307">
-                                        <owner name="o" start-index="298" stop-index="298" />
-                                    </column-left-value>
-                                    <between-right-value>
-                                        <between-parameter-marker-expression value="3" start-index="317" stop-index="317" />
-                                        <and-parameter-marker-expression value="4" start-index="323" stop-index="323" />
-                                        <between-literal-expression value="9" start-index="317" stop-index="317" />
-                                        <and-literal-expression value="10" start-index="323" stop-index="324" />
-                                    </between-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="274" stop-index="323" literal-stop-index="324">
+                                    <left>
+                                        <in-expression start-index="274" stop-index="292">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="user_id" start-index="274" stop-index="282">
+                                                    <owner name="o" start-index="274" stop-index="274" />
+                                                </column>
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="287" stop-index="292">
+                                                    <items>
+                                                        <literal-expression value="1" start-index="288" stop-index="288" />
+                                                        <parameter-marker-expression value="1" start-index="288" stop-index="288" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="2" start-index="291" stop-index="291" />
+                                                        <parameter-marker-expression value="2" start-index="291" stop-index="291" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </left>
+                                    <operator>AND</operator>
+                                    <right>
+                                        <between-expression start-index="298" stop-index="323" literal-stop-index="324">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="order_id" start-index="298" stop-index="307">
+                                                    <owner name="o" start-index="298" stop-index="298" />
+                                                </column>
+                                            </left>
+                                            <between-expr>
+                                                <literal-expression value="9" start-index="317" stop-index="317" />
+                                                <parameter-marker-expression value="3" start-index="317" stop-index="317" />
+                                            </between-expr>
+                                            <and-expr>
+                                                <literal-expression value="10" start-index="323" stop-index="324" />
+                                                <parameter-marker-expression value="4" start-index="323" stop-index="323" />
+                                            </and-expr>
+                                        </between-expression>
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
-        <where start-index="334" stop-index="355" literal-start-index="335" literal-stop-index="356">
-            <and-predicate>
-                <predicate start-index="340" stop-index="356" literal-start-index="341" literal-stop-index="357">
-                    <column-left-value start-index="340" stop-index="351" literal-start-index="341" literal-stop-index="352" name="rownum_">
-                        <owner start-index="340" stop-index="343" literal-start-index="341" literal-stop-index="344" name="row_" />
-                    </column-left-value>
-                    <operator type="&gt;=" />
-                    <compare-right-value>
-                        <parameter-marker-expression start-index="356" stop-index="356" value="5" />
-                        <literal-expression start-index="357" stop-index="357" value="6" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+        <where start-index="334" stop-index="356" literal-start-index="335" literal-stop-index="357">
+            <expr>
+                <binary-operation-expression start-index="340" stop-index="356" literal-start-index="341" literal-stop-index="357">
+                    <left>
+                        <column name="rownum_" start-index="340" stop-index="351" literal-start-index="341" literal-stop-index="352">
+                            <owner name="row_" start-index="340" stop-index="343" literal-start-index="341" literal-stop-index="344" />
+                        </column>
+                    </left>
+                    <operator>&gt;=</operator>
+                    <right>
+                        <literal-expression value="6" start-index="357" stop-index="357" />
+                        <parameter-marker-expression value="5" start-index="356" stop-index="356" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -1093,30 +1353,51 @@
                                             </join-table>
                                         </from>
                                         <where start-index="247" stop-index="314">
-                                            <and-predicate>
-                                                <predicate start-index="253" stop-index="277">
-                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                        <owner start-index="253" stop-index="259" name="order0_" />
-                                                    </column-left-value>
-                                                    <in-right-value>
-                                                        <literal-expression start-index="273" stop-index="273" value="1" />
-                                                        <literal-expression start-index="276" stop-index="276" value="2" />
-                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                    </in-right-value>
-                                                </predicate>
-                                                <predicate start-index="283" stop-index="314">
-                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                        <owner start-index="283" stop-index="289" name="order0_" />
-                                                    </column-left-value>
-                                                    <between-right-value>
-                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                    </between-right-value>
-                                                </predicate>
-                                            </and-predicate>
+                                            <expr>
+                                                <binary-operation-expression start-index="253" stop-index="314">
+                                                    <left>
+                                                        <in-expression start-index="253" stop-index="277">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="user_id" start-index="253" stop-index="267">
+                                                                    <owner name="order0_" start-index="253" stop-index="259" />
+                                                                </column>
+                                                            </left>
+                                                            <right>
+                                                                <list-expression start-index="272" stop-index="277">
+                                                                    <items>
+                                                                        <literal-expression value="1" start-index="273" stop-index="273" />
+                                                                        <parameter-marker-expression value="0" start-index="273" stop-index="273" />
+                                                                    </items>
+                                                                    <items>
+                                                                        <literal-expression value="2" start-index="276" stop-index="276" />
+                                                                        <parameter-marker-expression value="1" start-index="276" stop-index="276" />
+                                                                    </items>
+                                                                </list-expression>
+                                                            </right>
+                                                        </in-expression>
+                                                    </left>
+                                                    <operator>AND</operator>
+                                                    <right>
+                                                        <between-expression start-index="283" stop-index="314">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="order_id" start-index="283" stop-index="298">
+                                                                    <owner name="order0_" start-index="283" stop-index="289" />
+                                                                </column>
+                                                            </left>
+                                                            <between-expr>
+                                                                <literal-expression value="9" start-index="308" stop-index="308" />
+                                                                <parameter-marker-expression value="2" start-index="308" stop-index="308" />
+                                                            </between-expr>
+                                                            <and-expr>
+                                                                <literal-expression value="7" start-index="314" stop-index="314" />
+                                                                <parameter-marker-expression value="3" start-index="314" stop-index="314" />
+                                                            </and-expr>
+                                                        </between-expression>
+                                                    </right>
+                                                </binary-operation-expression>
+                                            </expr>
                                         </where>
                                         <order-by>
                                             <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
@@ -1128,19 +1409,19 @@
                             </subquery-table>
                         </from>
                         <where start-index="346" stop-index="362">
-                            <and-predicate>
-                                <predicate start-index="352" stop-index="362">
-                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                    <operator type="&lt;=" />
-                                    <compare-right-value>
-                                        <literal-expression start-index="362" stop-index="362" value="3" />
-                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                    </compare-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="352" stop-index="362">
+                                    <left>
+                                        <column name="rownum" start-index="352" stop-index="357" />
+                                    </left>
+                                    <operator>&lt;=</operator>
+                                    <right>
+                                        <literal-expression value="3" start-index="362" stop-index="362" />
+                                        <parameter-marker-expression value="4" start-index="362" stop-index="362" />
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
-
-
                     </select>
                 </subquery>
             </subquery-table>
@@ -1207,30 +1488,51 @@
                                             </join-table>
                                         </from>
                                         <where start-index="247" stop-index="314">
-                                            <and-predicate>
-                                                <predicate start-index="253" stop-index="277">
-                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                        <owner start-index="253" stop-index="259" name="order0_" />
-                                                    </column-left-value>
-                                                    <in-right-value>
-                                                        <literal-expression start-index="273" stop-index="273" value="1" />
-                                                        <literal-expression start-index="276" stop-index="276" value="2" />
-                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                    </in-right-value>
-                                                </predicate>
-                                                <predicate start-index="283" stop-index="314">
-                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                        <owner start-index="283" stop-index="289" name="order0_" />
-                                                    </column-left-value>
-                                                    <between-right-value>
-                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                    </between-right-value>
-                                                </predicate>
-                                            </and-predicate>
+                                            <expr>
+                                                <binary-operation-expression start-index="253" stop-index="314">
+                                                    <left>
+                                                        <in-expression start-index="253" stop-index="277">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="user_id" start-index="253" stop-index="267">
+                                                                    <owner name="order0_" start-index="253" stop-index="259" />
+                                                                </column>
+                                                            </left>
+                                                            <right>
+                                                                <list-expression start-index="272" stop-index="277">
+                                                                    <items>
+                                                                        <literal-expression value="1" start-index="273" stop-index="273" />
+                                                                        <parameter-marker-expression value="0" start-index="273" stop-index="273" />
+                                                                    </items>
+                                                                    <items>
+                                                                        <literal-expression value="2" start-index="276" stop-index="276" />
+                                                                        <parameter-marker-expression value="1" start-index="276" stop-index="276" />
+                                                                    </items>
+                                                                </list-expression>
+                                                            </right>
+                                                        </in-expression>
+                                                    </left>
+                                                    <operator>AND</operator>
+                                                    <right>
+                                                        <between-expression start-index="283" stop-index="314">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="order_id" start-index="283" stop-index="298">
+                                                                    <owner name="order0_" start-index="283" stop-index="289" />
+                                                                </column>
+                                                            </left>
+                                                            <between-expr>
+                                                                <literal-expression value="9" start-index="308" stop-index="308" />
+                                                                <parameter-marker-expression value="2" start-index="308" stop-index="308" />
+                                                            </between-expr>
+                                                            <and-expr>
+                                                                <literal-expression value="7" start-index="314" stop-index="314" />
+                                                                <parameter-marker-expression value="3" start-index="314" stop-index="314" />
+                                                            </and-expr>
+                                                        </between-expression>
+                                                    </right>
+                                                </binary-operation-expression>
+                                            </expr>
                                         </where>
                                         <order-by>
                                             <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
@@ -1242,34 +1544,38 @@
                             </subquery-table>
                         </from>
                         <where start-index="346" stop-index="362">
-                            <and-predicate>
-                                <predicate start-index="352" stop-index="362">
-                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                    <operator type="&lt;=" />
-                                    <compare-right-value>
-                                        <literal-expression start-index="362" stop-index="362" value="5" />
-                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                    </compare-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="352" stop-index="362">
+                                    <left>
+                                        <column name="rownum" start-index="352" stop-index="357" />
+                                    </left>
+                                    <operator>&lt;=</operator>
+                                    <right>
+                                        <literal-expression value="5" start-index="362" stop-index="362" />
+                                        <parameter-marker-expression value="4" start-index="362" stop-index="362" />
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
         <where start-index="367" stop-index="385">
-            <and-predicate>
-                <predicate start-index="373" stop-index="385">
-                    <column-left-value start-index="373" stop-index="381" name="rownum_">
-                        <owner start-index="373" stop-index="373" name="t" />
-                    </column-left-value>
-                    <operator type="&gt;" />
-                    <compare-right-value>
-                        <literal-expression start-index="385" stop-index="385" value="3" />
-                        <parameter-marker-expression start-index="385" stop-index="385" value="5" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="373" stop-index="385">
+                    <left>
+                        <column name="rownum_" start-index="373" stop-index="381">
+                            <owner name="t" start-index="373" stop-index="373" />
+                        </column>
+                    </left>
+                    <operator>&gt;</operator>
+                    <right>
+                        <literal-expression value="3" start-index="385" stop-index="385" />
+                        <parameter-marker-expression value="5" start-index="385" stop-index="385" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -1333,30 +1639,51 @@
                                             </join-table>
                                         </from>
                                         <where start-index="247" stop-index="314">
-                                            <and-predicate>
-                                                <predicate start-index="253" stop-index="277">
-                                                    <column-left-value start-index="253" stop-index="267" name="user_id">
-                                                        <owner start-index="253" stop-index="259" name="order0_" />
-                                                    </column-left-value>
-                                                    <in-right-value>
-                                                        <literal-expression start-index="273" stop-index="273" value="1" />
-                                                        <literal-expression start-index="276" stop-index="276" value="2" />
-                                                        <parameter-marker-expression start-index="273" stop-index="273" value="0" />
-                                                        <parameter-marker-expression start-index="276" stop-index="276" value="1" />
-                                                    </in-right-value>
-                                                </predicate>
-                                                <predicate start-index="283" stop-index="314">
-                                                    <column-left-value start-index="283" stop-index="298" name="order_id">
-                                                        <owner start-index="283" stop-index="289" name="order0_" />
-                                                    </column-left-value>
-                                                    <between-right-value>
-                                                        <between-literal-expression start-index="308" stop-index="308" value="9" />
-                                                        <between-parameter-marker-expression start-index="308" stop-index="308" value="2" />
-                                                        <and-literal-expression start-index="314" stop-index="314" value="7" />
-                                                        <and-parameter-marker-expression start-index="314" stop-index="314" value="3" />
-                                                    </between-right-value>
-                                                </predicate>
-                                            </and-predicate>
+                                            <expr>
+                                                <binary-operation-expression start-index="253" stop-index="314">
+                                                    <left>
+                                                        <in-expression start-index="253" stop-index="277">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="user_id" start-index="253" stop-index="267">
+                                                                    <owner name="order0_" start-index="253" stop-index="259" />
+                                                                </column>
+                                                            </left>
+                                                            <right>
+                                                                <list-expression start-index="272" stop-index="277">
+                                                                    <items>
+                                                                        <literal-expression value="1" start-index="273" stop-index="273" />
+                                                                        <parameter-marker-expression value="0" start-index="273" stop-index="273" />
+                                                                    </items>
+                                                                    <items>
+                                                                        <literal-expression value="2" start-index="276" stop-index="276" />
+                                                                        <parameter-marker-expression value="1" start-index="276" stop-index="276" />
+                                                                    </items>
+                                                                </list-expression>
+                                                            </right>
+                                                        </in-expression>
+                                                    </left>
+                                                    <operator>AND</operator>
+                                                    <right>
+                                                        <between-expression start-index="283" stop-index="314">
+                                                            <not>false</not>
+                                                            <left>
+                                                                <column name="order_id" start-index="283" stop-index="298">
+                                                                    <owner name="order0_" start-index="283" stop-index="289" />
+                                                                </column>
+                                                            </left>
+                                                            <between-expr>
+                                                                <literal-expression value="9" start-index="308" stop-index="308" />
+                                                                <parameter-marker-expression value="2" start-index="308" stop-index="308" />
+                                                            </between-expr>
+                                                            <and-expr>
+                                                                <literal-expression value="7" start-index="314" stop-index="314" />
+                                                                <parameter-marker-expression value="3" start-index="314" stop-index="314" />
+                                                            </and-expr>
+                                                        </between-expression>
+                                                    </right>
+                                                </binary-operation-expression>
+                                            </expr>
                                         </where>
                                         <order-by>
                                             <column-item start-index="325" stop-index="333" name="item_id" order-direction="DESC">
@@ -1368,34 +1695,38 @@
                             </subquery-table>
                         </from>
                         <where start-index="346" stop-index="362">
-                            <and-predicate>
-                                <predicate start-index="352" stop-index="362">
-                                    <column-left-value start-index="352" stop-index="357" name="rownum" />
-                                    <operator type="&lt;=" />
-                                    <compare-right-value>
-                                        <literal-expression start-index="362" stop-index="362" value="5" />
-                                        <parameter-marker-expression start-index="362" stop-index="362" value="4" />
-                                    </compare-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <binary-operation-expression start-index="352" stop-index="362">
+                                    <left>
+                                        <column name="rownum" start-index="352" stop-index="357" />
+                                    </left>
+                                    <operator>&lt;=</operator>
+                                    <right>
+                                        <literal-expression value="5" start-index="362" stop-index="362" />
+                                        <parameter-marker-expression value="4" start-index="362" stop-index="362" />
+                                    </right>
+                                </binary-operation-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
             </subquery-table>
         </from>
-        <where start-index="367" stop-index="385">
-            <and-predicate>
-                <predicate start-index="373" stop-index="386">
-                    <column-left-value start-index="373" stop-index="381" name="rownum_">
-                        <owner start-index="373" stop-index="373" name="t" />
-                    </column-left-value>
-                    <operator type="&gt;=" />
-                    <compare-right-value>
-                        <literal-expression start-index="386" stop-index="386" value="3" />
-                        <parameter-marker-expression start-index="386" stop-index="386" value="5" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+        <where start-index="367" stop-index="386">
+            <expr>
+                <binary-operation-expression start-index="373" stop-index="386">
+                    <left>
+                        <column name="rownum_" start-index="373" stop-index="381">
+                            <owner name="t" start-index="373" stop-index="373" />
+                        </column>
+                    </left>
+                    <operator>&gt;=</operator>
+                    <right>
+                        <literal-expression value="3" start-index="386" stop-index="386" />
+                        <parameter-marker-expression value="5" start-index="386" stop-index="386" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -1407,16 +1738,18 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="38" literal-stop-index="39">
-            <and-predicate>
-                <predicate start-index="28" stop-index="38" literal-stop-index="39">
-                    <column-left-value name="ROWNUM" start-index="28" stop-index="33" />
-                    <operator type="&lt;=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="38" stop-index="38" />
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="38" literal-stop-index="39">
+                    <left>
+                        <column name="ROWNUM" start-index="28" stop-index="33" />
+                    </left>
+                    <operator>&lt;=</operator>
+                    <right>
                         <literal-expression value="20" start-index="38" stop-index="39" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="38" stop-index="38" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="order_id" start-index="49" stop-index="56" literal-start-index="50" literal-stop-index="57" />
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
index 9f5eae6..05ff450 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select-sub-query.xml
@@ -52,17 +52,26 @@
                             <simple-table start-index="31" stop-index="37" name="t_order"/>
                         </from>
                         <where start-index="39" stop-index="62">
-                            <and-predicate>
-                                <predicate start-index="45" stop-index="62">
-                                    <column-left-value start-index="45" stop-index="52" name="order_id" />
-                                    <in-right-value>
-                                        <literal-expression start-index="58" stop-index="58" value="3" />
-                                        <parameter-marker-expression start-index="58" stop-index="58" value="0" />
-                                        <literal-expression start-index="61" stop-index="61" value="4" />
-                                        <parameter-marker-expression start-index="61" stop-index="61" value="1"/>
-                                    </in-right-value>
-                                </predicate>
-                            </and-predicate>
+                            <expr>
+                                <in-expression start-index="45" stop-index="62">
+                                    <not>false</not>
+                                    <left>
+                                        <column name="order_id" start-index="45" stop-index="52" />
+                                    </left>
+                                    <right>
+                                        <list-expression start-index="57" stop-index="62">
+                                            <items>
+                                                <literal-expression value="3" start-index="58" stop-index="58" />
+                                                <parameter-marker-expression value="0" start-index="58" stop-index="58" />
+                                            </items>
+                                            <items>
+                                                <literal-expression value="4" start-index="61" stop-index="61" />
+                                                <parameter-marker-expression value="1" start-index="61" stop-index="61" />
+                                            </items>
+                                        </list-expression>
+                                    </right>
+                                </in-expression>
+                            </expr>
                         </where>
                     </select>
                 </subquery>
@@ -78,37 +87,39 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="85">
-            <and-predicate>
-                <predicate start-index="28" literal-stop-index="85">
-                    <column-left-value name="user_id" start-index="28" stop-index="34" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <subquery-expression start-index="38" stop-index="85" literal-start-index="38" literal-stop-index="85">
+            <expr>
+                <binary-operation-expression start-index="28" stop-index="85">
+                    <left>
+                        <column name="user_id" start-index="28" stop-index="34" />
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <subquery start-index="38" stop-index="85">
                             <select>
-                                <table-reference>
-                                    <table-factor>
-                                        <table name="t_order_item" start-index="59" stop-index="70" />
-                                    </table-factor>
-                                </table-reference>
+                                <from start-index="59" stop-index="70">
+                                    <simple-table name="t_order_item" start-index="59" stop-index="70" />
+                                </from>
                                 <projections start-index="46" stop-index="52">
                                     <column-projection name="user_id" start-index="46" stop-index="52" />
                                 </projections>
-                                <where start-index="72" stop-index="85">
-                                    <and-predicate>
-                                        <predicate start-index="78" literal-stop-index="84">
-                                            <column-left-value name="id" start-index="78" stop-index="79" />
-                                            <operator type="=" />
-                                            <compare-right-value>
+                                <where start-index="72" stop-index="84">
+                                    <expr>
+                                        <binary-operation-expression start-index="78" stop-index="84">
+                                            <left>
+                                                <column name="id" start-index="78" stop-index="79" />
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
                                                 <literal-expression value="10" start-index="83" stop-index="84" />
-                                            </compare-right-value>
-                                        </predicate>
-                                    </and-predicate>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </expr>
                                 </where>
                             </select>
-                        </subquery-expression>
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        </subquery>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -120,11 +131,14 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="22" stop-index="93">
-            <and-predicate>
-                <predicate start-index="28" literal-stop-index="93">
-                    <column-left-value name="user_id" start-index="28" stop-index="34" />
-                    <in-right-value>
-                        <subquery-expression start-index="39" stop-index="93" literal-start-index="39" literal-stop-index="93">
+            <expr>
+                <in-expression start-index="28" stop-index="93">
+                    <not>false</not>
+                    <left>
+                        <column name="user_id" start-index="28" stop-index="34" />
+                    </left>
+                    <right>
+                        <subquery start-index="39" stop-index="93">
                             <select>
                                 <from>
                                     <simple-table name="t_order_item" start-index="60" stop-index="71" />
@@ -133,21 +147,30 @@
                                     <column-projection name="user_id" start-index="47" stop-index="53" />
                                 </projections>
                                 <where start-index="73" stop-index="92">
-                                    <and-predicate>
-                                        <predicate start-index="79" literal-stop-index="92">
-                                            <column-left-value name="id" start-index="79" stop-index="80"  />
-                                            <in-right-value>
-                                                <literal-expression value="10" start-index="86" stop-index="87" />
-                                                <literal-expression value="11" start-index="90" stop-index="91" />
-                                            </in-right-value>
-                                        </predicate>
-                                    </and-predicate>
+                                    <expr>
+                                        <in-expression start-index="79" stop-index="92">
+                                            <not>false</not>
+                                            <left>
+                                                <column name="id" start-index="79" stop-index="80" />
+                                            </left>
+                                            <right>
+                                                <list-expression start-index="85" stop-index="92">
+                                                    <items>
+                                                        <literal-expression value="10" start-index="86" stop-index="87" />
+                                                    </items>
+                                                    <items>
+                                                        <literal-expression value="11" start-index="90" stop-index="91" />
+                                                    </items>
+                                                </list-expression>
+                                            </right>
+                                        </in-expression>
+                                    </expr>
                                 </where>
                             </select>
-                        </subquery-expression>
-                    </in-right-value>
-                </predicate>
-            </and-predicate>
+                        </subquery>
+                    </right>
+                </in-expression>
+            </expr>
         </where>
     </select>
 
@@ -158,12 +181,15 @@
         <projections start-index="7" stop-index="7">
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
-        <where start-index="22" stop-index="106">
-            <and-predicate>
-                <predicate start-index="28" stop-index="103" literal-stop-index="104">
-                    <column-left-value name="user_id" start-index="28" stop-index="34" />
-                    <between-right-value>
-                        <between-subquery-expression start-index="44" stop-index="97" literal-start-index="44" literal-stop-index="97" >
+        <where start-index="22" stop-index="103" literal-stop-index="104">
+            <expr>
+                <between-expression start-index="28" stop-index="103" literal-stop-index="104">
+                    <not>false</not>
+                    <left>
+                        <column name="user_id" start-index="28" stop-index="34" />
+                    </left>
+                    <between-expr>
+                        <subquery start-index="44" stop-index="97">
                             <select>
                                 <from>
                                     <simple-table name="t_order_item" start-index="65" stop-index="76" />
@@ -172,23 +198,27 @@
                                     <column-projection name="user_id" start-index="52" stop-index="58" />
                                 </projections>
                                 <where start-index="78" stop-index="96">
-                                    <and-predicate>
-                                        <predicate start-index="84" stop-index="96" literal-stop-index="96">
-                                            <column-left-value name="order_id" start-index="84" stop-index="91" />
-                                            <operator type="=" />
-                                            <compare-right-value>
+                                    <expr>
+                                        <binary-operation-expression start-index="84" stop-index="96">
+                                            <left>
+                                                <column name="order_id" start-index="84" stop-index="91" />
+                                            </left>
+                                            <operator>=</operator>
+                                            <right>
                                                 <literal-expression value="10" start-index="95" stop-index="96" />
-                                            </compare-right-value>
-                                        </predicate>
-                                    </and-predicate>
+                                            </right>
+                                        </binary-operation-expression>
+                                    </expr>
                                 </where>
                             </select>
-                        </between-subquery-expression>
-                        <and-parameter-marker-expression value="0" start-index="103" stop-index="103" />
-                        <and-literal-expression value="12" start-index="103" stop-index="104" />
-                    </between-right-value>
-                </predicate>
-            </and-predicate>
+                        </subquery>
+                    </between-expr>
+                    <and-expr>
+                        <literal-expression value="12" start-index="103" stop-index="104" />
+                        <parameter-marker-expression value="0" start-index="103" stop-index="103" />
+                    </and-expr>
+                </between-expression>
+            </expr>
         </where>
     </select>
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
index 4b809c7..326e998 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/dml/select.xml
@@ -19,29 +19,40 @@
 <sql-parser-test-cases>
     <select sql-case-id="select_constant_without_table" >
         <projections start-index="7" stop-index="12">
-            <expression-projection alias="a" start-index="7" stop-index="12" />
+            <expression-projection text="1" alias="a" start-index="7" stop-index="12" />
         </projections>
     </select>
 
     <select sql-case-id="select_sqlmode_ansi_quotes" >
         <projections start-index="7" stop-index="10">
-            <expression-projection start-index="7" stop-index="10" />
+            <expression-projection text="id" start-index="7" stop-index="10" />
         </projections>
         <from>
             <simple-table name="t_order" start-delimiter='"' end-delimiter='"' start-index="17" stop-index="25" />
         </from>
-<!--        TODO support where-->
         <where start-index="27" stop-index="49">
-
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="49">
+                    <left>
+                        <column name="id" start-delimiter='"' end-delimiter='"' start-index="33" stop-index="46">
+                            <owner name="t_order" start-delimiter='"' end-delimiter='"' start-index="33" stop-index="41" />
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="10" start-index="48" stop-index="49" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
     <select sql-case-id="select_with_union">
     </select>
-    
+
     <select sql-case-id="select_with_function_name" >
         <projections start-index="7" stop-index="23">
-            <expression-projection start-index="7" stop-index="23" />
+            <expression-projection text="current_timestamp" start-index="7" stop-index="23" />
         </projections>
     </select>
 
@@ -55,24 +66,35 @@
             </shorthand-projection>
         </projections>
         <where start-index="38" stop-index="71">
-            <and-predicate>
-                <predicate start-index="44" stop-index="54">
-                    <column-left-value name="user_id" start-index="44" stop-index="50" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="54" stop-index="54" />
-                        <literal-expression value="1" start-index="54" stop-index="54" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="60" stop-index="71">
-                    <column-left-value name="order_id" start-index="60" stop-index="67" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="71" stop-index="71" />
-                        <literal-expression value="1" start-index="71" stop-index="71" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="44" stop-index="71">
+                    <left>
+                        <binary-operation-expression start-index="44" stop-index="54">
+                            <left>
+                                <column name="user_id" start-index="44" stop-index="50" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="54" stop-index="54" />
+                                <parameter-marker-expression value="0" start-index="54" stop-index="54" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="60" stop-index="71">
+                            <left>
+                                <column name="order_id" start-index="60" stop-index="67" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="71" stop-index="71" />
+                                <parameter-marker-expression value="1" start-index="71" stop-index="71" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -90,26 +112,37 @@
             <column-projection name="status" start-index="40" stop-index="45" />
         </projections>
         <where start-index="68" stop-index="109">
-            <and-predicate>
-                <predicate start-index="74" stop-index="92">
-                    <column-left-value name="user_id" start-index="74" stop-index="88">
-                        <owner name="t_order" start-index="74" stop-index="80" />
-                    </column-left-value>
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="92" stop-index="92" />
-                        <literal-expression value="1" start-index="92" stop-index="92" />
-                    </compare-right-value>
-                </predicate>
-                <predicate start-index="98" stop-index="109">
-                    <column-left-value name="order_id" start-index="98" stop-index="105" />
-                    <operator type="=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="1" start-index="109" stop-index="109" />
-                        <literal-expression value="1" start-index="109" stop-index="109" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+            <expr>
+                <binary-operation-expression start-index="74" stop-index="109">
+                    <left>
+                        <binary-operation-expression start-index="74" stop-index="92">
+                            <left>
+                                <column name="user_id" start-index="74" stop-index="88">
+                                    <owner name="t_order" start-index="74" stop-index="80" />
+                                </column>
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="92" stop-index="92" />
+                                <parameter-marker-expression value="0" start-index="92" stop-index="92" />
+                            </right>
+                        </binary-operation-expression>
+                    </left>
+                    <operator>AND</operator>
+                    <right>
+                        <binary-operation-expression start-index="98" stop-index="109">
+                            <left>
+                                <column name="order_id" start-index="98" stop-index="105" />
+                            </left>
+                            <operator>=</operator>
+                            <right>
+                                <literal-expression value="1" start-index="109" stop-index="109" />
+                                <parameter-marker-expression value="1" start-index="109" stop-index="109" />
+                            </right>
+                        </binary-operation-expression>
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
     </select>
 
@@ -121,16 +154,18 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="27" stop-index="44">
-            <and-predicate>
-                <predicate start-index="33" stop-index="44">
-                    <column-left-value name="item_id" start-index="33" stop-index="39" />
-                    <operator type="&lt;&gt;" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="44">
+                    <left>
+                        <column name="item_id" start-index="33" stop-index="39" />
+                    </left>
+                    <operator>&lt;&gt;</operator>
+                    <right>
                         <literal-expression value="1" start-index="44" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+                    </right>
+                </binary-operation-expression>
+            </expr>
         </where>
         <order-by>
             <column-item name="item_id" start-index="55" stop-index="61" />
@@ -145,16 +180,18 @@
             <shorthand-projection start-index="7" stop-index="7" />
         </projections>
         <where start-index="27" stop-index="44">
-            <and-predicate>
-                <predicate start-index="33" stop-index="44">
-                    <column-left-value name="item_id" start-index="33" stop-index="39" />
-                    <operator type="!=" />
-                    <compare-right-value>
-                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+            <expr>
+                <binary-operation-expression start-index="33" stop-index="44">
+                    <left>
+                        <column name="item_id" start-index="33" stop-index="39" />
+                    </left>
+                    <operator>!=</operator>
+                    <right>
                         <literal-expression value="1" start-index="44" stop-index="44" />
-                    </compare-right-value>
-                </predicate>
-            </and-predicate>
+                        <parameter-marker-expression value="0" start-index="44" stop-index="44" />
+                    </right>
+                </binary-operation-expression>
... 3489 lines suppressed ...