提交 d1e39ce5 编写于 作者: T terrymanu

not support with

上级 2f8a8d2f
......@@ -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));
}
}
......@@ -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) {
......
......@@ -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) {
......
......@@ -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) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册