未验证 提交 db5d59bc 编写于 作者: J Juan Pan(Trista) 提交者: GitHub

Replace ShardingSphereSchema (#5784)

* Replace ShardingSphereSchema

* delete import

* fix

* conflict

* conflicts

* conflicts
上级 31f793ae
......@@ -28,11 +28,14 @@ import java.util.Map;
@Getter
public final class SchemaContext {
private final String name;
private final ShardingSphereSchema schema;
private final RuntimeContext runtimeContext;
public SchemaContext(final ShardingSphereSchema schema, final RuntimeContext runtimeContext) {
public SchemaContext(final String name, final ShardingSphereSchema schema, final RuntimeContext runtimeContext) {
this.name = name;
this.schema = schema;
this.runtimeContext = runtimeContext;
}
......
......@@ -108,7 +108,7 @@ public final class SchemaContextsBuilder {
Map<String, DataSource> dataSources = this.dataSources.get(schemaName);
RuntimeContext runtimeContext = new RuntimeContext(createCachedDatabaseMetaData(dataSources),
executorKernel, SQLParserEngineFactory.getSQLParserEngine(DatabaseTypes.getTrunkDatabaseTypeName(databaseType)), createShardingTransactionManagerEngine(dataSources));
return new SchemaContext(createShardingSphereSchema(schemaName), runtimeContext);
return new SchemaContext(schemaName, createShardingSphereSchema(schemaName), runtimeContext);
}
private ShardingTransactionManagerEngine createShardingTransactionManagerEngine(final Map<String, DataSource> dataSources) {
......
......@@ -19,12 +19,12 @@ package org.apache.shardingsphere.proxy.backend.communication;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.execute.JDBCExecuteEngine;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.wrapper.PreparedStatementExecutorWrapper;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.wrapper.StatementExecutorWrapper;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import java.util.List;
......@@ -53,7 +53,7 @@ public final class DatabaseCommunicationEngineFactory {
* @param backendConnection backend connection
* @return instance of text protocol backend handler
*/
public DatabaseCommunicationEngine newTextProtocolInstance(final ShardingSphereSchema schema, final String sql, final BackendConnection backendConnection) {
public DatabaseCommunicationEngine newTextProtocolInstance(final SchemaContext schema, final String sql, final BackendConnection backendConnection) {
return new JDBCDatabaseCommunicationEngine(schema, sql, new JDBCExecuteEngine(backendConnection, new StatementExecutorWrapper(schema)));
}
......@@ -66,7 +66,7 @@ public final class DatabaseCommunicationEngineFactory {
* @param backendConnection backend connection
* @return instance of text protocol backend handler
*/
public DatabaseCommunicationEngine newBinaryProtocolInstance(final ShardingSphereSchema schema, final String sql, final List<Object> parameters, final BackendConnection backendConnection) {
public DatabaseCommunicationEngine newBinaryProtocolInstance(final SchemaContext schema, final String sql, final List<Object> parameters, final BackendConnection backendConnection) {
return new JDBCDatabaseCommunicationEngine(schema, sql, new JDBCExecuteEngine(backendConnection, new PreparedStatementExecutorWrapper(schema, parameters)));
}
}
......@@ -25,7 +25,12 @@ import org.apache.shardingsphere.infra.executor.sql.log.SQLLogger;
import org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader;
import org.apache.shardingsphere.infra.merge.MergeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategyFactory;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaDataLoader;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.orchestration.core.facade.ShardingOrchestrationFacade;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.ConnectionStatus;
......@@ -37,8 +42,8 @@ import org.apache.shardingsphere.proxy.backend.response.query.QueryData;
import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchemas;
import org.apache.shardingsphere.sql.parser.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.binder.type.TableAvailable;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
......@@ -56,7 +61,7 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class JDBCDatabaseCommunicationEngine implements DatabaseCommunicationEngine {
private final ShardingSphereSchema schema;
private final SchemaContext schema;
private final String sql;
......@@ -88,7 +93,7 @@ public final class JDBCDatabaseCommunicationEngine implements DatabaseCommunicat
return new ErrorResponse(new TableModifyInTransactionException(getTableName(sqlStatementContext)));
}
response = executeEngine.execute(executionContext);
schema.refreshTableMetaData(executionContext.getSqlStatementContext());
refreshTableMetaData(executionContext.getSqlStatementContext());
return merge(executionContext.getSqlStatementContext());
}
......@@ -107,6 +112,27 @@ public final class JDBCDatabaseCommunicationEngine implements DatabaseCommunicat
return "unknown_table";
}
@SuppressWarnings("unchecked")
private void refreshTableMetaData(final SQLStatementContext sqlStatementContext) throws SQLException {
if (null == sqlStatementContext) {
return;
}
Optional<MetaDataRefreshStrategy> refreshStrategy = MetaDataRefreshStrategyFactory.newInstance(sqlStatementContext);
if (refreshStrategy.isPresent()) {
refreshStrategy.get().refreshMetaData(schema.getSchema().getMetaData(),
ShardingSphereSchemas.getInstance().getDatabaseType(), schema.getSchema().getDataSources(), sqlStatementContext, this::loadTableMetaData);
if (null != ShardingOrchestrationFacade.getInstance()) {
ShardingOrchestrationFacade.getInstance().getMetaDataCenter().persistMetaDataCenterNode(schema.getName(), schema.getSchema().getMetaData().getSchema());
}
}
}
private Optional<TableMetaData> loadTableMetaData(final String tableName) throws SQLException {
RuleSchemaMetaDataLoader loader = new RuleSchemaMetaDataLoader(schema.getSchema().getRules());
return loader.load(ShardingSphereSchemas.getInstance().getDatabaseType(),
schema.getSchema().getDataSources(), tableName, ProxySchemaContexts.getInstance().getSchemaContexts().getProperties());
}
private BackendResponse merge(final SQLStatementContext sqlStatementContext) throws SQLException {
if (response instanceof UpdateResponse) {
mergeUpdateCount(sqlStatementContext);
......@@ -123,13 +149,13 @@ public final class JDBCDatabaseCommunicationEngine implements DatabaseCommunicat
}
private boolean isNeedAccumulate(final SQLStatementContext sqlStatementContext) {
Optional<DataNodeRoutedRule> dataNodeRoutedRule = schema.getRules().stream().filter(each -> each instanceof DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
Optional<DataNodeRoutedRule> dataNodeRoutedRule = schema.getSchema().getRules().stream().filter(each -> each instanceof DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
return dataNodeRoutedRule.isPresent() && dataNodeRoutedRule.get().isNeedAccumulate(sqlStatementContext.getTablesContext().getTableNames());
}
private MergedResult mergeQuery(final SQLStatementContext sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
MergeEngine mergeEngine = new MergeEngine(ShardingSphereSchemas.getInstance().getDatabaseType(),
schema.getMetaData().getSchema().getConfiguredSchemaMetaData(), ProxySchemaContexts.getInstance().getSchemaContexts().getProperties(), schema.getRules());
schema.getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData(), ProxySchemaContexts.getInstance().getSchemaContexts().getProperties(), schema.getSchema().getRules());
return mergeEngine.merge(queryResults, sqlStatementContext);
}
......
......@@ -24,8 +24,9 @@ import lombok.Getter;
import lombok.Setter;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.masterslave.route.engine.impl.MasterVisitedManager;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchemas;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
......@@ -59,9 +60,7 @@ public final class BackendConnection implements JDBCExecutionConnection, AutoClo
private static final int POSTGRESQL_MEMORY_FETCH_ONE_ROW_A_TIME = 1;
private volatile String schemaName;
private ShardingSphereSchema schema;
private volatile SchemaContext schema;
private TransactionType transactionType;
......@@ -102,7 +101,7 @@ public final class BackendConnection implements JDBCExecutionConnection, AutoClo
* @param transactionType transaction type
*/
public void setTransactionType(final TransactionType transactionType) {
if (null == schemaName) {
if (null == schema) {
throw new ShardingSphereException("Please select database, then switch transaction type.");
}
if (isSwitchFailed()) {
......@@ -120,8 +119,7 @@ public final class BackendConnection implements JDBCExecutionConnection, AutoClo
if (isSwitchFailed()) {
throw new ShardingSphereException("Failed to switch schema, please terminate current transaction.");
}
this.schemaName = schemaName;
this.schema = ShardingSphereSchemas.getInstance().getSchema(schemaName);
this.schema = ProxySchemaContexts.getInstance().getSchema(schemaName);
}
@SneakyThrows(InterruptedException.class)
......@@ -189,7 +187,7 @@ public final class BackendConnection implements JDBCExecutionConnection, AutoClo
}
private List<Connection> getConnectionFromUnderlying(final String dataSourceName, final int connectionSize, final ConnectionMode connectionMode) throws SQLException {
return schema.getBackendDataSource().getConnections(dataSourceName, connectionSize, connectionMode, transactionType);
return ProxySchemaContexts.getInstance().getBackendDataSource().getConnections(schema.getName(), dataSourceName, connectionSize, connectionMode);
}
@Override
......
......@@ -40,8 +40,8 @@ public final class BackendTransactionManager implements TransactionManager {
connection = backendConnection;
transactionType = connection.getTransactionType();
localTransactionManager = new LocalTransactionManager(backendConnection);
shardingTransactionManager = null == connection.getSchema() ? null
: connection.getSchema().getBackendDataSource().getShardingTransactionManagerEngine().getTransactionManager(transactionType);
shardingTransactionManager = null == connection.getSchema() ? null
: connection.getSchema().getRuntimeContext().getTransactionManagerEngine().getTransactionManager(transactionType);
}
@Override
......
......@@ -91,7 +91,7 @@ public final class JDBCExecuteEngine implements SQLExecuteEngine {
} else {
int maxConnectionsSizePerQuery = ProxySchemaContexts.getInstance().getSchemaContexts().getProperties().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
Collection<InputGroup<RawSQLExecuteUnit>> inputGroups = new RawExecuteGroupEngine(
maxConnectionsSizePerQuery, backendConnection.getSchema().getRules()).generate(executionContext.getExecutionUnits());
maxConnectionsSizePerQuery, backendConnection.getSchema().getSchema().getRules()).generate(executionContext.getExecutionUnits());
// TODO handle query header
executeResults = rawExecutor.execute(inputGroups, new RawSQLExecutorCallback());
}
......
......@@ -31,9 +31,9 @@ import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.infra.route.DataNodeRouter;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.sql.parser.binder.statement.CommonSQLStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
......@@ -53,30 +53,30 @@ public final class PreparedStatementExecutorWrapper implements JDBCExecutorWrapp
private static final ProxySchemaContexts PROXY_SCHEMA_CONTEXTS = ProxySchemaContexts.getInstance();
private final ShardingSphereSchema schema;
private final SchemaContext schema;
private final List<Object> parameters;
@SuppressWarnings("unchecked")
@Override
public ExecutionContext route(final String sql) {
SQLStatement sqlStatement = schema.getSqlParserEngine().parse(sql, true);
Collection<ShardingSphereRule> rules = schema.getRules();
SQLStatement sqlStatement = schema.getRuntimeContext().getSqlParserEngine().parse(sql, true);
Collection<ShardingSphereRule> rules = schema.getSchema().getRules();
if (rules.isEmpty()) {
return new ExecutionContext(
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(schema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(schema.getSchema().getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
}
RouteContext routeContext = new DataNodeRouter(schema.getMetaData(), PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).route(sqlStatement, sql, parameters);
RouteContext routeContext = new DataNodeRouter(schema.getSchema().getMetaData(), PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).route(sqlStatement, sql, parameters);
routeMetricsCollect(routeContext, rules);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(schema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(schema.getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData(),
PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).rewrite(sql, new ArrayList<>(parameters), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(schema.getMetaData(), sqlRewriteResult));
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(schema.getSchema().getMetaData(), sqlRewriteResult));
}
@Override
public ExecuteGroupEngine getExecuteGroupEngine(final BackendConnection backendConnection, final StatementOption option) {
int maxConnectionsSizePerQuery = PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new PreparedStatementExecuteGroupEngine(maxConnectionsSizePerQuery, backendConnection, option, schema.getRules());
return new PreparedStatementExecuteGroupEngine(maxConnectionsSizePerQuery, backendConnection, option, schema.getSchema().getRules());
}
@Override
......
......@@ -31,9 +31,9 @@ import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
import org.apache.shardingsphere.infra.route.DataNodeRouter;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.sql.parser.binder.statement.CommonSQLStatementContext;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
......@@ -50,28 +50,29 @@ public final class StatementExecutorWrapper implements JDBCExecutorWrapper {
private static final ProxySchemaContexts PROXY_SCHEMA_CONTEXTS = ProxySchemaContexts.getInstance();
private final ShardingSphereSchema schema;
private final SchemaContext schema;
@SuppressWarnings("unchecked")
@Override
public ExecutionContext route(final String sql) {
SQLStatement sqlStatement = schema.getSqlParserEngine().parse(sql, false);
Collection<ShardingSphereRule> rules = schema.getRules();
SQLStatement sqlStatement = schema.getRuntimeContext().getSqlParserEngine().parse(sql, false);
Collection<ShardingSphereRule> rules = schema.getSchema().getRules();
if (rules.isEmpty()) {
return new ExecutionContext(
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(schema.getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
new CommonSQLStatementContext(sqlStatement), new ExecutionUnit(schema.getSchema().getDataSources().keySet().iterator().next(), new SQLUnit(sql, Collections.emptyList())));
}
RouteContext routeContext = new DataNodeRouter(schema.getMetaData(), PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
RouteContext routeContext =
new DataNodeRouter(schema.getSchema().getMetaData(), PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).route(sqlStatement, sql, Collections.emptyList());
routeMetricsCollect(routeContext, rules);
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(schema.getMetaData().getSchema().getConfiguredSchemaMetaData(),
SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(schema.getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData(),
PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties(), rules).rewrite(sql, Collections.emptyList(), routeContext);
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(schema.getMetaData(), sqlRewriteResult));
return new ExecutionContext(routeContext.getSqlStatementContext(), ExecutionContextBuilder.build(schema.getSchema().getMetaData(), sqlRewriteResult));
}
@Override
public ExecuteGroupEngine getExecuteGroupEngine(final BackendConnection backendConnection, final StatementOption option) {
int maxConnectionsSizePerQuery = PROXY_SCHEMA_CONTEXTS.getSchemaContexts().getProperties().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new StatementExecuteGroupEngine(maxConnectionsSizePerQuery, backendConnection, option, schema.getRules());
return new StatementExecuteGroupEngine(maxConnectionsSizePerQuery, backendConnection, option, schema.getSchema().getRules());
}
@Override
......
......@@ -21,7 +21,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader;
import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.sql.parser.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.sql.parser.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.sql.parser.binder.segment.select.projection.ProjectionsContext;
......@@ -46,7 +46,7 @@ public final class QueryHeaderBuilder {
* @return query header
* @throws SQLException SQL exception
*/
public static QueryHeader build(final ResultSetMetaData resultSetMetaData, final ShardingSphereSchema schema, final int columnIndex) throws SQLException {
public static QueryHeader build(final ResultSetMetaData resultSetMetaData, final SchemaContext schema, final int columnIndex) throws SQLException {
return build(resultSetMetaData, schema, resultSetMetaData.getColumnName(columnIndex), columnIndex);
}
......@@ -61,19 +61,19 @@ public final class QueryHeaderBuilder {
* @throws SQLException SQL exception
*/
public static QueryHeader build(final ProjectionsContext projectionsContext,
final ResultSetMetaData resultSetMetaData, final ShardingSphereSchema schema, final int columnIndex) throws SQLException {
final ResultSetMetaData resultSetMetaData, final SchemaContext schema, final int columnIndex) throws SQLException {
return build(resultSetMetaData, schema, getColumnName(projectionsContext, resultSetMetaData, columnIndex), columnIndex);
}
private static QueryHeader build(final ResultSetMetaData resultSetMetaData, final ShardingSphereSchema schema, final String columnName, final int columnIndex) throws SQLException {
private static QueryHeader build(final ResultSetMetaData resultSetMetaData, final SchemaContext schema, final String columnName, final int columnIndex) throws SQLException {
String schemaName = schema.getName();
String actualTableName = resultSetMetaData.getTableName(columnIndex);
Optional<DataNodeRoutedRule> dataNodeRoutedRule = schema.getRules().stream().filter(each -> each instanceof DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
Optional<DataNodeRoutedRule> dataNodeRoutedRule = schema.getSchema().getRules().stream().filter(each -> each instanceof DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
String tableName;
boolean primaryKey;
if (null != actualTableName && dataNodeRoutedRule.isPresent()) {
tableName = dataNodeRoutedRule.get().findLogicTableByActualTable(actualTableName).orElse("");
TableMetaData tableMetaData = schema.getMetaData().getSchema().getConfiguredSchemaMetaData().get(tableName);
TableMetaData tableMetaData = schema.getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData().get(tableName);
primaryKey = null != tableMetaData && tableMetaData.getColumns().get(resultSetMetaData.getColumnName(columnIndex).toLowerCase()).isPrimaryKey();
} else {
tableName = actualTableName;
......
......@@ -78,6 +78,8 @@ public final class ProxySchemaContexts {
private SchemaContexts schemaContexts = new SchemaContexts();
private final JDBCBackendDataSource backendDataSource = new JDBCBackendDataSource();
private boolean isCircuitBreak;
private ProxySchemaContexts() {
......@@ -321,11 +323,12 @@ public final class ProxySchemaContexts {
return result;
}
private final class JDBCBackendDataSource implements BackendDataSource {
public final class JDBCBackendDataSource implements BackendDataSource {
/**
* Get connection.
*
* @param schemaName scheme name
* @param dataSourceName data source name
* @return connection
* @throws SQLException SQL exception
......@@ -337,6 +340,7 @@ public final class ProxySchemaContexts {
/**
* Get connections.
*
* @param schemaName scheme name
* @param dataSourceName data source name
* @param connectionSize size of connections to get
* @param connectionMode connection mode
......@@ -350,6 +354,7 @@ public final class ProxySchemaContexts {
/**
* Get connections.
*
* @param schemaName scheme name
* @param dataSourceName data source name
* @param connectionSize size of connections to be get
* @param connectionMode connection mode
......@@ -397,15 +402,5 @@ public final class ProxySchemaContexts {
private boolean isInShardingTransaction(final ShardingTransactionManager shardingTransactionManager) {
return null != shardingTransactionManager && shardingTransactionManager.isInTransaction();
}
/**
* Renew data source.
*
* @param dataSourceParameters data source parameters
* @throws Exception exception
*/
public void renew(final String schemaName, final Map<String, DataSourceParameter> dataSourceParameters) throws Exception {
ProxySchemaContexts.this.renew(schemaName, dataSourceParameters);
}
}
}
......@@ -25,7 +25,6 @@ import org.apache.shardingsphere.proxy.backend.response.error.ErrorResponse;
import org.apache.shardingsphere.proxy.backend.response.query.QueryData;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchemas;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import java.util.Collection;
......@@ -46,10 +45,10 @@ public final class BroadcastBackendHandler implements TextProtocolBackendHandler
@Override
public BackendResponse execute() {
Collection<BackendResponse> responses = new LinkedList<>();
String originalSchema = backendConnection.getSchemaName();
String originalSchema = backendConnection.getSchema().getName();
for (String each : ProxySchemaContexts.getInstance().getSchemaNames()) {
backendConnection.setCurrentSchema(each);
responses.add(databaseCommunicationEngineFactory.newTextProtocolInstance(ShardingSphereSchemas.getInstance().getSchema(each), sql, backendConnection).execute());
responses.add(databaseCommunicationEngineFactory.newTextProtocolInstance(ProxySchemaContexts.getInstance().getSchema(each), sql, backendConnection).execute());
}
backendConnection.setCurrentSchema(originalSchema);
for (BackendResponse each : responses) {
......
......@@ -23,8 +23,7 @@ import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicati
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.query.QueryData;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchemas;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import java.sql.SQLException;
......@@ -46,12 +45,10 @@ public final class UnicastBackendHandler implements TextProtocolBackendHandler {
@Override
public BackendResponse execute() {
// TODO we should remove set default ShardingSphere schema after parser can recognize all DAL broadcast SQL.
ShardingSphereSchema schema = backendConnection.getSchema();
if (null == schema) {
schema = ShardingSphereSchemas.getInstance().getSchemas().values().iterator().next();
backendConnection.setCurrentSchema(schema.getName());
if (null == backendConnection.getSchema()) {
backendConnection.setCurrentSchema(ProxySchemaContexts.getInstance().getSchemaContexts().getSchemaContexts().keySet().iterator().next());
}
databaseCommunicationEngine = databaseCommunicationEngineFactory.newTextProtocolInstance(schema, sql, backendConnection);
databaseCommunicationEngine = databaseCommunicationEngineFactory.newTextProtocolInstance(backendConnection.getSchema(), sql, backendConnection);
return databaseCommunicationEngine.execute();
}
......
......@@ -55,7 +55,8 @@ public final class HintShowTableStatusExecutor extends AbstractHintQueryExecutor
@Override
protected MergedResult createMergedResult() {
Map<String, HintShowTableStatusResult> results = new HashMap<>();
for (String each : backendConnection.getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData().getAllTableNames()) {
Collection<String> tableNames = backendConnection.getSchema().getSchema().getMetaData().getSchema().getConfiguredSchemaMetaData().getAllTableNames();
for (String each : tableNames) {
if (HintManager.isDatabaseShardingOnly()) {
fillShardingValues(results, each, HintManager.getDatabaseShardingValues(), Collections.emptyList());
} else {
......
......@@ -17,11 +17,12 @@
package org.apache.shardingsphere.proxy.backend;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypes;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.runtime.RuntimeContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.ConnectionStateHandler;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCBackendDataSource;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandlerFactory;
import org.apache.shardingsphere.proxy.backend.text.admin.BroadcastBackendHandler;
......@@ -33,7 +34,6 @@ import org.apache.shardingsphere.proxy.backend.text.sctl.set.ShardingCTLSetBacke
import org.apache.shardingsphere.proxy.backend.text.sctl.show.ShardingCTLShowBackendHandler;
import org.apache.shardingsphere.proxy.backend.text.transaction.SkipBackendHandler;
import org.apache.shardingsphere.proxy.backend.text.transaction.TransactionBackendHandler;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.junit.Before;
......@@ -59,10 +59,10 @@ public final class TextProtocolBackendHandlerFactoryTest {
@Before
public void setUp() {
when(backendConnection.getTransactionType()).thenReturn(TransactionType.LOCAL);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
JDBCBackendDataSource backendDataSource = mock(JDBCBackendDataSource.class);
when(backendDataSource.getShardingTransactionManagerEngine()).thenReturn(mock(ShardingTransactionManagerEngine.class));
when(schema.getBackendDataSource()).thenReturn(backendDataSource);
RuntimeContext runtimeContext = mock(RuntimeContext.class);
SchemaContext schema = mock(SchemaContext.class);
when(runtimeContext.getTransactionManagerEngine()).thenReturn(mock(ShardingTransactionManagerEngine.class));
when(schema.getRuntimeContext()).thenReturn(runtimeContext);
when(backendConnection.getSchema()).thenReturn(schema);
}
......
......@@ -17,10 +17,12 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.junit.Before;
import org.junit.Test;
import java.util.Collections;
......@@ -29,12 +31,23 @@ import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public final class DatabaseCommunicationEngineFactoryTest {
private SchemaContext schemaContext;
@Before
public void setUp() {
schemaContext = mock(SchemaContext.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.getRules()).thenReturn(Collections.emptyList());
when(schemaContext.getSchema()).thenReturn(schema);
}
@Test
public void assertNewTextProtocolInstance() {
DatabaseCommunicationEngine engine = DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(mock(ShardingSphereSchema.class), "schemaName", mock(BackendConnection.class));
DatabaseCommunicationEngine engine = DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(schemaContext, "schemaName", mock(BackendConnection.class));
assertNotNull(engine);
assertThat(engine, instanceOf(JDBCDatabaseCommunicationEngine.class));
}
......@@ -42,7 +55,7 @@ public final class DatabaseCommunicationEngineFactoryTest {
@Test
public void assertNewBinaryProtocolInstance() {
DatabaseCommunicationEngine engine = DatabaseCommunicationEngineFactory.getInstance()
.newBinaryProtocolInstance(mock(ShardingSphereSchema.class), "schemaName", Collections.emptyList(), mock(BackendConnection.class));
.newBinaryProtocolInstance(schemaContext, "schemaName", Collections.emptyList(), mock(BackendConnection.class));
assertNotNull(engine);
assertThat(engine, instanceOf(JDBCDatabaseCommunicationEngine.class));
}
......
......@@ -18,10 +18,16 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc.connection;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
import org.apache.shardingsphere.infra.auth.Authentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import org.apache.shardingsphere.proxy.backend.MockShardingSphereSchemasUtil;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCBackendDataSource;
import org.apache.shardingsphere.infra.executor.sql.ConnectionMode;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.SchemaContexts;
import org.apache.shardingsphere.kernal.context.runtime.RuntimeContext;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts.JDBCBackendDataSource;
import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.junit.Before;
......@@ -37,7 +43,10 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
......@@ -61,17 +70,42 @@ public final class BackendConnectionTest {
private final BackendConnection backendConnection = new BackendConnection(TransactionType.LOCAL);
@Before
@SneakyThrows(ReflectiveOperationException.class)
public void setUp() {
MockShardingSphereSchemasUtil.setSchemas("schema", 2);
setSchemaContexts();
setBackendDataSource();
backendConnection.setCurrentSchema("schema_0");
when(backendConnection.getSchema().getBackendDataSource()).thenReturn(backendDataSource);
when(backendDataSource.getShardingTransactionManagerEngine()).thenReturn(mock(ShardingTransactionManagerEngine.class));
}
private void setSchemaContexts() throws NoSuchFieldException, IllegalAccessException {
Field field = ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
field.setAccessible(true);
field.set(ProxySchemaContexts.getInstance(), new SchemaContexts(getSchemaContextMap(), new ConfigurationProperties(new Properties()), new Authentication()));
}
private Map<String, SchemaContext> getSchemaContextMap() {
Map<String, SchemaContext> result = new HashMap<>(10);
for (int i = 0; i < 10; i++) {
String name = "schema_" + i;
RuntimeContext runtimeContext = mock(RuntimeContext.class);
when(runtimeContext.getTransactionManagerEngine()).thenReturn(mock(ShardingTransactionManagerEngine.class));
SchemaContext schemaContext = new SchemaContext(name, mock(ShardingSphereSchema.class), runtimeContext);
result.put(name, schemaContext);
}
return result;
}
@SneakyThrows(ReflectiveOperationException.class)
private void setBackendDataSource() {
Field field = ProxySchemaContexts.getInstance().getClass().getDeclaredField("backendDataSource");
field.setAccessible(true);
field.set(ProxySchemaContexts.getInstance(), backendDataSource);
}
@Test
public void assertGetConnectionCacheIsEmpty() throws SQLException {
backendConnection.getStateHandler().setStatus(ConnectionStatus.TRANSACTION);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(2));
when(backendDataSource.getConnections(anyString(), anyString(), eq(2), any())).thenReturn(MockConnectionUtil.mockNewConnections(2));
List<Connection> actualConnections = backendConnection.getConnections("ds1", 2, ConnectionMode.MEMORY_STRICTLY);
assertThat(actualConnections.size(), is(2));
assertThat(backendConnection.getConnectionSize(), is(2));
......@@ -92,7 +126,7 @@ public final class BackendConnectionTest {
public void assertGetConnectionSizeGreaterThanCache() throws SQLException {
backendConnection.getStateHandler().setStatus(ConnectionStatus.TRANSACTION);
MockConnectionUtil.setCachedConnections(backendConnection, "ds1", 10);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(2));
when(backendDataSource.getConnections(anyString(), anyString(), eq(2), any())).thenReturn(MockConnectionUtil.mockNewConnections(2));
List<Connection> actualConnections = backendConnection.getConnections("ds1", 12, ConnectionMode.MEMORY_STRICTLY);
assertThat(actualConnections.size(), is(12));
assertThat(backendConnection.getConnectionSize(), is(12));
......@@ -102,7 +136,7 @@ public final class BackendConnectionTest {
@Test
public void assertGetConnectionWithMethodInvocation() throws SQLException {
backendConnection.getStateHandler().setStatus(ConnectionStatus.TRANSACTION);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(2));
when(backendDataSource.getConnections(anyString(), anyString(), eq(2), any())).thenReturn(MockConnectionUtil.mockNewConnections(2));
setMethodInvocation();
List<Connection> actualConnections = backendConnection.getConnections("ds1", 2, ConnectionMode.MEMORY_STRICTLY);
verify(backendConnection.getMethodInvocations().iterator().next(), times(2)).invoke(any());
......@@ -123,7 +157,7 @@ public final class BackendConnectionTest {
@Test
public void assertMultiThreadGetConnection() throws SQLException, InterruptedException {
MockConnectionUtil.setCachedConnections(backendConnection, "ds1", 10);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(2));
when(backendDataSource.getConnections(anyString(), anyString(), eq(2), any())).thenReturn(MockConnectionUtil.mockNewConnections(2));
Thread thread1 = new Thread(this::assertOneThreadResult);
Thread thread2 = new Thread(this::assertOneThreadResult);
thread1.start();
......@@ -146,7 +180,7 @@ public final class BackendConnectionTest {
BackendConnection actual;
try (BackendConnection backendConnection = new BackendConnection(TransactionType.LOCAL)) {
backendConnection.setCurrentSchema("schema_0");
when(backendDataSource.getConnections(anyString(), eq(12), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(12));
when(backendDataSource.getConnections(anyString(), anyString(), eq(12), any())).thenReturn(MockConnectionUtil.mockNewConnections(12));
backendConnection.getConnections("ds1", 12, ConnectionMode.MEMORY_STRICTLY);
assertThat(backendConnection.getStateHandler().getStatus(), is(ConnectionStatus.INIT));
backendConnection.getStateHandler().setRunningStatusIfNecessary();
......@@ -166,7 +200,7 @@ public final class BackendConnectionTest {
try (BackendConnection backendConnection = new BackendConnection(TransactionType.LOCAL)) {
backendConnection.setCurrentSchema("schema_0");
MockConnectionUtil.setCachedConnections(backendConnection, "ds1", 10);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.LOCAL))).thenReturn(MockConnectionUtil.mockNewConnections(2));
when(backendDataSource.getConnections(anyString(), anyString(), eq(2), any())).thenReturn(MockConnectionUtil.mockNewConnections(2));
backendConnection.getStateHandler().setStatus(ConnectionStatus.TRANSACTION);
backendConnection.getConnections("ds1", 12, ConnectionMode.MEMORY_STRICTLY);
mockResultSetAndStatement(backendConnection);
......@@ -186,7 +220,6 @@ public final class BackendConnectionTest {
backendConnection.setTransactionType(TransactionType.XA);
backendConnection.getStateHandler().setStatus(ConnectionStatus.TRANSACTION);
MockConnectionUtil.setCachedConnections(backendConnection, "ds1", 10);
when(backendDataSource.getConnections(anyString(), eq(2), any(), eq(TransactionType.XA))).thenReturn(MockConnectionUtil.mockNewConnections(2));
backendConnection.getConnections("ds1", 12, ConnectionMode.MEMORY_STRICTLY);
backendConnection.getStateHandler().setStatus(ConnectionStatus.TERMINATED);
mockResultSetAndStatement(backendConnection);
......
......@@ -18,8 +18,8 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc.connection;
import lombok.SneakyThrows;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCBackendDataSource;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.runtime.RuntimeContext;
import org.apache.shardingsphere.transaction.ShardingTransactionManagerEngine;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.apache.shardingsphere.transaction.spi.ShardingTransactionManager;
......@@ -41,7 +41,7 @@ import static org.mockito.Mockito.when;
public final class BackendTransactionManagerTest {
@Mock
private ShardingSphereSchema schema;
private SchemaContext schema;
@Mock
private BackendConnection backendConnection;
......@@ -59,11 +59,11 @@ public final class BackendTransactionManagerTest {
@Before
public void setUp() {
RuntimeContext runtimeContext = mock(RuntimeContext.class);
ShardingTransactionManagerEngine shardingTransactionManagerEngine = mock(ShardingTransactionManagerEngine.class);
when(runtimeContext.getTransactionManagerEngine()).thenReturn(shardingTransactionManagerEngine);
when(shardingTransactionManagerEngine.getTransactionManager(TransactionType.XA)).thenReturn(shardingTransactionManager);
JDBCBackendDataSource backendDataSource = mock(JDBCBackendDataSource.class);
when(backendDataSource.getShardingTransactionManagerEngine()).thenReturn(shardingTransactionManagerEngine);
when(schema.getBackendDataSource()).thenReturn(backendDataSource);
when(schema.getRuntimeContext()).thenReturn(runtimeContext);
when(backendConnection.getSchema()).thenReturn(schema);
when(backendConnection.getStateHandler()).thenReturn(stateHandler);
}
......
......@@ -22,7 +22,8 @@ import org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.Que
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.binder.metadata.column.ColumnMetaData;
import org.apache.shardingsphere.sql.parser.binder.metadata.index.IndexMetaData;
......@@ -50,84 +51,84 @@ public final class QueryHeaderBuilderTest {
@Test
public void assertQueryHeaderSchema() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getSchema(), is("sharding_schema"));
}
@Test
public void assertQueryHeaderTable() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getTable(), is("t_logic_order"));
}
@Test
public void assertQueryHeaderColumnLabel() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getColumnLabel(), is("order_id"));
}
@Test
public void assertQueryHeaderColumnNameWithoutProjectionsContext() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getColumnName(), is("order_id"));
}
@Test
public void assertQueryHeaderColumnNameFromProjectionsContext() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createProjectionsContext(), createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createProjectionsContext(), createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getColumnName(), is("order_id"));
}
@Test
public void assertQueryHeaderColumnNameFromMetaData() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createProjectionsContext(), createResultSetMetaData(), getShardingSphereSchema(), 2);
QueryHeader header = QueryHeaderBuilder.build(createProjectionsContext(), createResultSetMetaData(), getSchemaContext(), 2);
assertThat(header.getColumnName(), is("expr"));
}
@Test
public void assertQueryHeaderColumnLength() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getColumnLength(), is(1));
}
@Test
public void assertQueryHeaderColumnType() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getColumnType(), is(Types.INTEGER));
}
@Test
public void assertQueryHeaderDecimals() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertThat(header.getDecimals(), is(1));
}
@Test
public void assertQueryHeaderSigned() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertTrue(header.isSigned());
}
@Test
public void assertQueryHeaderPrimaryKey() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertTrue(header.isPrimaryKey());
}
@Test
public void assertQueryHeaderNotNull() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertTrue(header.isNotNull());
}
@Test
public void assertQueryHeaderAutoIncrement() throws Exception {
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getShardingSphereSchema(), 1);
QueryHeader header = QueryHeaderBuilder.build(createResultSetMetaData(), getSchemaContext(), 1);
assertTrue(header.isAutoIncrement());
}
private ShardingSphereSchema getShardingSphereSchema() {
ShardingSphereSchema result = mock(ShardingSphereSchema.class);
private SchemaContext getSchemaContext() {
SchemaContext result = mock(SchemaContext.class);
ColumnMetaData columnMetaData = new ColumnMetaData("order_id", Types.INTEGER, "int", true, false, false);
SchemaMetaData schemaMetaData = mock(SchemaMetaData.class);
when(schemaMetaData.get("t_logic_order")).thenReturn(new TableMetaData(Collections.singletonList(columnMetaData), Collections.singletonList(new IndexMetaData("order_id"))));
......@@ -138,10 +139,12 @@ public final class QueryHeaderBuilderTest {
DataSourceMetas dataSourceMetas = mock(DataSourceMetas.class);
when(dataSourceMetas.getDataSourceMetaData("ds_0")).thenReturn(mock(DataSourceMetaData.class));
when(metaData.getDataSources()).thenReturn(dataSourceMetas);
when(result.getMetaData()).thenReturn(metaData);
ShardingSphereSchema shardingSphereSchema = mock(ShardingSphereSchema.class);
when(result.getSchema()).thenReturn(shardingSphereSchema);
when(shardingSphereSchema.getMetaData()).thenReturn(metaData);
ShardingRule shardingRule = mock(ShardingRule.class);
when(shardingRule.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_logic_order"));
when(result.getRules()).thenReturn(Collections.singletonList(shardingRule));
when(shardingSphereSchema.getRules()).thenReturn(Collections.singletonList(shardingRule));
when(result.getName()).thenReturn("sharding_schema");
return result;
}
......
......@@ -30,6 +30,7 @@ import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.error.ErrorResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
......@@ -63,12 +64,17 @@ public final class BroadcastBackendHandlerTest {
@Mock
private DatabaseCommunicationEngine databaseCommunicationEngine;
@Test
@Before
@SneakyThrows(ReflectiveOperationException.class)
public void assertExecuteSuccess() {
public void setUp() {
Field schemaContexts = ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
schemaContexts.setAccessible(true);
schemaContexts.set(ProxySchemaContexts.getInstance(), new SchemaContexts(getSchemaContextMap(), new ConfigurationProperties(new Properties()), new Authentication()));
when(backendConnection.getSchema()).thenReturn(ProxySchemaContexts.getInstance().getSchema("schema_0"));
}
@Test
public void assertExecuteSuccess() {
mockDatabaseCommunicationEngine(new UpdateResponse());
BroadcastBackendHandler broadcastBackendHandler = new BroadcastBackendHandler("SET timeout = 1000", backendConnection);
setBackendHandlerFactory(broadcastBackendHandler);
......
......@@ -18,12 +18,16 @@
package org.apache.shardingsphere.proxy.backend.text.admin;
import lombok.SneakyThrows;
import org.apache.shardingsphere.proxy.backend.MockShardingSphereSchemasUtil;
import org.apache.shardingsphere.infra.auth.Authentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.SchemaContexts;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.junit.Before;
import org.junit.Test;
......@@ -33,6 +37,9 @@ import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
......@@ -52,18 +59,29 @@ public final class UnicastBackendHandlerTest {
private DatabaseCommunicationEngineFactory databaseCommunicationEngineFactory;
@Before
@SneakyThrows(ReflectiveOperationException.class)
public void setUp() {
MockShardingSphereSchemasUtil.setSchemas("schema", 10);
Field schemaContexts = ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
schemaContexts.setAccessible(true);
schemaContexts.set(ProxySchemaContexts.getInstance(), new SchemaContexts(getSchemaContextMap(), new ConfigurationProperties(new Properties()), new Authentication()));
setUnderlyingHandler(new UpdateResponse());
}
private Map<String, SchemaContext> getSchemaContextMap() {
Map<String, SchemaContext> result = new HashMap<>(10);
for (int i = 0; i < 10; i++) {
result.put("schema_" + i, mock(SchemaContext.class));
}
return result;
}
@Test
public void assertExecuteWhileSchemaIsNull() {
UnicastBackendHandler backendHandler = new UnicastBackendHandler("show variable like %s", backendConnection);
setDatabaseCommunicationEngine(backendHandler);
BackendResponse actual = backendHandler.execute();
assertThat(actual, instanceOf(UpdateResponse.class));
verify(backendConnection).setCurrentSchema(null);
verify(backendConnection).setCurrentSchema("schema_8");
backendHandler.execute();
}
......
......@@ -19,21 +19,22 @@ package org.apache.shardingsphere.proxy.backend.text.sctl.hint;
import com.google.common.collect.ImmutableMap;
import org.apache.shardingsphere.infra.hint.HintManager;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.error.ErrorResponse;
import org.apache.shardingsphere.proxy.backend.response.query.QueryData;
import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.text.sctl.exception.InvalidShardingCTLFormatException;
import org.apache.shardingsphere.proxy.backend.text.sctl.exception.UnsupportedShardingCTLTypeException;
import org.apache.shardingsphere.proxy.backend.text.sctl.hint.internal.HintManagerHolder;
import org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
import org.apache.shardingsphere.sql.parser.binder.metadata.table.TableMetaData;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.datasource.DataSourceMetas;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -160,8 +161,10 @@ public final class ShardingCTLHintBackendHandlerTest {
@Test
public void assertShowTableStatus() throws SQLException {
clearThreadLocal();
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.getMetaData()).thenReturn(
SchemaContext schema = mock(SchemaContext.class);
ShardingSphereSchema shardingSphereSchema = mock(ShardingSphereSchema.class);
when(schema.getSchema()).thenReturn(shardingSphereSchema);
when(shardingSphereSchema.getMetaData()).thenReturn(
new ShardingSphereMetaData(mock(DataSourceMetas.class), new RuleSchemaMetaData(new SchemaMetaData(ImmutableMap.of("user", mock(TableMetaData.class))), Collections.emptyMap())));
when(backendConnection.getSchema()).thenReturn(schema);
String sql = "sctl:hint show table status";
......
......@@ -17,24 +17,53 @@
package org.apache.shardingsphere.proxy.backend.text.sctl.set;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.auth.Authentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.SchemaContexts;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.BackendResponse;
import org.apache.shardingsphere.proxy.backend.response.error.ErrorResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ProxySchemaContexts;
import org.apache.shardingsphere.transaction.core.TransactionType;
import org.junit.Before;
import org.junit.Test;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
public final class ShardingCTLSetBackendHandlerTest {
private final BackendConnection backendConnection = new BackendConnection(TransactionType.LOCAL);
@Before
@SneakyThrows(ReflectiveOperationException.class)
public void setUp() {
Field schemaContexts = ProxySchemaContexts.getInstance().getClass().getDeclaredField("schemaContexts");
schemaContexts.setAccessible(true);
schemaContexts.set(ProxySchemaContexts.getInstance(), new SchemaContexts(getSchemaContextMap(), new ConfigurationProperties(new Properties()), new Authentication()));
}
private Map<String, SchemaContext> getSchemaContextMap() {
Map<String, SchemaContext> result = new HashMap<>(10);
for (int i = 0; i < 10; i++) {
result.put("schema_" + i, mock(SchemaContext.class));
}
return result;
}
@Test
public void assertSwitchTransactionTypeXA() {
backendConnection.setCurrentSchema("schema");
backendConnection.setCurrentSchema("schema_0");
ShardingCTLSetBackendHandler shardingCTLBackendHandler = new ShardingCTLSetBackendHandler("sctl:set transaction_type=XA", backendConnection);
BackendResponse actual = shardingCTLBackendHandler.execute();
assertThat(actual, instanceOf(UpdateResponse.class));
......@@ -43,7 +72,7 @@ public final class ShardingCTLSetBackendHandlerTest {
@Test
public void assertSwitchTransactionTypeBASE() {
backendConnection.setCurrentSchema("schema");
backendConnection.setCurrentSchema("schema_0");
ShardingCTLSetBackendHandler shardingCTLBackendHandler = new ShardingCTLSetBackendHandler("sctl:set transaction_type=BASE", backendConnection);
BackendResponse actual = shardingCTLBackendHandler.execute();
assertThat(actual, instanceOf(UpdateResponse.class));
......@@ -52,7 +81,7 @@ public final class ShardingCTLSetBackendHandlerTest {
@Test
public void assertSwitchTransactionTypeLOCAL() {
backendConnection.setCurrentSchema("schema");
backendConnection.setCurrentSchema("schema_0");
ShardingCTLSetBackendHandler shardingCTLBackendHandler = new ShardingCTLSetBackendHandler("sctl:set transaction_type=LOCAL", backendConnection);
BackendResponse actual = shardingCTLBackendHandler.execute();
assertThat(actual, instanceOf(UpdateResponse.class));
......@@ -61,7 +90,7 @@ public final class ShardingCTLSetBackendHandlerTest {
@Test
public void assertSwitchTransactionTypeFailed() {
backendConnection.setCurrentSchema("schema");
backendConnection.setCurrentSchema("schema_0");
ShardingCTLSetBackendHandler shardingCTLBackendHandler = new ShardingCTLSetBackendHandler("sctl:set transaction_type=XXX", backendConnection);
BackendResponse actual = shardingCTLBackendHandler.execute();
assertThat(actual, instanceOf(ErrorResponse.class));
......
......@@ -26,8 +26,8 @@ import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.p
import org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLEofPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLErrPacket;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.frontend.api.CommandExecutor;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.statement.dml.SelectStatement;
......@@ -44,7 +44,7 @@ public final class MySQLComStmtPrepareExecutor implements CommandExecutor {
private final MySQLComStmtPreparePacket packet;
private final ShardingSphereSchema schema;
private final SchemaContext schema;
public MySQLComStmtPrepareExecutor(final MySQLComStmtPreparePacket packet, final BackendConnection backendConnection) {
this.packet = packet;
......@@ -59,7 +59,7 @@ public final class MySQLComStmtPrepareExecutor implements CommandExecutor {
public Collection<DatabasePacket> execute() {
Collection<DatabasePacket> result = new LinkedList<>();
int currentSequenceId = 0;
SQLStatement sqlStatement = schema.getSqlParserEngine().parse(packet.getSql(), true);
SQLStatement sqlStatement = schema.getRuntimeContext().getSqlParserEngine().parse(packet.getSql(), true);
if (!MySQLComStmtPrepareChecker.isStatementAllowed(sqlStatement)) {
result.add(new MySQLErrPacket(++currentSequenceId, MySQLServerErrorCode.ER_UNSUPPORTED_PS));
return result;
......
......@@ -50,7 +50,7 @@ public final class MySQLComFieldListPacketExecutor implements CommandExecutor {
public MySQLComFieldListPacketExecutor(final MySQLComFieldListPacket packet, final BackendConnection backendConnection) {
this.packet = packet;
schemaName = backendConnection.getSchemaName();
schemaName = backendConnection.getSchema().getName();
databaseCommunicationEngine = DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(backendConnection.getSchema(), getShowColumnsSQL(), backendConnection);
}
......
......@@ -26,8 +26,9 @@ import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.r
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.fieldlist.MySQLComFieldListPacket;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.query.MySQLComQueryPacket;
import org.apache.shardingsphere.db.protocol.packet.CommandPacket;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.frontend.mysql.command.admin.initdb.MySQLComInitDbExecutor;
import org.apache.shardingsphere.proxy.frontend.mysql.command.admin.ping.MySQLComPingExecutor;
import org.apache.shardingsphere.proxy.frontend.mysql.command.admin.quit.MySQLComQuitExecutor;
......@@ -39,6 +40,8 @@ import org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.fieldli
import org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query.MySQLComQueryPacketExecutor;
import org.junit.Test;
import java.util.Collections;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
......@@ -49,7 +52,11 @@ public final class MySQLCommandExecutorFactoryTest {
@Test
public void assertNewInstance() {
BackendConnection backendConnection = mock(BackendConnection.class);
when(backendConnection.getSchema()).thenReturn(mock(ShardingSphereSchema.class));
SchemaContext schemaContext = mock(SchemaContext.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(schema.getRules()).thenReturn(Collections.emptyList());
when(schemaContext.getSchema()).thenReturn(schema);
when(backendConnection.getSchema()).thenReturn(schemaContext);
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUIT,
mock(CommandPacket.class), backendConnection), instanceOf(MySQLComQuitExecutor.class));
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_INIT_DB,
......
......@@ -20,12 +20,12 @@ package org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.exec
import lombok.SneakyThrows;
import org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLComStmtExecutePacket;
import org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.response.error.ErrorResponse;
import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -53,7 +53,7 @@ public class MySQLComStmtExecuteExecutorTest {
@SneakyThrows
public void assertIsErrorResponse() {
BackendConnection backendConnection = mock(BackendConnection.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
SchemaContext schema = mock(SchemaContext.class);
when(backendConnection.getSchema()).thenReturn(schema);
MySQLComStmtExecuteExecutor mysqlComStmtExecuteExecutor = new MySQLComStmtExecuteExecutor(mock(MySQLComStmtExecutePacket.class), backendConnection);
FieldSetter.setField(mysqlComStmtExecuteExecutor, MySQLComStmtExecuteExecutor.class.getDeclaredField("databaseCommunicationEngine"), databaseCommunicationEngine);
......@@ -67,7 +67,7 @@ public class MySQLComStmtExecuteExecutorTest {
@SneakyThrows
public void assertIsUpdateResponse() {
BackendConnection backendConnection = mock(BackendConnection.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
SchemaContext schema = mock(SchemaContext.class);
when(backendConnection.getSchema()).thenReturn(schema);
MySQLComStmtExecuteExecutor mysqlComStmtExecuteExecutor = new MySQLComStmtExecuteExecutor(mock(MySQLComStmtExecutePacket.class), backendConnection);
FieldSetter.setField(mysqlComStmtExecuteExecutor, MySQLComStmtExecuteExecutor.class.getDeclaredField("databaseCommunicationEngine"), databaseCommunicationEngine);
......@@ -80,7 +80,7 @@ public class MySQLComStmtExecuteExecutorTest {
@SneakyThrows
public void assertIsQuery() {
BackendConnection backendConnection = mock(BackendConnection.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
SchemaContext schema = mock(SchemaContext.class);
when(backendConnection.getSchema()).thenReturn(schema);
MySQLComStmtExecuteExecutor mysqlComStmtExecuteExecutor = new MySQLComStmtExecuteExecutor(mock(MySQLComStmtExecutePacket.class), backendConnection);
FieldSetter.setField(mysqlComStmtExecuteExecutor, MySQLComStmtExecuteExecutor.class.getDeclaredField("databaseCommunicationEngine"), databaseCommunicationEngine);
......
......@@ -22,8 +22,8 @@ import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.bin
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.ConnectionScopeBinaryStatementRegistry;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.parse.PostgreSQLComParsePacket;
import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.parse.PostgreSQLParseCompletePacket;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
import org.apache.shardingsphere.proxy.backend.schema.ShardingSphereSchema;
import org.apache.shardingsphere.proxy.frontend.api.CommandExecutor;
import org.apache.shardingsphere.sql.parser.sql.statement.SQLStatement;
......@@ -37,7 +37,7 @@ public final class PostgreSQLComParseExecutor implements CommandExecutor {
private final PostgreSQLComParsePacket packet;
private final ShardingSphereSchema schema;
private final SchemaContext schema;
private final ConnectionScopeBinaryStatementRegistry binaryStatementRegistry;
......@@ -50,7 +50,7 @@ public final class PostgreSQLComParseExecutor implements CommandExecutor {
@Override
public Collection<DatabasePacket> execute() {
if (!packet.getSql().isEmpty()) {
SQLStatement sqlStatement = schema.getSqlParserEngine().parse(packet.getSql(), true);
SQLStatement sqlStatement = schema.getRuntimeContext().getSqlParserEngine().parse(packet.getSql(), true);
binaryStatementRegistry.register(packet.getStatementId(), packet.getSql(), sqlStatement.getParameterCount(), packet.getBinaryStatementParameterTypes());
}
return Collections.singletonList(new PostgreSQLParseCompletePacket());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册