IGNITE-12829: Custom GROUP_CONCAT separator is ignored. (#7574)
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
index dc5786e..93eed77 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/sql/GridSqlQuerySplitter.java
@@ -1733,7 +1733,10 @@
if (hasDistinctAggregate)
mapAgg = agg.child();
else {
- mapAgg = SplitterUtils.aggregate(agg.distinct(), agg.type()).resultType(GridSqlType.STRING)
+ mapAgg = SplitterUtils
+ .aggregate(agg.distinct(), agg.type())
+ .setGroupConcatSeparator(agg.getGroupConcatSeparator())
+ .resultType(GridSqlType.STRING)
.addChild(agg.child());
}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatCollocatedTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatCollocatedTest.java
index 70d6b95..e26eab4 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatCollocatedTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatCollocatedTest.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.processors.query;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -117,6 +118,31 @@
*
*/
@Test
+ public void testGroupConcatSeparator() {
+ IgniteCache c = ignite(CLIENT).cache(CACHE_NAME);
+
+ List<List<Object>> res = c.query(
+ new SqlFieldsQuery("select grp, GROUP_CONCAT(str0 SEPARATOR '.') from Value WHERE id < ? group by grp")
+ .setCollocated(true).setArgs(KEY_BASE_FOR_DUPLICATES)).getAll();
+
+ List<List<Object>> expRes = Arrays.asList(
+ Arrays.asList(1, "A"),
+ Arrays.asList(2, "C.B"),
+ Arrays.asList(3, "E.D.F"),
+ Arrays.asList(4, "J.G.I.H"),
+ Arrays.asList(5, "O.L.N.K.M"),
+ Arrays.asList(6, "Q.S.U.P.R.T"));
+
+ assertEquals(res.size(), expRes.size());
+
+ for (int i = 0; i < res.size(); i++)
+ assertEqualsCollections(expRes.get(i), res.get(i));
+ }
+
+ /**
+ *
+ */
+ @Test
public void testGroupConcatOrderBy() {
IgniteCache c = ignite(CLIENT).cache(CACHE_NAME);
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatNotCollocatedTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatNotCollocatedTest.java
index 7740342..ac43eb8 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatNotCollocatedTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlGroupConcatNotCollocatedTest.java
@@ -17,6 +17,7 @@
package org.apache.ignite.internal.processors.query;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
@@ -100,6 +101,30 @@
*
*/
@Test
+ public void testGroupConcatSeparator() {
+ IgniteCache c = ignite(CLIENT).cache(CACHE_NAME);
+
+ List<List<Object>> res = c.query(
+ new SqlFieldsQuery("select grp, GROUP_CONCAT(str0 SEPARATOR '.') from Value group by grp")).getAll();
+
+ List<List<Object>> expRes = Arrays.asList(
+ Arrays.asList(1, "A"),
+ Arrays.asList(2, "C.B"),
+ Arrays.asList(3, "E.D.F"),
+ Arrays.asList(4, "J.G.I.H"),
+ Arrays.asList(5, "O.L.N.K.M"),
+ Arrays.asList(6, "Q.S.U.P.R.T"));
+
+ assertEquals(res.size(), expRes.size());
+
+ for (int i = 0; i < res.size(); i++)
+ assertEqualsCollections(expRes.get(i), res.get(i));
+ }
+
+ /**
+ *
+ */
+ @Test
public void testGroupConcatCountDistinct() {
IgniteCache c = ignite(CLIENT).cache(CACHE_NAME);