use of io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement in project sharding-jdbc by shardingjdbc.
the class ParsingSQLRouter method route.
private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) {
Collection<String> tableNames = sqlStatement.getTables().getTableNames();
RoutingEngine routingEngine;
if (sqlStatement instanceof UseStatement) {
routingEngine = new IgnoreRoutingEngine();
} else if (sqlStatement instanceof DDLStatement) {
routingEngine = new TableBroadcastRoutingEngine(shardingRule, sqlStatement);
} else if (sqlStatement instanceof ShowDatabasesStatement || sqlStatement instanceof ShowTablesStatement) {
routingEngine = new DatabaseBroadcastRoutingEngine(shardingRule);
} else if (sqlStatement instanceof DALStatement) {
routingEngine = new UnicastRoutingEngine(shardingRule, sqlStatement);
} else if (tableNames.isEmpty() && sqlStatement instanceof SelectStatement) {
routingEngine = new UnicastRoutingEngine(shardingRule, sqlStatement);
} else if (tableNames.isEmpty()) {
routingEngine = new DatabaseBroadcastRoutingEngine(shardingRule);
} else if (1 == tableNames.size() || shardingRule.isAllBindingTables(tableNames) || shardingRule.isAllInDefaultDataSource(tableNames)) {
routingEngine = new StandardRoutingEngine(shardingRule, parameters, tableNames.iterator().next(), sqlStatement);
} else {
// TODO config for cartesian set
routingEngine = new ComplexRoutingEngine(shardingRule, parameters, tableNames, sqlStatement);
}
return routingEngine.route();
}
use of io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement in project sharding-jdbc by shardingjdbc.
the class DALMergeEngineTest method assertMergeForShowDatabasesStatement.
@Test
public void assertMergeForShowDatabasesStatement() throws SQLException {
DALStatement dalStatement = new ShowDatabasesStatement();
DALMergeEngine dalMergeEngine = new DALMergeEngine(null, queryResults, dalStatement);
assertThat(dalMergeEngine.merge(), instanceOf(ShowDatabasesMergedResult.class));
}
use of io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement in project sharding-jdbc by shardingjdbc.
the class MySQLShowParser method parse.
@Override
public DALStatement parse() {
lexerEngine.nextToken();
lexerEngine.skipIfEqual(DefaultKeyword.FULL);
if (lexerEngine.equalAny(MySQLKeyword.DATABASES)) {
return new ShowDatabasesStatement();
}
if (lexerEngine.skipIfEqual(MySQLKeyword.TABLES)) {
DALStatement result = new ShowTablesStatement();
if (lexerEngine.equalAny(DefaultKeyword.FROM, DefaultKeyword.IN)) {
int beginPosition = lexerEngine.getCurrentToken().getEndPosition() - lexerEngine.getCurrentToken().getLiterals().length();
lexerEngine.nextToken();
lexerEngine.nextToken();
result.getSqlTokens().add(new RemoveToken(beginPosition, lexerEngine.getCurrentToken().getEndPosition()));
}
return result;
}
if (lexerEngine.skipIfEqual(MySQLKeyword.COLUMNS, MySQLKeyword.FIELDS)) {
DALStatement result = new ShowColumnsStatement();
lexerEngine.skipIfEqual(DefaultKeyword.FROM, DefaultKeyword.IN);
tableReferencesClauseParser.parseSingleTableWithoutAlias(result);
if (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;
}
if (lexerEngine.skipIfEqual(DefaultKeyword.CREATE) && lexerEngine.skipIfEqual(DefaultKeyword.TABLE)) {
DALStatement result = new ShowCreateTableStatement();
tableReferencesClauseParser.parseSingleTableWithoutAlias(result);
return result;
}
return new ShowOtherStatement();
}
Aggregations