From 3ed49103ce46e874aaa90f5a36f51e977f2e2686 Mon Sep 17 00:00:00 2001 From: HappenLee Date: Fri, 20 Nov 2020 13:48:27 +0800 Subject: [PATCH] [Bug] Fix the bug of NULL do not show in CTE statement. issue:#4926 --- .../org/apache/doris/analysis/InlineViewRef.java | 4 +++- .../org/apache/doris/planner/PlannerTest.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/InlineViewRef.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/InlineViewRef.java index d2a947e5f96a6d..4e3cb88e6e2c26 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/InlineViewRef.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/InlineViewRef.java @@ -266,7 +266,9 @@ public TupleDescriptor createTupleDescriptor(Analyzer analyzer) throws AnalysisE } columnSet.add(colAlias); - columnList.add(new Column(colAlias, selectItemExpr.getType().getPrimitiveType())); + // TODO: inlineView threat all column is nullable to make sure query results are correct + // we should judge column whether is nullable by selectItemExpr in the future + columnList.add(new Column(colAlias, selectItemExpr.getType().getPrimitiveType(), true)); } InlineView inlineView = (view != null) ? new InlineView(view, columnList) : new InlineView(getExplicitAlias(), columnList); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java index 900f735a9fb52d..3fc7f8c5c6bfd8 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java @@ -309,4 +309,19 @@ public void testPushDown() throws Exception{ } + @Test + public void testWithStmtSoltIsAllowNull() throws Exception { + // union + String sql1 = "with a as (select NULL as user_id ), " + + "b as ( select '543' as user_id) " + + "select user_id from a union all select user_id from b"; + + StmtExecutor stmtExecutor1 = new StmtExecutor(ctx, sql1); + stmtExecutor1.execute(); + Planner planner1 = stmtExecutor1.planner(); + List fragments1 = planner1.getFragments(); + String plan1 = planner1.getExplainString(fragments1, TExplainLevel.VERBOSE); + Assert.assertEquals(3, StringUtils.countMatches(plan1, "nullIndicatorBit=0")); + } + }