diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index dca02e091e..e80f49dcb6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -554,11 +554,14 @@ public class SelectStmt extends QueryStmt { } resultExprs.add(rewriteQueryExprByMvColumnExpr(item.getExpr(), analyzer)); String columnLabel = null; - // Infer column name when item is expr, both query and ddl - columnLabel = item.toColumnLabel(i); + Class statementClazz = analyzer.getRootStatementClazz(); + if (statementClazz != null + && (!QueryStmt.class.isAssignableFrom(statementClazz) || hasOutFileClause())) { + // Infer column name when item is expr + columnLabel = item.toColumnLabel(i); + } if (columnLabel == null) { - // column label without position is applicative for query and do not infer - // column name when item is expr + // use original column label columnLabel = item.toColumnLabel(); } SlotRef aliasRef = new SlotRef(null, columnLabel); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java index 2608a554fc..9f267cd471 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java @@ -70,6 +70,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalProject; import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat; import org.apache.doris.nereids.trees.plans.logical.LogicalResultSink; import org.apache.doris.nereids.trees.plans.logical.LogicalSetOperation; +import org.apache.doris.nereids.trees.plans.logical.LogicalSink; import org.apache.doris.nereids.trees.plans.logical.LogicalSort; import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias; import org.apache.doris.nereids.trees.plans.logical.LogicalTVFRelation; @@ -581,8 +582,15 @@ public class BindExpression implements AnalysisRuleFactory { }) ), RuleType.BINDING_RESULT_SINK.build( - unboundResultSink().then(sink -> { - + unboundResultSink().thenApply(ctx -> { + LogicalSink sink = ctx.root; + if (ctx.connectContext.getState().isQuery()) { + List outputExprs = sink.child().getOutput().stream() + .map(NamedExpression.class::cast) + .collect(ImmutableList.toImmutableList()); + return new LogicalResultSink<>(outputExprs, sink.child()); + } + // Should infer column name for expression when query command final ImmutableListMultimap.Builder exprIdToIndexMapBuilder = ImmutableListMultimap.builder(); List childOutput = sink.child().getOutput(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java index c5935a58e3..f4ffeeb6e7 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java @@ -979,10 +979,10 @@ public class OlapQueryCacheTest { cache.rewriteSelectStmt(null); LOG.warn("Sub nokey={}", cache.getNokeyStmt().toSql()); Assert.assertEquals(cache.getNokeyStmt().toSql(), - "SELECT `eventdate` AS `eventdate`, sum(`pv`) AS `__sum_1` " + "SELECT `eventdate` AS `eventdate`, sum(`pv`) AS `sum(``pv``)` " + "FROM (SELECT `eventdate` AS `eventdate`, count(`userid`) AS `pv` " - + "FROM `testCluster:testDb`.`appevent` WHERE `eventid` = 1 " - + "GROUP BY `eventdate`) tbl GROUP BY `eventdate`"); + + "FROM `testCluster:testDb`.`appevent` WHERE `eventid` = 1 GROUP BY `eventdate`) tbl " + + "GROUP BY `eventdate`"); PartitionRange range = cache.getPartitionRange(); boolean flag = range.analytics(); @@ -1001,11 +1001,11 @@ public class OlapQueryCacheTest { sql = ca.getRewriteStmt().toSql(); LOG.warn("Sub rewrite={}", sql); Assert.assertEquals(sql, - "SELECT `eventdate` AS `eventdate`, sum(`pv`) AS `__sum_1` " + "SELECT `eventdate` AS `eventdate`, sum(`pv`) AS `sum(``pv``)` " + "FROM (SELECT `eventdate` AS `eventdate`, count(`userid`) AS `pv` " + "FROM `testCluster:testDb`.`appevent` WHERE `eventdate` > '2020-01-13' " - + "AND `eventdate` < '2020-01-16' AND `eventid` = 1 " - + "GROUP BY `eventdate`) tbl GROUP BY `eventdate`"); + + "AND `eventdate` < '2020-01-16' AND `eventid` = 1 GROUP BY `eventdate`) tbl " + + "GROUP BY `eventdate`"); } catch (Exception e) { LOG.warn("sub ex={}", e); Assert.fail(e.getMessage()); @@ -1056,8 +1056,8 @@ public class OlapQueryCacheTest { SqlCache sqlCache = (SqlCache) ca.getCache(); String cacheKey = sqlCache.getSqlWithViewStmt(); Assert.assertEquals(cacheKey, "SELECT `eventdate` AS `eventdate`, count(`userid`) " - + "AS `__count_1` FROM `testCluster:testDb`.`appevent` WHERE `eventdate` >= '2020-01-12' AND " - + "`eventdate` <= '2020-01-14' GROUP BY `eventdate`|"); + + "AS `count(``userid``)` FROM `testCluster:testDb`.`appevent` WHERE `eventdate` >= '2020-01-12' " + + "AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`|"); Assert.assertEquals(selectedPartitionIds.size(), sqlCache.getSumOfPartitionNum()); }