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) <panj...@apache.org>
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);
     }

Reply via email to