This is an automated email from the ASF dual-hosted git repository.

starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 0e1e4c8508c [opt](nereids) disable infer column name when query 
(#27450)
0e1e4c8508c is described below

commit 0e1e4c8508cda8d32cce9a02859f1418856cdefe
Author: seawinde <[email protected]>
AuthorDate: Mon Nov 27 11:26:17 2023 +0800

    [opt](nereids) disable infer column name when query (#27450)
    
    Disable infer column name when query, because it cause some errors when 
using BI tools
    This feature is firstly developed by #26055
---
 .../main/java/org/apache/doris/analysis/SelectStmt.java  | 11 +++++++----
 .../doris/nereids/rules/analysis/BindExpression.java     | 12 ++++++++++--
 .../java/org/apache/doris/qe/OlapQueryCacheTest.java     | 16 ++++++++--------
 3 files changed, 25 insertions(+), 14 deletions(-)

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 dca02e091e7..e80f49dcb61 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<? extends StatementBase> 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 2608a554fc9..9f267cd4712 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<Plan> sink = ctx.root;
+                    if (ctx.connectContext.getState().isQuery()) {
+                        List<NamedExpression> 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<ExprId, Integer> 
exprIdToIndexMapBuilder =
                             ImmutableListMultimap.builder();
                     List<Slot> 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 c5935a58e3e..f4ffeeb6e74 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 <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `__sum_1` "
+                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `sum(``pv``)` "
                             + "FROM (SELECT <slot 3> `eventdate` AS 
`eventdate`, <slot 4> 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 <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `__sum_1` "
+                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `sum(``pv``)` "
                             + "FROM (SELECT <slot 3> `eventdate` AS 
`eventdate`, <slot 4> 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 <slot 2> `eventdate` AS 
`eventdate`, <slot 3> 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());
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to