This is an automated email from the ASF dual-hosted git repository.
kimmking 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 e766d79 Decouple from the ExpandProjections in selectStatementContext
(#7238)
e766d79 is described below
commit e766d79ca2c1129e03092328f3c53da29ed15f14
Author: Juan Pan(Trista) <[email protected]>
AuthorDate: Thu Sep 3 20:36:57 2020 +0800
Decouple from the ExpandProjections in selectStatementContext (#7238)
---
.../encrypt/merge/dql/EncryptAlgorithmMetaData.java | 11 ++++++++++-
.../resultset/ShardingSphereResultSetMetaData.java | 18 +++++++++++++++---
.../execute/engine/jdbc/ProxySQLExecutorCallback.java | 7 ++++++-
3 files changed, 31 insertions(+), 5 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
index 9f53ffc..8ee1431 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-merge/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.Pro
import
org.apache.shardingsphere.sql.parser.binder.segment.select.projection.impl.ColumnProjection;
import
org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
+import java.util.List;
import java.util.Optional;
/**
@@ -46,7 +47,15 @@ public final class EncryptAlgorithmMetaData {
* @return encryptor
*/
public Optional<EncryptAlgorithm> findEncryptor(final int columnIndex) {
- Projection projection =
selectStatementContext.getProjectionsContext().getExpandProjections().get(columnIndex
- 1);
+ List<Projection> expandProjections =
selectStatementContext.getProjectionsContext().getExpandProjections();
+ if (expandProjections.isEmpty()) {
+ return Optional.empty();
+ }
+ return findEncryptor(columnIndex, expandProjections);
+ }
+
+ private Optional<EncryptAlgorithm> findEncryptor(final int columnIndex,
final List<Projection> expandProjections) {
+ Projection projection = expandProjections.get(columnIndex - 1);
if (projection instanceof ColumnProjection) {
String columnName = ((ColumnProjection) projection).getName();
Optional<String> tableName =
selectStatementContext.getTablesContext().findTableName((ColumnProjection)
projection, schemaMetaData);
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
index 9c60488..8b4df61 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetMetaData.java
@@ -47,8 +47,15 @@ public final class ShardingSphereResultSetMetaData extends
WrapperAdapter implem
private final SQLStatementContext sqlStatementContext;
@Override
- public int getColumnCount() {
- return sqlStatementContext instanceof SelectStatementContext ?
((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections().size() : 0;
+ public int getColumnCount() throws SQLException {
+ if (sqlStatementContext instanceof SelectStatementContext) {
+ List<Projection> expandProjections = ((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections();
+ if (expandProjections.isEmpty()) {
+ return resultSetMetaData.getColumnCount();
+ }
+ return expandProjections.size();
+ }
+ return resultSetMetaData.getColumnCount();
}
@Override
@@ -93,7 +100,7 @@ public final class ShardingSphereResultSetMetaData extends
WrapperAdapter implem
@Override
public String getColumnName(final int column) throws SQLException {
- if (sqlStatementContext instanceof SelectStatementContext) {
+ if (isHasSelectExpandProjections()) {
List<Projection> actualProjections = ((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections();
if (column > actualProjections.size()) {
throw new
SQLException(SQLExceptionConstant.COLUMN_INDEX_OUT_OF_RANGE,
SQLExceptionConstant.OUT_OF_INDEX_SQL_STATE, 0);
@@ -106,6 +113,11 @@ public final class ShardingSphereResultSetMetaData extends
WrapperAdapter implem
return resultSetMetaData.getColumnName(column);
}
+ private boolean isHasSelectExpandProjections() {
+ return sqlStatementContext instanceof SelectStatementContext
+ && !((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
+ }
+
@Override
public String getSchemaName(final int column) {
return DefaultSchema.LOGIC_NAME;
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/ProxySQLExecutorCallback.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/ProxySQLExecutorCallback.java
index ec2073a..e05c658 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/ProxySQLExecutorCallback.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/ProxySQLExecutorCallback.java
@@ -90,7 +90,7 @@ public final class ProxySQLExecutorCallback extends
DefaultSQLExecutorCallback<E
}
private List<QueryHeader> getQueryHeaders(final SQLStatementContext<?>
sqlStatementContext, final ResultSetMetaData resultSetMetaData) throws
SQLException {
- if (sqlStatementContext instanceof SelectStatementContext) {
+ if (isHasSelectExpandProjections()) {
return getQueryHeaders(((SelectStatementContext)
sqlStatementContext).getProjectionsContext(), resultSetMetaData);
}
return getQueryHeaders(resultSetMetaData);
@@ -112,6 +112,11 @@ public final class ProxySQLExecutorCallback extends
DefaultSQLExecutorCallback<E
return result;
}
+ private boolean isHasSelectExpandProjections() {
+ return sqlStatementContext instanceof SelectStatementContext
+ && !((SelectStatementContext)
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
+ }
+
private QueryResult createQueryResult(final ResultSet resultSet, final
ConnectionMode connectionMode) throws SQLException {
return connectionMode == ConnectionMode.MEMORY_STRICTLY ? new
StreamQueryResult(resultSet) : new MemoryQueryResult(resultSet);
}