This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new c6dd048d127 Refactor DatabaseConnector avoid repeat call findRules
method (#24816)
c6dd048d127 is described below
commit c6dd048d127b0379fcb1a5991fb86ed96dd0e242
Author: zhaojinchao <[email protected]>
AuthorDate: Fri Mar 24 21:50:24 2023 +0800
Refactor DatabaseConnector avoid repeat call findRules method (#24816)
* Refactor DatabaseConnector avoid repeat call findRules method
* Update
* Fix index
---
.../proxy/backend/connector/DatabaseConnector.java | 57 ++++++++++++----------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index dac2093d2f3..21255f5999d 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -111,6 +111,8 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
private final ShardingSphereDatabase database;
+ private final boolean transparentStatement;
+
private final QueryContext queryContext;
private final BackendConnection backendConnection;
@@ -126,6 +128,7 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
failedIfBackendNotReady(backendConnection.getConnectionSession(),
sqlStatementContext);
this.driverType = driverType;
this.database = database;
+ this.transparentStatement =
isTransparentStatement(sqlStatementContext);
this.queryContext = queryContext;
this.backendConnection = backendConnection;
if (sqlStatementContext instanceof CursorAvailable) {
@@ -143,6 +146,31 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
}
}
+ private boolean isTransparentStatement(final SQLStatementContext<?>
sqlStatementContext) {
+ Optional<DataNodeContainedRule> dataNodeContainedRule =
getDataNodeContainedRuleForShardingRule(database.getRuleMetaData().findRules(DataNodeContainedRule.class));
+ Collection<ColumnContainedRule> columnContainedRules =
database.getRuleMetaData().findRules(ColumnContainedRule.class);
+ for (String each :
sqlStatementContext.getTablesContext().getTableNames()) {
+ return (!dataNodeContainedRule.isPresent() ||
!dataNodeContainedRule.get().getAllTables().contains(each)) &&
!containsInColumnContainedRule(each, columnContainedRules);
+ }
+ return true;
+ }
+
+ private Optional<DataNodeContainedRule>
getDataNodeContainedRuleForShardingRule(final Collection<DataNodeContainedRule>
dataNodeContainedRules) {
+ for (DataNodeContainedRule each : dataNodeContainedRules) {
+ if (!(each instanceof MutableDataNodeRule)) {
+ return Optional.of(each);
+ }
+ }
+ return Optional.empty();
+ }
+
+ private boolean containsInColumnContainedRule(final String tableName,
final Collection<ColumnContainedRule> columnContainedRules) {
+ for (ColumnContainedRule each : columnContainedRules) {
+ return each.getTables().contains(tableName);
+ }
+ return false;
+ }
+
/**
* Add statement.
*
@@ -337,7 +365,7 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
}
private int getColumnCount(final ExecutionContext executionContext, final
QueryResult queryResultSample) throws SQLException {
- if (isTransparentStatement(executionContext.getSqlStatementContext()))
{
+ if (transparentStatement) {
return queryResultSample.getMetaData().getColumnCount();
}
return
hasSelectExpandProjections(executionContext.getSqlStatementContext())
@@ -345,38 +373,13 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
: queryResultSample.getMetaData().getColumnCount();
}
- private boolean isTransparentStatement(final SQLStatementContext<?>
sqlStatementContext) {
- Optional<DataNodeContainedRule> dataNodeContainedRule =
getDataNodeContainedRuleForShardingRule(database.getRuleMetaData().findRules(DataNodeContainedRule.class));
- Collection<ColumnContainedRule> columnContainedRules =
database.getRuleMetaData().findRules(ColumnContainedRule.class);
- for (String each :
sqlStatementContext.getTablesContext().getTableNames()) {
- return (!dataNodeContainedRule.isPresent() ||
!dataNodeContainedRule.get().getAllTables().contains(each)) &&
!containsInColumnContainedRule(each, columnContainedRules);
- }
- return true;
- }
-
- private Optional<DataNodeContainedRule>
getDataNodeContainedRuleForShardingRule(final Collection<DataNodeContainedRule>
dataNodeContainedRules) {
- for (DataNodeContainedRule each : dataNodeContainedRules) {
- if (!(each instanceof MutableDataNodeRule)) {
- return Optional.of(each);
- }
- }
- return Optional.empty();
- }
-
- private boolean containsInColumnContainedRule(final String tableName,
final Collection<ColumnContainedRule> columnContainedRules) {
- for (ColumnContainedRule each : columnContainedRules) {
- return each.getTables().contains(tableName);
- }
- return false;
- }
-
private boolean hasSelectExpandProjections(final SQLStatementContext<?>
sqlStatementContext) {
return sqlStatementContext instanceof SelectStatementContext &&
!((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
}
private QueryHeader createQueryHeader(final QueryHeaderBuilderEngine
queryHeaderBuilderEngine, final ExecutionContext executionContext,
final QueryResult queryResultSample,
final ShardingSphereDatabase database, final int columnIndex) throws
SQLException {
- if (isTransparentStatement(executionContext.getSqlStatementContext()))
{
+ if (transparentStatement) {
return
queryHeaderBuilderEngine.build(queryResultSample.getMetaData(), database,
columnIndex);
}
return
hasSelectExpandProjections(executionContext.getSqlStatementContext())