Loading sharding-core/src/main/java/io/shardingjdbc/core/parsing/SQLJudgeEngine.java +24 −5 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement; import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement; import io.shardingjdbc.core.parsing.parser.sql.tcl.TCLStatement; import lombok.RequiredArgsConstructor; Loading @@ -61,17 +62,16 @@ public final class SQLJudgeEngine { TokenType tokenType = lexerEngine.getCurrentToken().getType(); if (tokenType instanceof Keyword) { if (isDQL(tokenType)) { return new SelectStatement(); return getDQLStatement(); } // TODO use InsertStatement, UpdateStatement ... if (isDML(tokenType)) { return new DMLStatement(); return getDMLStatement(tokenType); } if (isDDL(tokenType)) { return new DDLStatement(); return getDDLStatement(); } if (isTCL(tokenType)) { return new TCLStatement(); return getTCLStatement(); } if (isDAL(tokenType)) { return getDALStatement(tokenType, lexerEngine); Loading Loading @@ -105,6 +105,25 @@ public final class SQLJudgeEngine { return DefaultKeyword.USE == tokenType || DefaultKeyword.DESC == tokenType || MySQLKeyword.DESCRIBE == tokenType || MySQLKeyword.SHOW == tokenType; } private SQLStatement getDQLStatement() { return new SelectStatement(); } private SQLStatement getDMLStatement(final TokenType tokenType) { if (DefaultKeyword.INSERT == tokenType) { return new InsertStatement(); } return new DMLStatement(); } private SQLStatement getDDLStatement() { return new DDLStatement(); } private SQLStatement getTCLStatement() { return new TCLStatement(); } private SQLStatement getDALStatement(final TokenType tokenType, final LexerEngine lexerEngine) { if (DefaultKeyword.USE == tokenType) { return new UseStatement(); Loading sharding-core/src/test/java/io/shardingjdbc/core/parsing/SQLJudgeEngineTest.java +74 −6 Original line number Diff line number Diff line Loading @@ -17,9 +17,17 @@ package io.shardingjdbc.core.parsing; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.DescribeStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowColumnsStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowOtherStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement; import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException; import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement; import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement; import io.shardingjdbc.core.parsing.parser.sql.tcl.TCLStatement; import org.junit.Test; import static org.hamcrest.CoreMatchers.instanceOf; Loading @@ -28,27 +36,87 @@ import static org.junit.Assert.assertThat; public final class SQLJudgeEngineTest { @Test public void assertPrepareParseForSelect() { public void assertJudgeForSelect() { assertThat(new SQLJudgeEngine(" /*COMMENT*/ \t \n \r \fsElecT\t\n * from table ").judge(), instanceOf(DQLStatement.class)); } @Test public void assertPrepareParseForInsert() { assertThat(new SQLJudgeEngine(" - - COMMENT \t \n \r \fInsert\t\n into table ").judge(), instanceOf(DMLStatement.class)); public void assertJudgeForInsert() { assertThat(new SQLJudgeEngine(" - - COMMENT \t \n \r \finsert\t\n into table ").judge(), instanceOf(InsertStatement.class)); } @Test public void assertPrepareParseForUpdate() { public void assertJudgeForUpdate() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fuPdAte\t\n table ").judge(), instanceOf(DMLStatement.class)); } @Test public void assertPrepareParseForDelete() { public void assertJudgeForDelete() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdelete\t\n table ").judge(), instanceOf(DMLStatement.class)); } @Test public void assertJudgeForSet() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fset\t\n autocommit ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForCommit() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fcommit ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForRollback() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \frollback ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForSavePoint() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fSavePoint ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForBegin() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fbegin ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForUse() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fuse sharding_db ").judge(), instanceOf(UseStatement.class)); } @Test public void assertJudgeForDescribe() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdescribe t_order ").judge(), instanceOf(DescribeStatement.class)); } @Test public void assertJudgeForDesc() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdesc t_order ").judge(), instanceOf(DescribeStatement.class)); } @Test public void assertJudgeForShowDatabases() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow databases ").judge(), instanceOf(ShowDatabasesStatement.class)); } @Test public void assertJudgeForShowTables() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow tables ").judge(), instanceOf(ShowTablesStatement.class)); } @Test public void assertJudgeForShowColumns() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow columns t_order ").judge(), instanceOf(ShowColumnsStatement.class)); } @Test public void assertJudgeForShowOthers() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow session ").judge(), instanceOf(ShowOtherStatement.class)); } @Test(expected = SQLParsingException.class) public void assertPrepareParseForInvalidSQL() { public void assertJudgeForInvalidSQL() { new SQLJudgeEngine("int i = 0").judge(); } } Loading
sharding-core/src/main/java/io/shardingjdbc/core/parsing/SQLJudgeEngine.java +24 −5 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException; import io.shardingjdbc.core.parsing.parser.sql.SQLStatement; import io.shardingjdbc.core.parsing.parser.sql.ddl.DDLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement; import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement; import io.shardingjdbc.core.parsing.parser.sql.tcl.TCLStatement; import lombok.RequiredArgsConstructor; Loading @@ -61,17 +62,16 @@ public final class SQLJudgeEngine { TokenType tokenType = lexerEngine.getCurrentToken().getType(); if (tokenType instanceof Keyword) { if (isDQL(tokenType)) { return new SelectStatement(); return getDQLStatement(); } // TODO use InsertStatement, UpdateStatement ... if (isDML(tokenType)) { return new DMLStatement(); return getDMLStatement(tokenType); } if (isDDL(tokenType)) { return new DDLStatement(); return getDDLStatement(); } if (isTCL(tokenType)) { return new TCLStatement(); return getTCLStatement(); } if (isDAL(tokenType)) { return getDALStatement(tokenType, lexerEngine); Loading Loading @@ -105,6 +105,25 @@ public final class SQLJudgeEngine { return DefaultKeyword.USE == tokenType || DefaultKeyword.DESC == tokenType || MySQLKeyword.DESCRIBE == tokenType || MySQLKeyword.SHOW == tokenType; } private SQLStatement getDQLStatement() { return new SelectStatement(); } private SQLStatement getDMLStatement(final TokenType tokenType) { if (DefaultKeyword.INSERT == tokenType) { return new InsertStatement(); } return new DMLStatement(); } private SQLStatement getDDLStatement() { return new DDLStatement(); } private SQLStatement getTCLStatement() { return new TCLStatement(); } private SQLStatement getDALStatement(final TokenType tokenType, final LexerEngine lexerEngine) { if (DefaultKeyword.USE == tokenType) { return new UseStatement(); Loading
sharding-core/src/test/java/io/shardingjdbc/core/parsing/SQLJudgeEngineTest.java +74 −6 Original line number Diff line number Diff line Loading @@ -17,9 +17,17 @@ package io.shardingjdbc.core.parsing; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.DescribeStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowColumnsStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowOtherStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement; import io.shardingjdbc.core.parsing.parser.exception.SQLParsingException; import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement; import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement; import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement; import io.shardingjdbc.core.parsing.parser.sql.tcl.TCLStatement; import org.junit.Test; import static org.hamcrest.CoreMatchers.instanceOf; Loading @@ -28,27 +36,87 @@ import static org.junit.Assert.assertThat; public final class SQLJudgeEngineTest { @Test public void assertPrepareParseForSelect() { public void assertJudgeForSelect() { assertThat(new SQLJudgeEngine(" /*COMMENT*/ \t \n \r \fsElecT\t\n * from table ").judge(), instanceOf(DQLStatement.class)); } @Test public void assertPrepareParseForInsert() { assertThat(new SQLJudgeEngine(" - - COMMENT \t \n \r \fInsert\t\n into table ").judge(), instanceOf(DMLStatement.class)); public void assertJudgeForInsert() { assertThat(new SQLJudgeEngine(" - - COMMENT \t \n \r \finsert\t\n into table ").judge(), instanceOf(InsertStatement.class)); } @Test public void assertPrepareParseForUpdate() { public void assertJudgeForUpdate() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fuPdAte\t\n table ").judge(), instanceOf(DMLStatement.class)); } @Test public void assertPrepareParseForDelete() { public void assertJudgeForDelete() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdelete\t\n table ").judge(), instanceOf(DMLStatement.class)); } @Test public void assertJudgeForSet() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fset\t\n autocommit ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForCommit() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fcommit ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForRollback() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \frollback ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForSavePoint() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fSavePoint ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForBegin() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fbegin ").judge(), instanceOf(TCLStatement.class)); } @Test public void assertJudgeForUse() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fuse sharding_db ").judge(), instanceOf(UseStatement.class)); } @Test public void assertJudgeForDescribe() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdescribe t_order ").judge(), instanceOf(DescribeStatement.class)); } @Test public void assertJudgeForDesc() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fdesc t_order ").judge(), instanceOf(DescribeStatement.class)); } @Test public void assertJudgeForShowDatabases() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow databases ").judge(), instanceOf(ShowDatabasesStatement.class)); } @Test public void assertJudgeForShowTables() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow tables ").judge(), instanceOf(ShowTablesStatement.class)); } @Test public void assertJudgeForShowColumns() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow columns t_order ").judge(), instanceOf(ShowColumnsStatement.class)); } @Test public void assertJudgeForShowOthers() { assertThat(new SQLJudgeEngine(" /*+ HINT SELECT * FROM TT*/ \t \n \r \fshow session ").judge(), instanceOf(ShowOtherStatement.class)); } @Test(expected = SQLParsingException.class) public void assertPrepareParseForInvalidSQL() { public void assertJudgeForInvalidSQL() { new SQLJudgeEngine("int i = 0").judge(); } }