diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java index 2d6ee678db3a52..942c3cce70d6df 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableAsSelectStmt.java @@ -20,7 +20,11 @@ import org.apache.doris.common.ErrorCode; import org.apache.doris.common.ErrorReport; import org.apache.doris.common.UserException; +import org.apache.doris.planner.OriginalPlanner; +import org.apache.doris.planner.PlanFragment; +import org.apache.doris.qe.ConnectContext; +import com.google.common.base.Preconditions; import lombok.Getter; import java.util.ArrayList; @@ -67,6 +71,18 @@ public void analyze(Analyzer analyzer) throws UserException { QueryStmt tmpStmt = queryStmt.clone(); tmpStmt.analyze(dummyRootAnalyzer); this.queryStmt = tmpStmt; + // to adjust the nullable of the result expression, we have to create plan fragment from the query stmt. + OriginalPlanner planner = new OriginalPlanner(dummyRootAnalyzer); + planner.createPlanFragments(queryStmt, dummyRootAnalyzer, ConnectContext.get().getSessionVariable().toThrift()); + PlanFragment root = planner.getFragments().get(0); + List outputs = root.getOutputExprs(); + Preconditions.checkArgument(outputs.size() == queryStmt.getResultExprs().size()); + for (int i = 0; i < outputs.size(); ++i) { + if (queryStmt.getResultExprs().get(i).getSrcSlotRef() != null) { + queryStmt.getResultExprs().get(i).getSrcSlotRef().getColumn() + .setIsAllowNull(outputs.get(i).isNullable()); + } + } ArrayList resultExprs = getQueryStmt().getResultExprs(); if (columnNames != null && columnNames.size() != resultExprs.size()) { ErrorReport.reportAnalysisException(ErrorCode.ERR_COL_NUMBER_NOT_MATCH); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java index e3fa6978b54808..faeb6183c009be 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SingleNodePlanner.java @@ -1055,7 +1055,7 @@ private PlanNode createJoinPlan(Analyzer analyzer, TableRef leftmostRef, List