From d1e39ce5f8c8bfea9ed71f963f5b79e54c7a252e Mon Sep 17 00:00:00 2001 From: terrymanu Date: Tue, 22 Aug 2017 10:50:46 +0800 Subject: [PATCH] not support with --- .../sharding/parsing/SQLParsingEngine.java | 24 ++----------------- .../statement/DeleteStatementParserTest.java | 8 ------- .../statement/InsertStatementParserTest.java | 8 ------- .../statement/UpdateStatementParserTest.java | 8 ------- 4 files changed, 2 insertions(+), 46 deletions(-) diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/SQLParsingEngine.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/SQLParsingEngine.java index 8bee6c463f..386d16b726 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/SQLParsingEngine.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parsing/SQLParsingEngine.java @@ -19,13 +19,12 @@ package com.dangdang.ddframe.rdb.sharding.parsing; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parsing.lexer.LexerEngine; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.mysql.MySQLLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.postgresql.PostgreSQLLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.sqlserver.SQLServerLexer; import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol; -import com.dangdang.ddframe.rdb.sharding.parsing.lexer.LexerEngine; import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException; import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatement; import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.ddl.alter.AlterParserFactory; @@ -36,7 +35,6 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dml.delete.Del import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dml.insert.InsertParserFactory; import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dml.update.UpdateParserFactory; import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectParserFactory; -import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectStatement; import lombok.RequiredArgsConstructor; /** @@ -84,7 +82,7 @@ public final class SQLParsingEngine { * @return SQL语句对象 */ public SQLStatement parse() { - skipToSQLBegin(); + lexerEngine.nextToken(); if (lexerEngine.equalAny(DefaultKeyword.SELECT)) { return SelectParserFactory.newInstance(dbType, shardingRule, lexerEngine).parse(); } @@ -111,22 +109,4 @@ public final class SQLParsingEngine { } throw new SQLParsingUnsupportedException(lexerEngine.getCurrentToken().getType()); } - - private void skipToSQLBegin() { - lexerEngine.nextToken(); - lexerEngine.skipIfEqual(Symbol.SEMI); - if (lexerEngine.equalAny(DefaultKeyword.WITH)) { - skipWith(); - } - } - - private void skipWith() { - lexerEngine.nextToken(); - do { - lexerEngine.skipUntil(DefaultKeyword.AS); - lexerEngine.accept(DefaultKeyword.AS); - // TODO with 中包含 ? 无法获取 - lexerEngine.skipParentheses(new SelectStatement()); - } while (lexerEngine.skipIfEqual(Symbol.COMMA)); - } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java index 4c5723ab33..8ae4e6833e 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/DeleteStatementParserTest.java @@ -123,14 +123,6 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest parseWithSpecialSyntax(DatabaseType.MySQL, "DELETE FROM TABLE_XXX PARTITION (partition_1, partition_2,partition_3) WHERE field1=1"); parseWithSpecialSyntax(DatabaseType.Oracle, "DELETE /*+ index(field1) */ ONLY (TABLE_XXX) WHERE field1=1 RETURN * LOG ERRORS INTO TABLE_LOG"); parseWithSpecialSyntax(DatabaseType.Oracle, "DELETE /*+ index(field1) */ ONLY (TABLE_XXX) WHERE field1=1 RETURNING *"); - /* // TODO 不支持 - parseWithSpecialSyntax(DatabaseType.SQLServer, - "WITH field_query (field1, field2) AS (SELECT field1, field2 FROM TABLE_XXX AS xxx GROUP BY field1) DELETE TOP(10) OUTPUT (inserted.field1) FROM TABLE_XXX WHERE field1=1"); - */ - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH RECURSIVE field_query (field1) AS (SELECT field1 FROM TABLE_XXX AS xxx ORDER BY field1 DESC) DELETE FROM ONLY TABLE_XXX USING producers WHERE field1=1 RETURNING *"); - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH field1_query AS (SELECT field1 FROM TABLE_XXX), field2_query AS (SELECT field2 FROM TABLE_XXX) DELETE FROM ONLY TABLE_XXX USING producers WHERE field1=1 OUTPUT *"); } private void parseWithSpecialSyntax(final DatabaseType dbType, final String actualSQL) { diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java index e0e2f88f47..25fb44486e 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/InsertStatementParserTest.java @@ -122,14 +122,6 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest // TODO // parseWithSpecialSyntax(DatabaseType.MySQL, "INSERT INTO TABLE_XXX (field1) SELECT field1 FROM TABLE_XXX2 ON DUPLICATE KEY UPDATE field1=field1+1"); parseWithSpecialSyntax(DatabaseType.MySQL, "INSERT /*+ index(field1) */ INTO TABLE_XXX (`field1`) VALUES (1) RETURNING field1*2 LOG ERRORS INTO TABLE_LOG"); - /* // TODO 不支持 - parseWithSpecialSyntax(DatabaseType.SQLServer, - "WITH field_query (field1, field2) AS (SELECT field1, field2 FROM TABLE_XXX AS xxx GROUP BY field1) INSERT TOP(10) INTO OUTPUT TABLE_XXX (`field1`) VALUES (1)"); - */ - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH RECURSIVE field_query (field1, field2) AS (SELECT field1, field2 FROM TABLE_XXX AS xxx ORDER BY field1 DESC) INSERT INTO TABLE_XXX (field1) VALUES (1) RETURNING id"); - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH field1_query AS (SELECT field1 FROM TABLE_XXX), field2_query AS (SELECT field2 FROM TABLE_XXX) INSERT INTO TABLE_XXX (field1) VALUES (1) RETURNING *"); } private void parseWithSpecialSyntax(final DatabaseType dbType, final String actualSQL) { diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java index 6a2dd67812..90538bedaa 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parsing/parser/statement/UpdateStatementParserTest.java @@ -117,14 +117,6 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest parseWithSpecialSyntax(DatabaseType.Oracle, "UPDATE /*+ index(field1) */ ONLY TABLE_XXX SET field1=1 WHERE field1=1 RETURN * LOG ERRORS INTO TABLE_LOG"); parseWithSpecialSyntax(DatabaseType.Oracle, "UPDATE /*+ index(field1) */ ONLY TABLE_XXX SET field1=1 WHERE field1=1 RETURNING *"); parseWithSpecialSyntax(DatabaseType.Oracle, "UPDATE /*+ index(field1) */ ONLY TABLE_XXX SET field1=1 WHERE field1=1 LOG ERRORS INTO TABLE_LOG"); - /* // TODO 不支持 - parseWithSpecialSyntax(DatabaseType.SQLServer, - "WITH field_query (field1) AS (SELECT field1 FROM TABLE_XXX AS xxx GROUP BY field1) UPDATE TOP(10) TABLE_XXX SET field1=1 OUTPUT (inserted.field1) WHERE field1=1"); - */ - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH RECURSIVE field_query (field1) AS (SELECT field1 FROM TABLE_XXX AS xxx ORDER BY field1 DESC) UPDATE ONLY TABLE_XXX SET field1=1 WHERE field1=1 RETURNING *"); - parseWithSpecialSyntax(DatabaseType.PostgreSQL, - "WITH field1_query AS (SELECT field1 FROM TABLE_XXX), field2_query AS (SELECT field2 FROM TABLE_XXX) UPDATE ONLY TABLE_XXX SET (field1,field2)=(1,?) WHERE field1=1"); } private void parseWithSpecialSyntax(final DatabaseType dbType, final String actualSQL) { -- GitLab