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 f7e591b3507 [Enhancement](nereids) optimize legacy partitions (#56132)
f7e591b3507 is described below

commit f7e591b3507da062b1332dfe1a7c397249ae1de9
Author: yaoxiao <[email protected]>
AuthorDate: Thu Sep 18 10:28:10 2025 +0800

    [Enhancement](nereids) optimize legacy partitions (#56132)
---
 .../apache/doris/alter/SchemaChangeHandler.java    |  4 ++--
 .../apache/doris/analysis/BuildIndexClause.java    |  7 +++---
 .../java/org/apache/doris/analysis/IndexDef.java   | 16 ++++++-------
 .../doris/analysis/ReplacePartitionClause.java     | 13 ++++++-----
 .../main/java/org/apache/doris/catalog/Env.java    |  3 +--
 .../org/apache/doris/datasource/CatalogIf.java     |  6 ++---
 .../apache/doris/datasource/ExternalCatalog.java   | 10 ++++-----
 .../apache/doris/datasource/InternalCatalog.java   | 14 ++++++------
 .../iceberg/IcebergDLFExternalCatalog.java         |  6 ++---
 .../doris/insertoverwrite/InsertOverwriteUtil.java |  6 ++---
 .../trees/plans/commands/info/IndexDefinition.java |  3 +--
 .../plans/commands/info/ReplacePartitionOp.java    |  3 +--
 .../apache/doris/service/FrontendServiceImpl.java  |  4 ++--
 .../apache/doris/statistics/AnalysisManager.java   | 26 +++++++++-------------
 .../doris/statistics/AnalysisManagerTest.java      |  4 ++--
 15 files changed, 59 insertions(+), 66 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java 
b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
index 64bb48a1981..09db668a3ad 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java
@@ -2135,11 +2135,11 @@ public class SchemaChangeHandler extends AlterHandler {
                         }
                     }
 
-                    if (indexDef.getPartitionNames().isEmpty()) {
+                    if (indexDef.getPartitionNamesInfo().isEmpty()) {
                         indexOnPartitions.put(index.getIndexId(), 
olapTable.getPartitionNames());
                     } else {
                         indexOnPartitions.put(
-                                index.getIndexId(), new 
HashSet<>(indexDef.getPartitionNames()));
+                                index.getIndexId(), new 
HashSet<>(indexDef.getPartitionNamesInfo()));
                     }
 
                     alterIndexes.add(index);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
index 0d143a06375..6692e9c0153 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/BuildIndexClause.java
@@ -27,6 +27,7 @@ import org.apache.doris.catalog.Table;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 
 import com.google.common.collect.Maps;
 
@@ -44,9 +45,9 @@ public class BuildIndexClause extends AlterTableClause {
     // index internal class
     private Index index;
     private String indexName;
-    private PartitionNames partitionNames;
+    private PartitionNamesInfo partitionNames;
 
-    public BuildIndexClause(TableName tableName, String indexName, 
PartitionNames partitionNames, boolean alter) {
+    public BuildIndexClause(TableName tableName, String indexName, 
PartitionNamesInfo partitionNames, boolean alter) {
         super(AlterOpType.SCHEMA_CHANGE);
         this.tableName = tableName;
         this.indexName = indexName;
@@ -125,7 +126,7 @@ public class BuildIndexClause extends AlterTableClause {
         }
         indexDef = new IndexDef(indexName, partitionNames, indexType, true);
         if (!table.isPartitionedTable()) {
-            List<String> specifiedPartitions = indexDef.getPartitionNames();
+            List<String> specifiedPartitions = 
indexDef.getPartitionNamesInfo();
             if (!specifiedPartitions.isEmpty()) {
                 throw new AnalysisException("table " + table.getName()
                     + " is not partitioned, cannot build index with 
partitions.");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
index 852a5b2fb30..7764299c295 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/IndexDef.java
@@ -25,6 +25,7 @@ import org.apache.doris.catalog.Type;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.Config;
 import org.apache.doris.common.util.SqlUtils;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 import org.apache.doris.thrift.TInvertedIndexFileStorageFormat;
 
 import com.google.common.base.Strings;
@@ -46,7 +47,7 @@ public class IndexDef {
     private String comment;
     private Map<String, String> properties;
     private boolean isBuildDeferred = false;
-    private PartitionNames partitionNames;
+    private PartitionNamesInfo partitionNamesInfo;
     public static final int MIN_NGRAM_SIZE = 1;
     public static final int MAX_NGRAM_SIZE = 255;
     public static final int MIN_BF_SIZE = 64;
@@ -84,10 +85,11 @@ public class IndexDef {
         }
     }
 
-    public IndexDef(String indexName, PartitionNames partitionNames, IndexType 
indexType, boolean isBuildDeferred) {
+    public IndexDef(String indexName, PartitionNamesInfo partitionNamesInfo,
+                        IndexType indexType, boolean isBuildDeferred) {
         this.indexName = indexName;
         this.indexType = indexType;
-        this.partitionNames = partitionNames;
+        this.partitionNamesInfo = partitionNamesInfo;
         this.isBuildDeferred = isBuildDeferred;
     }
 
@@ -199,12 +201,8 @@ public class IndexDef {
         return ifNotExists;
     }
 
-    public boolean isBuildDeferred() {
-        return isBuildDeferred;
-    }
-
-    public List<String> getPartitionNames() {
-        return partitionNames == null ? Lists.newArrayList() : 
partitionNames.getPartitionNames();
+    public List<String> getPartitionNamesInfo() {
+        return partitionNamesInfo == null ? Lists.newArrayList() : 
partitionNamesInfo.getPartitionNames();
     }
 
     public enum IndexType {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ReplacePartitionClause.java
 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ReplacePartitionClause.java
index 4e899533d84..853babec423 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ReplacePartitionClause.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ReplacePartitionClause.java
@@ -20,6 +20,7 @@ package org.apache.doris.analysis;
 import org.apache.doris.alter.AlterOpType;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.util.PropertyAnalyzer;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.Maps;
@@ -31,8 +32,8 @@ import java.util.Map;
 // eg:
 // ALTER TABLE tbl REPLACE PARTITION (p1, p2, p3) WITH TEMPORARY 
PARTITION(tp1, tp2);
 public class ReplacePartitionClause extends AlterTableClause {
-    private PartitionNames partitionNames;
-    private PartitionNames tempPartitionNames;
+    private PartitionNamesInfo partitionNames;
+    private PartitionNamesInfo tempPartitionNames;
     private Map<String, String> properties = Maps.newHashMap();
 
     // "isStrictMode" is got from property "strict_range", and default is true.
@@ -58,7 +59,7 @@ public class ReplacePartitionClause extends AlterTableClause {
     // and instead, these partitions will be deleted directly.
     private boolean forceDropOldPartition;
 
-    public ReplacePartitionClause(PartitionNames partitionNames, 
PartitionNames tempPartitionNames,
+    public ReplacePartitionClause(PartitionNamesInfo partitionNames, 
PartitionNamesInfo tempPartitionNames,
             boolean isForce, Map<String, String> properties) {
         super(AlterOpType.REPLACE_PARTITION);
         this.partitionNames = partitionNames;
@@ -78,7 +79,7 @@ public class ReplacePartitionClause extends AlterTableClause {
     }
 
     // for nereids
-    public ReplacePartitionClause(PartitionNames partitionNames, 
PartitionNames tempPartitionNames,
+    public ReplacePartitionClause(PartitionNamesInfo partitionNames, 
PartitionNamesInfo tempPartitionNames,
             boolean isForce, Map<String, String> properties,
             boolean isStrictRange, boolean useTempPartitionName) {
         super(AlterOpType.REPLACE_PARTITION);
@@ -118,8 +119,8 @@ public class ReplacePartitionClause extends 
AlterTableClause {
             throw new AnalysisException("No partition specified");
         }
 
-        partitionNames.analyze();
-        tempPartitionNames.analyze();
+        partitionNames.validate();
+        tempPartitionNames.validate();
 
         if (partitionNames.isTemp() || !tempPartitionNames.isTemp()) {
             throw new AnalysisException("Only support replace partitions with 
temp partitions");
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 637786bcd3b..ba8fad70724 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -6469,8 +6469,7 @@ public class Env {
                 catalog -> new DdlException(("Unknown catalog " + catalog)));
         TableNameInfo nameInfo = command.getTableNameInfo();
         PartitionNamesInfo partitionNamesInfo = 
command.getPartitionNamesInfo().orElse(null);
-        catalogIf.truncateTable(nameInfo.getDb(), nameInfo.getTbl(),
-                partitionNamesInfo == null ? null : 
partitionNamesInfo.translateToLegacyPartitionNames(),
+        catalogIf.truncateTable(nameInfo.getDb(), nameInfo.getTbl(), 
partitionNamesInfo,
                 command.isForceDrop(), command.toSqlWithoutTable());
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogIf.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogIf.java
index eef6b96e23d..6b81e787d2d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogIf.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/CatalogIf.java
@@ -18,7 +18,6 @@
 package org.apache.doris.datasource;
 
 import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.analysis.TableName;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.DatabaseIf;
@@ -34,6 +33,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceTagInfo
 import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropBranchInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropTagInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 
 import com.google.common.collect.Lists;
 import org.apache.logging.log4j.LogManager;
@@ -204,8 +204,8 @@ public interface CatalogIf<T extends DatabaseIf> {
         throw new UnsupportedOperationException("Not support rename table 
operation");
     }
 
-    void truncateTable(String dbName, String tableName, PartitionNames 
partitionNames, boolean forceDrop,
-            String rawTruncateSql)
+    void truncateTable(String dbName, String tableName, PartitionNamesInfo 
partitionNamesInfo, boolean forceDrop,
+                       String rawTruncateSql)
             throws DdlException;
 
     // Convert from remote database name to local database name, overridden by 
subclass if necessary
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
index 239f7e3afe1..0ab6115ca1f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/ExternalCatalog.java
@@ -18,7 +18,6 @@
 package org.apache.doris.datasource;
 
 import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.analysis.TableName;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.DatabaseIf;
@@ -59,6 +58,7 @@ import 
org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceTagInfo
 import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropBranchInfo;
 import org.apache.doris.nereids.trees.plans.commands.info.DropTagInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 import org.apache.doris.persist.CreateDbInfo;
 import org.apache.doris.persist.DropDbInfo;
 import org.apache.doris.persist.DropInfo;
@@ -1283,8 +1283,8 @@ public abstract class ExternalCatalog
     }
 
     @Override
-    public void truncateTable(String dbName, String tableName, PartitionNames 
partitionNames, boolean forceDrop,
-            String rawTruncateSql) throws DdlException {
+    public void truncateTable(String dbName, String tableName, 
PartitionNamesInfo partitionNamesInfo, boolean forceDrop,
+                              String rawTruncateSql) throws DdlException {
         makeSureInitialized();
         if (metadataOps == null) {
             throw new DdlException("Truncate table is not supported for 
catalog: " + getName());
@@ -1292,8 +1292,8 @@ public abstract class ExternalCatalog
         try {
             // delete all table data if null
             List<String> partitions = null;
-            if (partitionNames != null) {
-                partitions = partitionNames.getPartitionNames();
+            if (partitionNamesInfo != null) {
+                partitions = partitionNamesInfo.getPartitionNames();
             }
             ExternalTable dorisTable = 
getDbOrDdlException(dbName).getTableOrDdlException(tableName);
             metadataOps.truncateTable(dorisTable, partitions);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
index 9f00ad8bba5..8816802a60f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java
@@ -34,7 +34,6 @@ import org.apache.doris.analysis.MultiPartitionDesc;
 import org.apache.doris.analysis.PartitionDesc;
 import org.apache.doris.analysis.PartitionKeyDesc;
 import org.apache.doris.analysis.PartitionKeyDesc.PartitionKeyValueType;
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.analysis.PartitionValue;
 import org.apache.doris.analysis.SinglePartitionDesc;
 import org.apache.doris.analysis.SlotRef;
@@ -127,6 +126,7 @@ import org.apache.doris.mtmv.MTMVUtil;
 import org.apache.doris.mysql.privilege.PrivPredicate;
 import 
org.apache.doris.nereids.trees.plans.commands.DropCatalogRecycleBinCommand.IdType;
 import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 import org.apache.doris.persist.AlterDatabasePropertyInfo;
 import org.apache.doris.persist.AutoIncrementIdUpdateLog;
 import org.apache.doris.persist.ColocatePersistInfo;
@@ -3494,15 +3494,15 @@ public class InternalCatalog implements 
CatalogIf<Database> {
      * otherwise, it will only truncate those specified partitions.
      *
      */
-    public void truncateTable(String dbName, String tableName, PartitionNames 
partitionNames, boolean forceDrop,
-            String rawTruncateSql)
+    public void truncateTable(String dbName, String tableName, 
PartitionNamesInfo partitionNamesInfo, boolean forceDrop,
+                              String rawTruncateSql)
             throws DdlException {
         // check, and save some info which need to be checked again later
         Map<String, Long> origPartitions = 
Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
         Map<Long, DistributionInfo> partitionsDistributionInfo = 
Maps.newHashMap();
         OlapTable copiedTbl;
 
-        boolean truncateEntireTable = partitionNames == null || 
partitionNames.isStar();
+        boolean truncateEntireTable = partitionNamesInfo == null || 
partitionNamesInfo.isStar();
 
         Database db = getDbOrDdlException(dbName);
         OlapTable olapTable = db.getOlapTableOrDdlException(tableName);
@@ -3518,7 +3518,7 @@ public class InternalCatalog implements 
CatalogIf<Database> {
         try {
             olapTable.checkNormalStateForAlter();
             if (!truncateEntireTable) {
-                for (String partName : partitionNames.getPartitionNames()) {
+                for (String partName : partitionNamesInfo.getPartitionNames()) 
{
                     Partition partition = olapTable.getPartition(partName);
                     if (partition == null) {
                         throw new DdlException("Partition " + partName + " 
does not exist");
@@ -3713,8 +3713,8 @@ public class InternalCatalog implements 
CatalogIf<Database> {
             }
         }
 
-        Env.getCurrentEnv().getAnalysisManager().dropStats(olapTable, 
partitionNames);
-        LOG.info("finished to truncate table {}.{}, partitions: {}", dbName, 
tableName, partitionNames);
+        Env.getCurrentEnv().getAnalysisManager().dropStats(olapTable, 
partitionNamesInfo);
+        LOG.info("finished to truncate table {}.{}, partitions: {}", dbName, 
tableName, partitionNamesInfo);
     }
 
     private List<Partition> truncateTableInternal(OlapTable olapTable, 
List<Partition> newPartitions,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergDLFExternalCatalog.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergDLFExternalCatalog.java
index 8dcdfbd5dd9..4ef2eda9789 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergDLFExternalCatalog.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergDLFExternalCatalog.java
@@ -17,13 +17,13 @@
 
 package org.apache.doris.datasource.iceberg;
 
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.UserException;
 import org.apache.doris.datasource.CatalogProperty;
 import org.apache.doris.datasource.property.metastore.HMSBaseProperties;
 import org.apache.doris.nereids.exceptions.NotSupportedException;
 import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 
 import java.util.Map;
 
@@ -58,8 +58,8 @@ public class IcebergDLFExternalCatalog extends 
IcebergExternalCatalog {
     }
 
     @Override
-    public void truncateTable(String dbName, String tableName, PartitionNames 
partitionNames, boolean forceDrop,
-            String rawTruncateSql) throws DdlException {
+    public void truncateTable(String dbName, String tableName, 
PartitionNamesInfo partitionNamesInfo, boolean forceDrop,
+                              String rawTruncateSql) throws DdlException {
         throw new NotSupportedException("iceberg catalog with dlf type not 
supports 'truncate table'");
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java
 
b/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java
index 35bcaa0001e..a2019660ae4 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/insertoverwrite/InsertOverwriteUtil.java
@@ -19,7 +19,6 @@ package org.apache.doris.insertoverwrite;
 
 import org.apache.doris.analysis.AddPartitionLikeClause;
 import org.apache.doris.analysis.DropPartitionClause;
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.analysis.ReplacePartitionClause;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.Env;
@@ -27,6 +26,7 @@ import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.TableIf;
 import org.apache.doris.common.DdlException;
 import org.apache.doris.common.util.PropertyAnalyzer;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 
 import com.google.common.collect.Maps;
 import org.apache.logging.log4j.LogManager;
@@ -82,8 +82,8 @@ public class InsertOverwriteUtil {
                 Map<String, String> properties = Maps.newHashMap();
                 
properties.put(PropertyAnalyzer.PROPERTIES_USE_TEMP_PARTITION_NAME, "false");
                 ReplacePartitionClause replacePartitionClause = new 
ReplacePartitionClause(
-                        new PartitionNames(false, partitionNames),
-                        new PartitionNames(true, tempPartitionNames), isForce, 
properties);
+                        new PartitionNamesInfo(false, partitionNames),
+                        new PartitionNamesInfo(true, tempPartitionNames), 
isForce, properties);
                 if (replacePartitionClause.getTempPartitionNames().isEmpty()) {
                     return;
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
index 5aec7d5d0bf..caa6f2c82fd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/IndexDefinition.java
@@ -298,8 +298,7 @@ public class IndexDefinition {
      */
     public IndexDef translateToLegacyIndexDef() {
         if (isBuildDeferred) {
-            return new IndexDef(name, partitionNames != null ? 
partitionNames.translateToLegacyPartitionNames() : null,
-                    indexType, true);
+            return new IndexDef(name, partitionNames, indexType, true);
         } else {
             return new IndexDef(name, ifNotExists, cols, indexType, 
properties, comment);
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionOp.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionOp.java
index fe11c6ad078..a77e4c2b20e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionOp.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionOp.java
@@ -130,8 +130,7 @@ public class ReplacePartitionOp extends AlterTableOp {
 
     @Override
     public AlterTableClause translateToLegacyAlterClause() {
-        return new 
ReplacePartitionClause(partitionNames.translateToLegacyPartitionNames(),
-                tempPartitionNames.translateToLegacyPartitionNames(),
+        return new ReplacePartitionClause(partitionNames, tempPartitionNames,
                 forceDropOldPartition, properties, isStrictRange, 
useTempPartitionName);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index d8cee22b962..e813948742d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -3705,9 +3705,9 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
         InvalidateStatsTarget target = GsonUtils.GSON.fromJson(request.key, 
InvalidateStatsTarget.class);
         AnalysisManager analysisManager = 
Env.getCurrentEnv().getAnalysisManager();
         TableStatsMeta tableStats = 
analysisManager.findTableStatsStatus(target.tableId);
-        PartitionNames partitionNames = null;
+        PartitionNamesInfo partitionNames = null;
         if (target.partitions != null) {
-            partitionNames = new PartitionNames(false, new 
ArrayList<>(target.partitions));
+            partitionNames = new PartitionNamesInfo(false, new 
ArrayList<>(target.partitions));
         }
         if (target.isTruncate) {
             analysisManager.submitAsyncDropStatsTask(target.catalogId, 
target.dbId,
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
index 98a531746a5..3223f915fb0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java
@@ -18,7 +18,6 @@
 package org.apache.doris.statistics;
 
 import org.apache.doris.analysis.AnalyzeProperties;
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.analysis.TableName;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Database;
@@ -674,25 +673,22 @@ public class AnalysisManager implements Writable {
         TableStatsMeta tableStats = 
findTableStatsStatus(dropStatsCommand.getTblId());
         Set<String> cols = dropStatsCommand.getColumnNames();
         PartitionNamesInfo partitionNamesInfo = 
dropStatsCommand.getOpPartitionNamesInfo();
-        PartitionNames partitionNames = null;
-        if (partitionNamesInfo != null) {
-            partitionNames = new PartitionNames(partitionNamesInfo.isTemp(), 
partitionNamesInfo.getPartitionNames());
-        }
         long catalogId = dropStatsCommand.getCatalogId();
         long dbId = dropStatsCommand.getDbId();
         long tblId = dropStatsCommand.getTblId();
         TableIf table = StatisticsUtil.findTable(catalogId, dbId, tblId);
         // Remove tableMetaStats if drop whole table stats.
-        if ((cols == null || cols.isEmpty()) && (!table.isPartitionedTable() 
|| partitionNames == null
-                || partitionNames.isStar() || 
partitionNames.getPartitionNames() == null)) {
+        if ((cols == null || cols.isEmpty()) && (!table.isPartitionedTable() 
|| partitionNamesInfo == null
+                || partitionNamesInfo.isStar() || 
partitionNamesInfo.getPartitionNames() == null)) {
             removeTableStats(tblId);
             Env.getCurrentEnv().getEditLog().logDeleteTableStats(new 
TableStatsDeletionLog(tblId));
         }
-        invalidateLocalStats(catalogId, dbId, tblId, cols, tableStats, 
partitionNames);
+        invalidateLocalStats(catalogId, dbId, tblId, cols, tableStats, 
partitionNamesInfo);
         // Drop stats ddl is master only operation.
         Set<String> partitions = null;
-        if (partitionNames != null && !partitionNames.isStar() && 
partitionNames.getPartitionNames() != null) {
-            partitions = new HashSet<>(partitionNames.getPartitionNames());
+        if (partitionNamesInfo != null && !partitionNamesInfo.isStar()
+                && partitionNamesInfo.getPartitionNames() != null) {
+            partitions = new HashSet<>(partitionNamesInfo.getPartitionNames());
         }
         invalidateRemoteStats(catalogId, dbId, tblId, cols, partitions, false);
         StatisticsRepository.dropStatistics(catalogId, dbId, tblId, cols, 
partitions);
@@ -702,7 +698,7 @@ public class AnalysisManager implements Writable {
         Env.getCurrentEnv().getStatisticsCleaner().clear();
     }
 
-    public void dropStats(TableIf table, PartitionNames partitionNames) {
+    public void dropStats(TableIf table, PartitionNamesInfo partitionNames) {
         try {
             long catalogId = table.getDatabase().getCatalog().getId();
             long dbId = table.getDatabase().getId();
@@ -719,11 +715,11 @@ public class AnalysisManager implements Writable {
         private final long tableId;
         private final Set<String> columns;
         private final TableStatsMeta tableStats;
-        private final PartitionNames partitionNames;
+        private final PartitionNamesInfo partitionNames;
         private final boolean isMaster;
 
         public DropStatsTask(long catalogId, long dbId, long tableId, 
Set<String> columns,
-                             TableStatsMeta tableStats, PartitionNames 
partitionNames, boolean isMaster) {
+                             TableStatsMeta tableStats, PartitionNamesInfo 
partitionNames, boolean isMaster) {
             this.catalogId = catalogId;
             this.dbId = dbId;
             this.tableId = tableId;
@@ -756,7 +752,7 @@ public class AnalysisManager implements Writable {
     }
 
     public void submitAsyncDropStatsTask(long catalogId, long dbId, long 
tableId,
-            PartitionNames partitionNames, boolean isMaster) {
+            PartitionNamesInfo partitionNames, boolean isMaster) {
         try {
             dropStatsExecutors.submit(new DropStatsTask(catalogId, dbId, 
tableId, null,
                     findTableStatsStatus(tableId), partitionNames, isMaster));
@@ -787,7 +783,7 @@ public class AnalysisManager implements Writable {
     }
 
     public void invalidateLocalStats(long catalogId, long dbId, long tableId, 
Set<String> columns,
-                                     TableStatsMeta tableStats, PartitionNames 
partitionNames) {
+                                     TableStatsMeta tableStats, 
PartitionNamesInfo partitionNames) {
         TableIf table = StatisticsUtil.findTable(catalogId, dbId, tableId);
         StatisticsCache statsCache = Env.getCurrentEnv().getStatisticsCache();
         if (columns == null || columns.isEmpty()) {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
index e728623aaa4..0f37721022b 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/AnalysisManagerTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.doris.statistics;
 
-import org.apache.doris.analysis.PartitionNames;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Database;
 import org.apache.doris.catalog.DatabaseIf;
@@ -31,6 +30,7 @@ import org.apache.doris.datasource.InternalCatalog;
 import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Slot;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
+import org.apache.doris.nereids.trees.plans.commands.info.PartitionNamesInfo;
 import org.apache.doris.nereids.types.IntegerType;
 import org.apache.doris.statistics.AnalysisInfo.AnalysisType;
 import org.apache.doris.statistics.AnalysisInfo.JobType;
@@ -287,7 +287,7 @@ public class AnalysisManagerTest {
         new MockUp<AnalysisManager>() {
             @Mock
             public void invalidateLocalStats(long catalogId, long dbId, long 
tableId, Set<String> columns,
-                                             TableStatsMeta tableStats, 
PartitionNames partitionNames) {
+                                             TableStatsMeta tableStats, 
PartitionNamesInfo partitionNames) {
                 try {
                     Thread.sleep(1000);
                     count.incrementAndGet();


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

Reply via email to