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 df3367b  Fix aggregate distinct column error (#15616)
df3367b is described below

commit df3367b713ea5e57d5c60477320bee27232c22c7
Author: tuichenchuxin <[email protected]>
AuthorDate: Fri Feb 25 14:14:13 2022 +0800

    Fix aggregate distinct column error (#15616)
    
    * Fix aggregate distinct column error
    
    * Fix Ci fail
---
 .../core/resultset/ShardingSphereResultSet.java    | 32 ++++++++++++++++++++++
 .../resultset/ShardingSphereResultSetMetaData.java | 26 ++++++++++++++----
 .../response/header/query/QueryHeaderBuilder.java  | 13 +++++++--
 .../header/query/impl/MySQLQueryHeaderBuilder.java |  5 ++--
 .../query/impl/OpenGaussQueryHeaderBuilder.java    |  6 ++--
 .../query/impl/PostgreSQLQueryHeaderBuilder.java   |  3 +-
 .../impl/OpenGaussQueryHeaderBuilderTest.java      |  4 +--
 .../impl/PostgreSQLQueryHeaderBuilderTest.java     |  2 +-
 .../cases/dql/dql-integration-test-cases.xml       |  7 ++---
 9 files changed, 75 insertions(+), 23 deletions(-)

diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
index 626cbd4..b1e325f 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
@@ -19,6 +19,11 @@ package org.apache.shardingsphere.driver.jdbc.core.resultset;
 
 import org.apache.commons.collections4.map.CaseInsensitiveMap;
 import org.apache.shardingsphere.driver.jdbc.adapter.AbstractResultSetAdapter;
+import org.apache.shardingsphere.driver.jdbc.exception.SQLExceptionErrorCode;
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.DerivedColumn;
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 
@@ -68,6 +73,9 @@ public final class ShardingSphereResultSet extends 
AbstractResultSetAdapter {
     }
     
     private Map<String, Integer> createColumnLabelAndIndexMap(final 
ResultSetMetaData resultSetMetaData) throws SQLException {
+        if (hasSelectExpandProjections()) {
+            return createColumnLabelAndIndexMapWithExpandProjections();
+        }
         Map<String, Integer> result = new 
CaseInsensitiveMap<>(resultSetMetaData.getColumnCount(), 1);
         for (int columnIndex = resultSetMetaData.getColumnCount(); columnIndex 
> 0; columnIndex--) {
             result.put(resultSetMetaData.getColumnLabel(columnIndex), 
columnIndex);
@@ -75,6 +83,30 @@ public final class ShardingSphereResultSet extends 
AbstractResultSetAdapter {
         return result;
     }
     
+    private Map<String, Integer> 
createColumnLabelAndIndexMapWithExpandProjections() throws SQLException {
+        SelectStatementContext statementContext = (SelectStatementContext) 
getExecutionContext().getSqlStatementContext();
+        Map<String, Integer> result = new 
CaseInsensitiveMap<>(statementContext.getProjectionsContext().getExpandProjections().size(),
 1);
+        for (int columnIndex = 
statementContext.getProjectionsContext().getExpandProjections().size(); 
columnIndex > 0; columnIndex--) {
+            checkColumnIndex(columnIndex);
+            Projection projection = 
statementContext.getProjectionsContext().getExpandProjections().get(columnIndex 
- 1);
+            
result.put(DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) ? 
projection.getExpression() : projection.getColumnLabel(), columnIndex);
+        }
+        return result;
+    }
+    
+    private boolean hasSelectExpandProjections() {
+        SQLStatementContext<?> sqlStatementContext = 
getExecutionContext().getSqlStatementContext();
+        return sqlStatementContext instanceof SelectStatementContext && 
!((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
+    }
+    
+    private void checkColumnIndex(final int column) throws SQLException {
+        List<Projection> actualProjections = ((SelectStatementContext) 
getExecutionContext().getSqlStatementContext()).getProjectionsContext().getExpandProjections();
+        if (column > actualProjections.size()) {
+            SQLExceptionErrorCode errorCode = 
SQLExceptionErrorCode.COLUMN_INDEX_OUT_OF_RANGE;
+            throw new SQLException(errorCode.getErrorMessage(), 
errorCode.getSqlState(), errorCode.getErrorCode());
+        }
+    }
+    
     @Override
     public boolean next() throws SQLException {
         return mergeResultSet.next();
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 df1673d..be295dd 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
@@ -20,7 +20,9 @@ package org.apache.shardingsphere.driver.jdbc.core.resultset;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.driver.jdbc.adapter.WrapperAdapter;
 import org.apache.shardingsphere.driver.jdbc.exception.SQLExceptionErrorCode;
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.DerivedColumn;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.AggregationDistinctProjection;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
@@ -94,21 +96,27 @@ public final class ShardingSphereResultSetMetaData extends 
WrapperAdapter implem
     
     @Override
     public String getColumnLabel(final int column) throws SQLException {
+        if (hasSelectExpandProjections()) {
+            checkColumnIndex(column);
+            Projection projection = ((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections().get(column 
- 1);
+            if (projection instanceof AggregationDistinctProjection) {
+                return 
DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) ? 
projection.getExpression() : projection.getColumnLabel();
+            }
+        }
         return resultSetMetaData.getColumnLabel(column);
     }
     
     @Override
     public String getColumnName(final int column) throws SQLException {
         if (hasSelectExpandProjections()) {
-            List<Projection> actualProjections = ((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections();
-            if (column > actualProjections.size()) {
-                SQLExceptionErrorCode errorCode = 
SQLExceptionErrorCode.COLUMN_INDEX_OUT_OF_RANGE;
-                throw new SQLException(errorCode.getErrorMessage(), 
errorCode.getSqlState(), errorCode.getErrorCode());
-            }
+            checkColumnIndex(column);
             Projection projection = ((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections().get(column 
- 1);
             if (projection instanceof ColumnProjection) {
                 return ((ColumnProjection) projection).getName();
             }
+            if (projection instanceof AggregationDistinctProjection) {
+                return 
DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) ? 
projection.getExpression() : projection.getColumnLabel();
+            }
         }
         return resultSetMetaData.getColumnName(column);
     }
@@ -117,6 +125,14 @@ public final class ShardingSphereResultSetMetaData extends 
WrapperAdapter implem
         return sqlStatementContext instanceof SelectStatementContext && 
!((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
     }
     
+    private void checkColumnIndex(final int column) throws SQLException {
+        List<Projection> actualProjections = ((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections();
+        if (column > actualProjections.size()) {
+            SQLExceptionErrorCode errorCode = 
SQLExceptionErrorCode.COLUMN_INDEX_OUT_OF_RANGE;
+            throw new SQLException(errorCode.getErrorMessage(), 
errorCode.getSqlState(), errorCode.getErrorCode());
+        }
+    }
+    
     @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/response/header/query/QueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
index a8bb630..3ac7385 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilder.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.response.header.query;
 
 import org.apache.commons.lang3.concurrent.LazyInitializer;
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.DerivedColumn;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
 import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
@@ -46,7 +47,7 @@ public abstract class QueryHeaderBuilder implements 
DatabaseTypeAwareSPI {
      */
     public final QueryHeader build(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData,
                                    final int columnIndex, final 
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws 
SQLException {
-        return doBuild(queryResultMetaData, metaData, 
queryResultMetaData.getColumnName(columnIndex), columnIndex, 
dataNodeContainedRule);
+        return doBuild(queryResultMetaData, metaData, 
queryResultMetaData.getColumnName(columnIndex), 
queryResultMetaData.getColumnLabel(columnIndex), columnIndex, 
dataNodeContainedRule);
     }
     
     /**
@@ -62,7 +63,13 @@ public abstract class QueryHeaderBuilder implements 
DatabaseTypeAwareSPI {
      */
     public final QueryHeader build(final ProjectionsContext 
projectionsContext, final QueryResultMetaData queryResultMetaData,
                                     final ShardingSphereMetaData metaData, 
final int columnIndex, final LazyInitializer<DataNodeContainedRule> 
dataNodeContainedRule) throws SQLException {
-        return doBuild(queryResultMetaData, metaData, 
getColumnName(projectionsContext, queryResultMetaData, columnIndex), 
columnIndex, dataNodeContainedRule);
+        return doBuild(queryResultMetaData, metaData, 
getColumnName(projectionsContext, queryResultMetaData, columnIndex), 
+                getColumnLabel(projectionsContext, queryResultMetaData, 
columnIndex), columnIndex, dataNodeContainedRule);
+    }
+    
+    private String getColumnLabel(final ProjectionsContext projectionsContext, 
final QueryResultMetaData queryResultMetaData, final int columnIndex) throws 
SQLException {
+        Projection projection = 
projectionsContext.getExpandProjections().get(columnIndex - 1);
+        return DerivedColumn.isDerivedColumnName(projection.getColumnLabel()) 
? projection.getExpression() : queryResultMetaData.getColumnLabel(columnIndex);
     }
     
     private String getColumnName(final ProjectionsContext projectionsContext, 
final QueryResultMetaData queryResultMetaData, final int columnIndex) throws 
SQLException {
@@ -70,6 +77,6 @@ public abstract class QueryHeaderBuilder implements 
DatabaseTypeAwareSPI {
         return projection instanceof ColumnProjection ? ((ColumnProjection) 
projection).getName() : queryResultMetaData.getColumnName(columnIndex);
     }
     
-    protected abstract QueryHeader doBuild(QueryResultMetaData 
queryResultMetaData, ShardingSphereMetaData metaData, String columnName, int 
columnIndex,
+    protected abstract QueryHeader doBuild(QueryResultMetaData 
queryResultMetaData, ShardingSphereMetaData metaData, String columnName, String 
columnLabel, int columnIndex,
                                            
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws 
SQLException;
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
index 6c85d55..4949501 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilder.java
@@ -43,8 +43,8 @@ public final class MySQLQueryHeaderBuilder extends 
QueryHeaderBuilder {
     
     @SneakyThrows(ConcurrentException.class)
     @Override
-    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final int columnIndex,
-                                  final LazyInitializer<DataNodeContainedRule> 
dataNodeContainedRule) throws SQLException {
+    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final String columnLabel, 
+                                  final int columnIndex, final 
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws 
SQLException {
         String schemaName = null == metaData ? "" : metaData.getName();
         String actualTableName = queryResultMetaData.getTableName(columnIndex);
         String tableName;
@@ -57,7 +57,6 @@ public final class MySQLQueryHeaderBuilder extends 
QueryHeaderBuilder {
             tableName = actualTableName;
             primaryKey = false;
         }
-        String columnLabel = queryResultMetaData.getColumnLabel(columnIndex);
         int columnType = queryResultMetaData.getColumnType(columnIndex);
         String columnTypeName = 
queryResultMetaData.getColumnTypeName(columnIndex);
         int columnLength = queryResultMetaData.getColumnLength(columnIndex);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
index 970dca2..680789f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilder.java
@@ -39,8 +39,8 @@ public final class OpenGaussQueryHeaderBuilder extends 
QueryHeaderBuilder {
     }
     
     @Override
-    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final int columnIndex,
-                                  final LazyInitializer<DataNodeContainedRule> 
dataNodeContainedRule) throws SQLException {
-        return delegated.doBuild(queryResultMetaData, metaData, columnName, 
columnIndex, dataNodeContainedRule);
+    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final String columnLabel, 
+                                  final int columnIndex, final 
LazyInitializer<DataNodeContainedRule> dataNodeContainedRule) throws 
SQLException {
+        return delegated.doBuild(queryResultMetaData, metaData, columnName, 
columnLabel, columnIndex, dataNodeContainedRule);
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
index 52c030a..f15b8d5 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilder.java
@@ -43,9 +43,8 @@ public final class PostgreSQLQueryHeaderBuilder extends 
QueryHeaderBuilder {
     }
     
     @Override
-    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName,
+    protected QueryHeader doBuild(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final String columnLabel,
                                   final int columnIndex, final 
LazyInitializer<DataNodeContainedRule> unused) throws SQLException {
-        String columnLabel = queryResultMetaData.getColumnLabel(columnIndex);
         int columnType = queryResultMetaData.getColumnType(columnIndex);
         String columnTypeName = 
queryResultMetaData.getColumnTypeName(columnIndex);
         int columnLength = queryResultMetaData.getColumnLength(columnIndex);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
index 681268b..c4f04e4 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
@@ -44,8 +44,8 @@ public final class OpenGaussQueryHeaderBuilderTest {
         
when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
         
when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
         when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
-        QueryHeader expected = new 
PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
columnIndex, null);
-        QueryHeader actual = new 
OpenGaussQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
columnIndex, null);
+        QueryHeader expected = new 
PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
+        QueryHeader actual = new 
OpenGaussQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
         assertThat(actual.getColumnLabel(), is(expected.getColumnLabel()));
         assertThat(actual.getColumnType(), is(expected.getColumnType()));
         assertThat(actual.getColumnTypeName(), 
is(expected.getColumnTypeName()));
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
index b9a18b5..755ff18 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
@@ -39,7 +39,7 @@ public final class PostgreSQLQueryHeaderBuilderTest {
         
when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
         
when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
         when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
-        QueryHeader actual = new 
PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
columnIndex, null);
+        QueryHeader actual = new 
PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, 
queryResultMetaData.getColumnLabel(columnIndex), columnIndex, null);
         assertThat(actual.getColumnLabel(), is("label"));
         assertThat(actual.getColumnType(), is(Types.INTEGER));
         assertThat(actual.getColumnTypeName(), is("int"));
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
index 0ecdb71..9704650 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/dql/dql-integration-test-cases.xml
@@ -451,10 +451,9 @@
         <assertion expected-data-source-name="read_dataset" />
     </test-case>
     
-    <!-- FIXME #15591 Expected: is "count(distinct order_id)", but: was 
"aggregation_distinct_derived_0"-->
-<!--    <test-case sql="SELECT COUNT(DISTINCT order_id), SUM(DISTINCT 
order_id) FROM t_order WHERE order_id &lt; 1100" db-types="MySQL" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,readwrite_splitting">-->
-<!--        <assertion expected-data-source-name="read_dataset" />-->
-<!--    </test-case>-->
+    <test-case sql="SELECT COUNT(DISTINCT order_id), SUM(DISTINCT order_id) 
FROM t_order WHERE order_id &lt; 1100" db-types="MySQL" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,readwrite_splitting">
+        <assertion expected-data-source-name="read_dataset" />
+    </test-case>
     
     <test-case sql="SELECT COUNT(DISTINCT user_id + order_id) c FROM t_order 
WHERE order_id &lt; 1100" 
scenario-types="db,tbl,dbtbl_with_readwrite_splitting,readwrite_splitting">
         <assertion expected-data-source-name="read_dataset" />

Reply via email to