diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java index 2542396e91ac8d..dd05aa24f4a293 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateTableStmt.java @@ -547,6 +547,7 @@ public void analyze(Analyzer analyzer) throws UserException, AnalysisException { ExpressionPartitionDesc expressionPartitionDesc = (ExpressionPartitionDesc) partitionDesc; try { expressionPartitionDesc.analyze(columnDefs, properties); + // expressionPartitionDesc.analyzeExpr(analyzer); } catch (AnalysisException e) { throw new AnalysisException("ExpressionPartitionDesc analyze error with: " + e.getMessage()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionPartitionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionPartitionDesc.java index e86ddf28793b61..4bb2dccb41da9a 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionPartitionDesc.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExpressionPartitionDesc.java @@ -132,6 +132,10 @@ public RangePartitionDesc getRangePartitionDesc() { return rangePartitionDesc; } + public void analyzeExpr(Analyzer analyzer) throws AnalysisException { + expr.analyze(analyzer); + } + public static SlotRef getSlotRefFromFunctionCallExpr(Expr expr) { if (expr instanceof FunctionCallExpr) { ArrayList children = expr.getChildren(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java index 3f786031439bf7..f68a45ef7428af 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapTableSink.java @@ -25,6 +25,7 @@ import org.apache.doris.catalog.Column; import org.apache.doris.catalog.DistributionInfo; import org.apache.doris.catalog.Env; +import org.apache.doris.catalog.ExpressionRangePartitionInfo; import org.apache.doris.catalog.HashDistributionInfo; import org.apache.doris.catalog.Index; import org.apache.doris.catalog.ListPartitionItem; @@ -180,7 +181,7 @@ public void complete(Analyzer analyzer) throws UserException { tSink.setNumReplicas(numReplicas); tSink.setNeedGenRollup(dstTable.shouldLoadToNewRollup()); tSink.setSchema(createSchema(tSink.getDbId(), dstTable, analyzer)); - tSink.setPartition(createPartition(tSink.getDbId(), dstTable)); + tSink.setPartition(createPartition(tSink.getDbId(), dstTable, analyzer)); List locationParams = createLocation(dstTable); tSink.setLocation(locationParams.get(0)); if (singleReplicaLoad) { @@ -296,7 +297,7 @@ private List getDistColumns(DistributionInfo distInfo) throws UserExcept return distColumns; } - private TOlapTablePartitionParam createPartition(long dbId, OlapTable table) throws UserException { + private TOlapTablePartitionParam createPartition(long dbId, OlapTable table, Analyzer analyzer) throws UserException { TOlapTablePartitionParam partitionParam = new TOlapTablePartitionParam(); partitionParam.setDbId(dbId); partitionParam.setTableId(table.getId()); @@ -349,6 +350,21 @@ private TOlapTablePartitionParam createPartition(long dbId, OlapTable table) thr if (partitionIds.isEmpty()) { partitionParam.setPartitions(new ArrayList()); } + if (partitionInfo instanceof ExpressionRangePartitionInfo) { + ExpressionRangePartitionInfo exprPartitionInfo = (ExpressionRangePartitionInfo) partitionInfo; + List exprs = exprPartitionInfo.getPartitionExprs(); + if (analyzer != null) { + tupleDescriptor.setTable(table); + analyzer.registerTupleDescriptor(tupleDescriptor); + for(Expr e : exprs) { + e.analyze(analyzer); + } + } + partitionParam.setPartitionFunctionExprs(Expr.treesToThrift(exprs)); + partitionParam.setEnableAutomaticPartition(true); + } else { + partitionParam.setEnableAutomaticPartition(false); + } break; } case UNPARTITIONED: { diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift index 5ea3375db369ce..73c5c1511176db 100644 --- a/gensrc/thrift/Descriptors.thrift +++ b/gensrc/thrift/Descriptors.thrift @@ -189,6 +189,8 @@ struct TOlapTablePartitionParam { 6: required list partitions 7: optional list partition_columns + 8: optional list partition_function_exprs + 9: optional bool enable_automatic_partition } struct TOlapTableIndex {