From bf7ec315b2fb1b3d3ad5d536bc7b69aee09acc52 Mon Sep 17 00:00:00 2001 From: terrymanu Date: Fri, 17 Mar 2017 02:05:41 +0800 Subject: [PATCH] refactor SQLStatementParser => SQLParserEngine --- .../rdb/sharding/parser/SQLParseEngine.java | 1 + .../rdb/sharding/parser/SQLParserFactory.java | 8 +++--- ...tementParser.java => SQLParserEngine.java} | 17 ++++------- .../parser/AbstractStatementParserTest.java | 4 +-- .../sql/parser/DeleteStatementParserTest.java | 17 +++++------ .../sql/parser/InsertStatementParserTest.java | 28 +++++++++---------- .../sql/parser/UpdateStatementParserTest.java | 14 +++++----- 7 files changed, 43 insertions(+), 46 deletions(-) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{SQLStatementParser.java => SQLParserEngine.java} (88%) diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParseEngine.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParseEngine.java index 190a6a44fa..d4702cd558 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParseEngine.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParseEngine.java @@ -48,6 +48,7 @@ import java.util.List; */ @RequiredArgsConstructor @Slf4j +// TODO 与SQLParserEngine合一 public final class SQLParseEngine { private final SQLContext sqlContext; diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java index 5b566e4c25..8b2ca263e1 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java @@ -23,7 +23,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.Oracle import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLStatementParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParserEngine; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; import com.dangdang.ddframe.rdb.sharding.exception.SQLParserException; @@ -55,12 +55,12 @@ public final class SQLParserFactory { */ public static SQLParseEngine create(final DatabaseType databaseType, final String sql, final List parameters, final ShardingRule shardingRule) throws SQLParserException { log.debug("Logic SQL: {}, {}", sql, parameters); - SQLContext sqlContext = getSQLStatementParser(databaseType, sql, shardingRule, parameters).parseStatement(); + SQLContext sqlContext = getSQLParserEngine(databaseType, sql, shardingRule, parameters).parseStatement(); log.trace("Get {} SQL Statement", sqlContext.getClass().getName()); return new SQLParseEngine(sqlContext); } - private static SQLStatementParser getSQLStatementParser(final DatabaseType dbType, final String sql, final ShardingRule shardingRule, final List parameters) { + private static SQLParserEngine getSQLParserEngine(final DatabaseType dbType, final String sql, final ShardingRule shardingRule, final List parameters) { SQLParser sqlParser; switch (dbType) { case H2: @@ -79,6 +79,6 @@ public final class SQLParserFactory { default: throw new UnsupportedOperationException(dbType.name()); } - return new SQLStatementParser(dbType, shardingRule, parameters, sqlParser); + return new SQLParserEngine(dbType, sqlParser, shardingRule, parameters); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParserEngine.java similarity index 88% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParserEngine.java index aba67c28e9..0caf89e0a6 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParserEngine.java @@ -26,31 +26,26 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.SQLDeleteParse import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.SQLInsertParserFactory; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.SQLSelectParserFactory; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.SQLUpdateParserFactory; +import lombok.RequiredArgsConstructor; import java.util.List; /** - * SQL解析器. + * SQL解析引擎. * * @author zhangliang */ -public final class SQLStatementParser { +@RequiredArgsConstructor +public final class SQLParserEngine { private final DatabaseType dbType; + private final SQLParser exprParser; + private final ShardingRule shardingRule; private final List parameters; - private final SQLParser exprParser; - - public SQLStatementParser(final DatabaseType dbType, final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { - this.dbType = dbType; - this.shardingRule = shardingRule; - this.parameters = parameters; - this.exprParser = exprParser; - } - /** * 解析SQL. * diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java index 2a447ec4e0..d93bbbf329 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java @@ -43,7 +43,7 @@ import static org.mockito.Mockito.when; public abstract class AbstractStatementParserTest { - protected final SQLStatementParser getSqlStatementParser(final DatabaseType dbType, final String actualSQL) { + protected final SQLParserEngine getSqlStatementParser(final DatabaseType dbType, final String actualSQL) { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); SQLParser sqlParser; @@ -64,7 +64,7 @@ public abstract class AbstractStatementParserTest { default: throw new UnsupportedOperationException(dbType.name()); } - return new SQLStatementParser(dbType, shardingRule, parameters, sqlParser); + return new SQLParserEngine(dbType, sqlParser, shardingRule, parameters); } protected final ShardingRule createShardingRule() { diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java index f3580ea82a..5afd7661ac 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java @@ -41,7 +41,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithoutCondition() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE FROM TABLE_XXX", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser("DELETE FROM TABLE_XXX", shardingRule, parameters), shardingRule, parameters); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertThat(sqlContext.getTables().get(0).getName(), is("TABLE_XXX")); assertTrue(sqlContext.getConditionContexts().isEmpty()); @@ -52,9 +52,9 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "DELETE FROM TABLE_XXX xxx WHERE field4<10 AND TABLE_XXX.field1=1 AND field5>10 AND xxx.field2 IN (1,3) AND field6<=10 AND field3 BETWEEN 5 AND 20 AND field7>=10", - shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "DELETE FROM TABLE_XXX xxx WHERE field4<10 AND TABLE_XXX.field1=1 AND field5>10 AND xxx.field2 IN (1,3) AND field6<=10 AND field3 BETWEEN 5 AND 20 AND field7>=10", + shardingRule, parameters), shardingRule, parameters); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertDeleteStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is( @@ -65,8 +65,9 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Arrays.asList(10, 1, 10, 1, 3, 10, 5, 20, 10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "DELETE FROM TABLE_XXX xxx WHERE field4? AND field2 IN (?,?) AND field6<=? AND field3 BETWEEN ? AND ? AND field7>=?", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "DELETE FROM TABLE_XXX xxx WHERE field4? AND field2 IN (?,?) AND field6<=? AND field3 BETWEEN ? AND ? AND field7>=?", shardingRule, parameters), + shardingRule, parameters); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertDeleteStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is( @@ -104,7 +105,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseStatementWithDeleteMultipleTable() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE TABLE_XXX1, TABLE_xxx2 FROM TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters)) + new SQLParserEngine(DatabaseType.MySQL, new MySQLParser("DELETE TABLE_XXX1, TABLE_xxx2 FROM TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters), shardingRule, parameters) .parseStatement(); } @@ -112,7 +113,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseStatementWithDeleteMultipleTableWithUsing() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE FROM TABLE_XXX1, TABLE_xxx2 USING TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters)) + new SQLParserEngine(DatabaseType.MySQL, new MySQLParser("DELETE FROM TABLE_XXX1, TABLE_xxx2 USING TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters), shardingRule, parameters) .parseStatement(); } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java index 5aee6a5aac..b96747046c 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java @@ -54,8 +54,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "INSERT INTO `TABLE_XXX` (`field1`, `field2`) VALUES (10, 1)", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`, `field2`) VALUES (10, 1)", shardingRule, parameters), shardingRule, parameters); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, `field2`) VALUES (10, 1)")); @@ -65,8 +65,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Lists.newArrayList(10, 1); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "INSERT INTO TABLE_XXX (field1, field2) VALUES (?, ?)", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "INSERT INTO TABLE_XXX (field1, field2) VALUES (?, ?)", shardingRule, parameters), shardingRule, parameters); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (field1, field2) VALUES (?, ?)")); @@ -76,8 +76,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithAutoIncrementColumnsWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRuleWithAutoIncrementColumns(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "INSERT INTO `TABLE_XXX` (`field1`) VALUES (10)", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`) VALUES (10)", shardingRule, parameters), shardingRule, parameters); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, field2) VALUES (10, 1)")); @@ -87,8 +87,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithAutoIncrementColumnsWithParameter() throws SQLException { ShardingRule shardingRule = createShardingRuleWithAutoIncrementColumns(); List parameters = Lists.newArrayList(10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( - "INSERT INTO `TABLE_XXX` (`field1`) VALUES (?)", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`) VALUES (?)", shardingRule, parameters), shardingRule, parameters); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, field2) VALUES (?, ?)")); @@ -175,23 +175,23 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseMultipleInsertForMySQL() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( - "INSERT INTO TABLE_XXX (`field1`, `field2`) VALUES (1, 'value_char'), (2, 'value_char')", shardingRule, parameters)).parseStatement(); + new SQLParserEngine(DatabaseType.Oracle, new OracleParser( + "INSERT INTO TABLE_XXX (`field1`, `field2`) VALUES (1, 'value_char'), (2, 'value_char')", shardingRule, parameters), shardingRule, parameters).parseStatement(); } @Test(expected = ParserUnsupportedException.class) public void parseInsertAllForOracle() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( - "INSERT ALL INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters)).parseStatement(); + new SQLParserEngine(DatabaseType.Oracle, new OracleParser( + "INSERT ALL INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters), shardingRule, parameters).parseStatement(); } @Test(expected = ParserUnsupportedException.class) public void parseInsertFirstForOracle() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( - "INSERT FIRST INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters)).parseStatement(); + new SQLParserEngine(DatabaseType.Oracle, new OracleParser( + "INSERT FIRST INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters), shardingRule, parameters).parseStatement(); } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java index 5fa5b3a9fa..cc137f8846 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java @@ -42,7 +42,7 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithoutCondition() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("UPDATE TABLE_XXX SET field1=field1+1", shardingRule, parameters)); + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser("UPDATE TABLE_XXX SET field1=field1+1", shardingRule, parameters), shardingRule, parameters); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertThat(sqlContext.getTables().get(0).getName(), is("TABLE_XXX")); assertTrue(sqlContext.getConditionContexts().isEmpty()); @@ -53,10 +53,10 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( "UPDATE TABLE_XXX xxx SET TABLE_XXX.field1=field1+1,xxx.field2=2 WHERE " + "TABLE_XXX.field4<10 AND TABLE_XXX.field1=1 AND xxx.field5>10 AND TABLE_XXX.field2 IN (1,3) AND xxx.field6<=10 AND TABLE_XXX.field3 BETWEEN 5 AND 20 AND xxx.field7>=10", - shardingRule, parameters)); + shardingRule, parameters), shardingRule, parameters); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertUpdateStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("UPDATE [Token(TABLE_XXX)] xxx SET [Token(TABLE_XXX)].field1=field1+1,xxx.field2=2 WHERE [Token(TABLE_XXX)].field4<10 " @@ -67,9 +67,9 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Arrays.asList(2, 10, 1, 10, 1, 3, 10, 5, 20, 10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + SQLParserEngine statementParser = new SQLParserEngine(DatabaseType.MySQL, new MySQLParser( "UPDATE TABLE_XXX AS xxx SET field1=field1+? WHERE field4? AND xxx.field2 IN (?, ?) AND field6<=? AND xxx.field3 BETWEEN ? AND ? AND field7>=?", - shardingRule, parameters)); + shardingRule, parameters), shardingRule, parameters); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertUpdateStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("UPDATE [Token(TABLE_XXX)] AS xxx SET field1=field1+? " @@ -107,8 +107,8 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithOr() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser("UPDATE TABLE_XXX SET field1=1 WHERE field1<1 AND (field1 >2 OR field2 =1)", - shardingRule, parameters)).parseStatement(); + new SQLParserEngine(DatabaseType.Oracle, new OracleParser("UPDATE TABLE_XXX SET field1=1 WHERE field1<1 AND (field1 >2 OR field2 =1)", + shardingRule, parameters), shardingRule, parameters).parseStatement(); } @Test -- GitLab