diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 455e08ec036c88..ae2414a695a879 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -424,10 +424,6 @@ private void analyzeBuiltinAggFunction(Analyzer analyzer) throws AnalysisExcepti "group_concat requires one or two parameters: " + this.toSql()); } - if (fnParams.isDistinct()) { - throw new AnalysisException("group_concat does not support DISTINCT"); - } - Expr arg0 = getChild(0); if (!arg0.type.isStringType() && !arg0.type.isNull()) { throw new AnalysisException( diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/SqlUtils.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/SqlUtils.java index 1fc04fc108a4b5..669088320920cd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/SqlUtils.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/SqlUtils.java @@ -17,7 +17,7 @@ package org.apache.doris.common.util; -import org.apache.parquet.Strings; +import com.google.common.base.Strings; public class SqlUtils { public static String escapeUnquote(String ident) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java index ecb5800ceaa8c6..0c7e0614e519c9 100755 --- a/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/SelectStmtTest.java @@ -789,9 +789,12 @@ public void testWithUnionToSql() throws Exception { @Test public void testSelectOuterJoinSql() throws Exception { ConnectContext ctx = UtFrameUtils.createDefaultCtx(); - String sql1 = "select l.citycode, group_concat(r.username) from db1.table1 l left join db1.table2 r on l.citycode=r.citycode group by l.citycode"; + String sql1 = "select l.citycode, group_concat(distinct r.username) from db1.table1 l " + + "left join db1.table2 r on l.citycode=r.citycode group by l.citycode"; SelectStmt stmt1 = (SelectStmt) UtFrameUtils.parseAndAnalyzeStmt(sql1, ctx); Assert.assertTrue(stmt1.getAnalyzer().getSlotDesc(new SlotId(2)).getIsNullable()); Assert.assertTrue(stmt1.getAnalyzer().getSlotDescriptor("r.username").getIsNullable()); + FunctionCallExpr expr = (FunctionCallExpr) stmt1.getSelectList().getItems().get(1).getExpr(); + Assert.assertTrue(expr.getFnParams().isDistinct()); } } diff --git a/regression-test/data/query/group_concat/test_group_concat.out b/regression-test/data/query/group_concat/test_group_concat.out new file mode 100644 index 00000000000000..94f73cc5368d50 --- /dev/null +++ b/regression-test/data/query/group_concat/test_group_concat.out @@ -0,0 +1,7 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !select -- +false, false + +-- !select -- +false + diff --git a/regression-test/suites/query/group_concat/test_group_concat.groovy b/regression-test/suites/query/group_concat/test_group_concat.groovy new file mode 100644 index 00000000000000..6bb57dea447bf8 --- /dev/null +++ b/regression-test/suites/query/group_concat/test_group_concat.groovy @@ -0,0 +1,26 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_group_concat", "query") { + qt_select """ + SELECT group_concat(k6) FROM test_query_db.test where k6='false' + """ + + qt_select """ + SELECT group_concat(DISTINCT k6) FROM test_query_db.test where k6='false' + """ +}