Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/lexer/dialect/mysql/MySQLKeyword.java +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ public enum MySQLKeyword implements Keyword { DESCRIBE, DATABASES, TABLES, COLUMNS, FIELDS, DUAL, LIMIT, OFFSET, Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/sql/MySQLShowParser.java +21 −0 Original line number Diff line number Diff line Loading @@ -2,9 +2,13 @@ package io.shardingjdbc.core.parsing.parser.dialect.mysql.sql; import io.shardingjdbc.core.parsing.lexer.LexerEngine; import io.shardingjdbc.core.parsing.lexer.dialect.mysql.MySQLKeyword; import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword; import io.shardingjdbc.core.parsing.parser.clause.TableReferencesClauseParser; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowType; import io.shardingjdbc.core.parsing.parser.sql.SQLParser; import io.shardingjdbc.core.parsing.parser.token.SchemaToken; import io.shardingjdbc.core.rule.ShardingRule; import lombok.RequiredArgsConstructor; /** Loading @@ -17,15 +21,32 @@ public final class MySQLShowParser implements SQLParser { private final LexerEngine lexerEngine; private final TableReferencesClauseParser tableReferencesClauseParser; public MySQLShowParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) { this.lexerEngine = lexerEngine; tableReferencesClauseParser = new TableReferencesClauseParser(shardingRule, lexerEngine); } @Override public ShowStatement parse() { lexerEngine.nextToken(); lexerEngine.skipIfEqual(DefaultKeyword.FULL); if (lexerEngine.equalAny(MySQLKeyword.DATABASES)) { return new ShowStatement(ShowType.DATABASES); } if (lexerEngine.equalAny(MySQLKeyword.TABLES)) { return new ShowStatement(ShowType.TABLES); } if (lexerEngine.skipIfEqual(MySQLKeyword.COLUMNS, MySQLKeyword.FIELDS)) { ShowStatement result = new ShowStatement(ShowType.COLUMNS); lexerEngine.skipIfEqual(DefaultKeyword.FROM, DefaultKeyword.IN); tableReferencesClauseParser.parseSingleTableWithoutAlias(result); lexerEngine.skipIfEqual(DefaultKeyword.FROM, DefaultKeyword.IN); int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - lexerEngine.getCurrentToken().getLiterals().length(); result.getSqlTokens().add(new SchemaToken(beginPosition, lexerEngine.getCurrentToken().getLiterals(), result.getTables().getSingleTableName())); return result; } return new ShowStatement(ShowType.OTHER); } } sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/statement/ShowType.java +1 −1 Original line number Diff line number Diff line Loading @@ -7,5 +7,5 @@ package io.shardingjdbc.core.parsing.parser.dialect.mysql.statement; */ public enum ShowType { DATABASES, TABLES, OTHER DATABASES, TABLES, COLUMNS, OTHER } sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/sql/SQLParserFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ public final class SQLParserFactory { case DESCRIBE: return Optional.of(new MySQLDescParser(shardingRule, lexerEngine)); case SHOW: return Optional.of(new MySQLShowParser(lexerEngine)); return Optional.of(new MySQLShowParser(shardingRule, lexerEngine)); default: return Optional.absent(); } Loading sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/token/SchemaToken.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright 1999-2015 dangdang.com. * <p> * Licensed 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. * </p> */ package io.shardingjdbc.core.parsing.parser.token; import io.shardingjdbc.core.util.SQLUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.ToString; /** * Schema token. * * @author zhangliang */ @RequiredArgsConstructor @ToString public final class SchemaToken implements SQLToken { @Getter private final int beginPosition; @Getter private final String originalLiterals; private final String tableName; /** * Get schema name. * * @return schema name */ public String getSchemaName() { return SQLUtil.getExactlyValue(originalLiterals); } /** * Get table name. * * @return table name */ public String getTableName() { return SQLUtil.getExactlyValue(tableName); } } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/lexer/dialect/mysql/MySQLKeyword.java +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ public enum MySQLKeyword implements Keyword { DESCRIBE, DATABASES, TABLES, COLUMNS, FIELDS, DUAL, LIMIT, OFFSET, Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/sql/MySQLShowParser.java +21 −0 Original line number Diff line number Diff line Loading @@ -2,9 +2,13 @@ package io.shardingjdbc.core.parsing.parser.dialect.mysql.sql; import io.shardingjdbc.core.parsing.lexer.LexerEngine; import io.shardingjdbc.core.parsing.lexer.dialect.mysql.MySQLKeyword; import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword; import io.shardingjdbc.core.parsing.parser.clause.TableReferencesClauseParser; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowStatement; import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowType; import io.shardingjdbc.core.parsing.parser.sql.SQLParser; import io.shardingjdbc.core.parsing.parser.token.SchemaToken; import io.shardingjdbc.core.rule.ShardingRule; import lombok.RequiredArgsConstructor; /** Loading @@ -17,15 +21,32 @@ public final class MySQLShowParser implements SQLParser { private final LexerEngine lexerEngine; private final TableReferencesClauseParser tableReferencesClauseParser; public MySQLShowParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) { this.lexerEngine = lexerEngine; tableReferencesClauseParser = new TableReferencesClauseParser(shardingRule, lexerEngine); } @Override public ShowStatement parse() { lexerEngine.nextToken(); lexerEngine.skipIfEqual(DefaultKeyword.FULL); if (lexerEngine.equalAny(MySQLKeyword.DATABASES)) { return new ShowStatement(ShowType.DATABASES); } if (lexerEngine.equalAny(MySQLKeyword.TABLES)) { return new ShowStatement(ShowType.TABLES); } if (lexerEngine.skipIfEqual(MySQLKeyword.COLUMNS, MySQLKeyword.FIELDS)) { ShowStatement result = new ShowStatement(ShowType.COLUMNS); lexerEngine.skipIfEqual(DefaultKeyword.FROM, DefaultKeyword.IN); tableReferencesClauseParser.parseSingleTableWithoutAlias(result); lexerEngine.skipIfEqual(DefaultKeyword.FROM, DefaultKeyword.IN); int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - lexerEngine.getCurrentToken().getLiterals().length(); result.getSqlTokens().add(new SchemaToken(beginPosition, lexerEngine.getCurrentToken().getLiterals(), result.getTables().getSingleTableName())); return result; } return new ShowStatement(ShowType.OTHER); } }
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/dialect/mysql/statement/ShowType.java +1 −1 Original line number Diff line number Diff line Loading @@ -7,5 +7,5 @@ package io.shardingjdbc.core.parsing.parser.dialect.mysql.statement; */ public enum ShowType { DATABASES, TABLES, OTHER DATABASES, TABLES, COLUMNS, OTHER }
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/sql/SQLParserFactory.java +1 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,7 @@ public final class SQLParserFactory { case DESCRIBE: return Optional.of(new MySQLDescParser(shardingRule, lexerEngine)); case SHOW: return Optional.of(new MySQLShowParser(lexerEngine)); return Optional.of(new MySQLShowParser(shardingRule, lexerEngine)); default: return Optional.absent(); } Loading
sharding-jdbc-core/src/main/java/io/shardingjdbc/core/parsing/parser/token/SchemaToken.java 0 → 100644 +59 −0 Original line number Diff line number Diff line /* * Copyright 1999-2015 dangdang.com. * <p> * Licensed 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. * </p> */ package io.shardingjdbc.core.parsing.parser.token; import io.shardingjdbc.core.util.SQLUtil; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.ToString; /** * Schema token. * * @author zhangliang */ @RequiredArgsConstructor @ToString public final class SchemaToken implements SQLToken { @Getter private final int beginPosition; @Getter private final String originalLiterals; private final String tableName; /** * Get schema name. * * @return schema name */ public String getSchemaName() { return SQLUtil.getExactlyValue(originalLiterals); } /** * Get table name. * * @return table name */ public String getTableName() { return SQLUtil.getExactlyValue(tableName); } }