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); }