You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/06/19 13:22:09 UTC
[shardingsphere] branch master updated: fix count return null
(#6118)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 d5a3224 fix count return null (#6118)
d5a3224 is described below
commit d5a3224f4a5b4bdf62dc67deeaabc7abed8877c9
Author: kimmking <ki...@163.com>
AuthorDate: Fri Jun 19 21:21:45 2020 +0800
fix count return null (#6118)
* fix count return null
* fix checkstyle
* fix unit test
* polish checkstyle
* polish code style
* fix in getMemoryResultSetRows
* fix code style
* extract method
* fix codestyle
---
.../dql/groupby/GroupByMemoryMergedResult.java | 22 ++++++++++++++++++++--
.../dql/groupby/GroupByMemoryMergedResultTest.java | 1 +
.../result/impl/memory/MemoryQueryResultRow.java | 2 ++
3 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/main/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResult.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/main/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResult.java
index f0422c0..8a6331b 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/main/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResult.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/main/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResult.java
@@ -30,6 +30,7 @@ import org.apache.shardingsphere.sql.parser.binder.segment.select.projection.imp
import org.apache.shardingsphere.sql.parser.binder.segment.select.projection.impl.AggregationProjection;
import org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.sql.parser.sql.constant.AggregationType;
import org.apache.shardingsphere.sql.parser.sql.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.infra.executor.sql.QueryResult;
import org.apache.shardingsphere.infra.merge.result.impl.memory.MemoryMergedResult;
@@ -39,6 +40,7 @@ import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -134,11 +136,27 @@ public final class GroupByMemoryMergedResult extends MemoryMergedResult<Sharding
}
return false;
}
-
- private List<MemoryQueryResultRow> getMemoryResultSetRows(final SelectStatementContext selectStatementContext,
+
+ private List<MemoryQueryResultRow> getMemoryResultSetRows(final SelectStatementContext selectStatementContext,
final Map<GroupByValue, MemoryQueryResultRow> dataMap, final List<Boolean> valueCaseSensitive) {
+ if (dataMap.isEmpty()) {
+ Object[] data = generateReturnData(selectStatementContext);
+ return Collections.singletonList(new MemoryQueryResultRow(data));
+ }
+
List<MemoryQueryResultRow> result = new ArrayList<>(dataMap.values());
result.sort(new GroupByRowComparator(selectStatementContext, valueCaseSensitive));
return result;
}
+
+ private Object[] generateReturnData(final SelectStatementContext selectStatementContext) {
+ List projections = new LinkedList(selectStatementContext.getProjectionsContext().getProjections());
+ Object[] data = new Object[projections.size()];
+ for (int i = 0; i < projections.size(); i++) {
+ if (projections.get(i) instanceof AggregationProjection && AggregationType.COUNT == ((AggregationProjection) projections.get(i)).getType()) {
+ data[i] = 0;
+ }
+ }
+ return data;
+ }
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
index d132892..2f176f5 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-merge/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
@@ -53,6 +53,7 @@ public final class GroupByMemoryMergedResultTest {
public void assertNextForResultSetsAllEmpty() throws SQLException {
ShardingDQLResultMerger resultMerger = new ShardingDQLResultMerger(DatabaseTypes.getActualDatabaseType("MySQL"));
MergedResult actual = resultMerger.merge(Arrays.asList(createQueryResult(), createQueryResult(), createQueryResult()), createSelectStatementContext(), null);
+ assertTrue(actual.next());
assertFalse(actual.next());
}
diff --git a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryQueryResultRow.java b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryQueryResultRow.java
index 0ad134a..8e80bdd 100644
--- a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryQueryResultRow.java
+++ b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryQueryResultRow.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.merge.result.impl.memory;
import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.executor.sql.QueryResult;
import java.sql.SQLException;
@@ -25,6 +26,7 @@ import java.sql.SQLException;
/**
* Memory query result row.
*/
+@RequiredArgsConstructor
public final class MemoryQueryResultRow {
private final Object[] data;