You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by st...@apache.org on 2025/12/03 06:31:49 UTC
(doris) branch master updated: [Enhancement](nereids) optimize to delete translateToLegacyAlterClause (#57121)
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 6c632884c7b [Enhancement](nereids) optimize to delete translateToLegacyAlterClause (#57121)
6c632884c7b is described below
commit 6c632884c7b170762cbccb8d436e985277f6ec34
Author: yaoxiao <yx...@163.com>
AuthorDate: Wed Dec 3 14:31:42 2025 +0800
[Enhancement](nereids) optimize to delete translateToLegacyAlterClause (#57121)
---
.../main/java/org/apache/doris/alter/Alter.java | 387 ++++++++++-----------
.../java/org/apache/doris/alter/AlterHandler.java | 10 +-
.../org/apache/doris/alter/AlterOperations.java | 58 +--
.../doris/alter/MaterializedViewHandler.java | 78 ++---
.../apache/doris/alter/SchemaChangeHandler.java | 234 ++++++-------
.../java/org/apache/doris/alter/SystemHandler.java | 119 +++----
.../apache/doris/analysis/DistributionDesc.java | 5 +
.../doris/analysis/HashDistributionDesc.java | 6 +
.../apache/doris/analysis/PartitionExprUtil.java | 18 +-
.../apache/doris/analysis/PartitionKeyDesc.java | 3 +-
.../doris/analysis/RandomDistributionDesc.java | 7 +
.../java/org/apache/doris/catalog/BrokerMgr.java | 17 +
.../main/java/org/apache/doris/catalog/Env.java | 97 +++---
.../doris/clone/DynamicPartitionScheduler.java | 91 ++---
.../apache/doris/common/util/IdGeneratorUtil.java | 2 +-
.../apache/doris/datasource/InternalCatalog.java | 96 ++---
.../datasource/iceberg/IcebergExternalCatalog.java | 18 +-
.../datasource/iceberg/IcebergMetadataOps.java | 48 +--
.../doris/insertoverwrite/InsertOverwriteUtil.java | 16 +-
.../org/apache/doris/mtmv/MTMVPartitionUtil.java | 13 +-
.../doris/nereids/parser/LogicalPlanBuilder.java | 8 +-
.../trees/plans/commands/AlterSystemCommand.java | 4 +-
.../trees/plans/commands/AlterTableCommand.java | 49 ++-
.../trees/plans/commands/info/AddColumnOp.java | 72 ++--
.../trees/plans/commands/info/AddColumnsOp.java | 7 -
.../plans/commands/info/AddPartitionFieldOp.java | 7 -
...DistributionOp.java => AddPartitionLikeOp.java} | 52 +--
.../trees/plans/commands/info/AddPartitionOp.java | 47 ++-
.../trees/plans/commands/info/AddRollupOp.java | 7 -
.../plans/commands/info/AlterMultiPartitionOp.java | 10 +-
.../info/{AlterSystemOp.java => AlterOp.java} | 26 +-
.../trees/plans/commands/info/AlterSystemOp.java | 3 +-
.../trees/plans/commands/info/AlterTableOp.java | 6 +-
.../trees/plans/commands/info/BuildIndexOp.java | 8 -
.../trees/plans/commands/info/CreateIndexOp.java | 7 -
.../commands/info/CreateOrReplaceBranchOp.java | 7 +-
.../plans/commands/info/CreateOrReplaceTagOp.java | 7 +-
.../trees/plans/commands/info/CreateTableInfo.java | 9 +-
.../trees/plans/commands/info/DropBranchOp.java | 7 +-
.../trees/plans/commands/info/DropColumnOp.java | 7 -
.../trees/plans/commands/info/DropIndexOp.java | 7 -
.../plans/commands/info/DropPartitionFieldOp.java | 7 -
.../commands/info/DropPartitionFromIndexOp.java | 7 -
.../trees/plans/commands/info/DropPartitionOp.java | 7 -
.../trees/plans/commands/info/DropRollupOp.java | 7 -
.../trees/plans/commands/info/DropTagOp.java | 7 +-
.../trees/plans/commands/info/EnableFeatureOp.java | 7 -
...rSystemOp.java => ModifyBackendHostNameOp.java} | 37 +-
.../trees/plans/commands/info/ModifyBrokerOp.java | 113 ++++++
.../plans/commands/info/ModifyColumnCommentOp.java | 7 -
.../trees/plans/commands/info/ModifyColumnOp.java | 7 -
.../plans/commands/info/ModifyDistributionOp.java | 7 -
.../trees/plans/commands/info/ModifyEngineOp.java | 7 -
...SystemOp.java => ModifyFrontendHostNameOp.java} | 38 +-
...ndHostNameOp.java => ModifyNodeHostNameOp.java} | 16 +-
.../plans/commands/info/ModifyPartitionOp.java | 11 +-
.../plans/commands/info/ModifyTableCommentOp.java | 7 -
.../commands/info/ModifyTablePropertiesOp.java | 7 -
.../trees/plans/commands/info/RenameColumnOp.java | 7 -
.../plans/commands/info/RenamePartitionOp.java | 7 -
.../trees/plans/commands/info/RenameRollupOp.java | 7 -
.../trees/plans/commands/info/RenameTableOp.java | 7 -
.../plans/commands/info/ReorderColumnsOp.java | 7 -
.../commands/info/ReplacePartitionFieldOp.java | 8 -
.../plans/commands/info/ReplacePartitionOp.java | 8 -
.../trees/plans/commands/info/ReplaceTableOp.java | 11 +-
.../plans/commands/info/RollupDefinition.java | 4 +
.../apache/doris/service/FrontendServiceImpl.java | 8 +-
.../org/apache/doris/system/SystemInfoService.java | 15 +
.../org/apache/doris/alter/CloudIndexTest.java | 66 ++--
.../org/apache/doris/alter/IndexChangeJobTest.java | 248 ++++++-------
.../org/apache/doris/alter/RollupJobV2Test.java | 49 +--
.../apache/doris/alter/SchemaChangeJobV2Test.java | 91 ++---
.../plans/commands/AlterSystemCommandTest.java | 8 +-
.../commands/info/AddPartitionFieldOpTest.java | 27 --
.../commands/info/DropPartitionFieldOpTest.java | 13 -
.../commands/info/ReplacePartitionFieldOpTest.java | 13 -
77 files changed, 1231 insertions(+), 1352 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
index 2253781c7ec..10ea0c5e55f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/Alter.java
@@ -17,36 +17,6 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AddColumnClause;
-import org.apache.doris.analysis.AddColumnsClause;
-import org.apache.doris.analysis.AddPartitionClause;
-import org.apache.doris.analysis.AddPartitionFieldClause;
-import org.apache.doris.analysis.AddPartitionLikeClause;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.AlterMultiPartitionClause;
-import org.apache.doris.analysis.ColumnRenameClause;
-import org.apache.doris.analysis.CreateOrReplaceBranchClause;
-import org.apache.doris.analysis.CreateOrReplaceTagClause;
-import org.apache.doris.analysis.DropBranchClause;
-import org.apache.doris.analysis.DropColumnClause;
-import org.apache.doris.analysis.DropPartitionClause;
-import org.apache.doris.analysis.DropPartitionFieldClause;
-import org.apache.doris.analysis.DropPartitionFromIndexClause;
-import org.apache.doris.analysis.DropTagClause;
-import org.apache.doris.analysis.ModifyColumnClause;
-import org.apache.doris.analysis.ModifyColumnCommentClause;
-import org.apache.doris.analysis.ModifyDistributionClause;
-import org.apache.doris.analysis.ModifyEngineClause;
-import org.apache.doris.analysis.ModifyPartitionClause;
-import org.apache.doris.analysis.ModifyTableCommentClause;
-import org.apache.doris.analysis.ModifyTablePropertiesClause;
-import org.apache.doris.analysis.PartitionRenameClause;
-import org.apache.doris.analysis.ReorderColumnsClause;
-import org.apache.doris.analysis.ReplacePartitionClause;
-import org.apache.doris.analysis.ReplacePartitionFieldClause;
-import org.apache.doris.analysis.ReplaceTableClause;
-import org.apache.doris.analysis.RollupRenameClause;
-import org.apache.doris.analysis.TableRenameClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.DataProperty;
import org.apache.doris.catalog.Database;
@@ -87,6 +57,36 @@ import org.apache.doris.nereids.trees.plans.commands.AlterTableCommand;
import org.apache.doris.nereids.trees.plans.commands.AlterViewCommand;
import org.apache.doris.nereids.trees.plans.commands.CreateMaterializedViewCommand;
import org.apache.doris.nereids.trees.plans.commands.DropMaterializedViewCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AddColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddColumnsOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionFieldOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionLikeOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterMultiPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceBranchOp;
+import org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceTagOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropBranchOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionFieldOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionFromIndexOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropTagOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyColumnCommentOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyDistributionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyEngineOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyTableCommentOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyTablePropertiesOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenamePartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameRollupOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameTableOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReorderColumnsOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionFieldOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplaceTableOp;
import org.apache.doris.persist.AlterMTMV;
import org.apache.doris.persist.AlterViewInfo;
import org.apache.doris.persist.BatchModifyPartitionsInfo;
@@ -163,7 +163,7 @@ public class Alter {
}
private boolean processAlterOlapTable(AlterTableCommand command, OlapTable olapTable,
- List<AlterClause> alterClauses,
+ List<AlterOp> alterOps,
Database db) throws UserException {
if (olapTable.getDataSortInfo() != null
&& olapTable.getDataSortInfo().getSortType() == TSortType.ZORDER) {
@@ -171,12 +171,12 @@ public class Alter {
}
// check conflict alter ops first
- alterClauses.addAll(command.getOps());
- return processAlterOlapTableInternal(alterClauses, olapTable, db, command.toSql());
+ alterOps.addAll(command.getOps());
+ return processAlterOlapTableInternal(alterOps, olapTable, db, command.toSql());
}
- private boolean processAlterOlapTableInternal(List<AlterClause> alterClauses, OlapTable olapTable,
- Database db, String sql) throws UserException {
+ private boolean processAlterOlapTableInternal(List<AlterOp> alterOps, OlapTable olapTable,
+ Database db, String sql) throws UserException {
if (olapTable.getDataSortInfo() != null
&& olapTable.getDataSortInfo().getSortType() == TSortType.ZORDER) {
throw new UserException("z-order table can not support schema change!");
@@ -184,25 +184,22 @@ public class Alter {
// check conflict alter ops first
AlterOperations currentAlterOps = new AlterOperations();
- currentAlterOps.checkConflict(alterClauses);
-
- // Check for unsupported operations on internal tables
- for (AlterClause clause : alterClauses) {
- if (clause instanceof AddPartitionFieldClause) {
+ currentAlterOps.checkConflict(alterOps);
+ for (AlterOp alterOp : alterOps) {
+ // Check for unsupported operations on internal tables
+ if (alterOp instanceof AddPartitionFieldOp) {
throw new UserException("ADD PARTITION KEY is only supported for Iceberg tables");
}
- if (clause instanceof DropPartitionFieldClause) {
+ if (alterOp instanceof DropPartitionFieldOp) {
throw new UserException("DROP PARTITION KEY is only supported for Iceberg tables");
}
- if (clause instanceof ReplacePartitionFieldClause) {
+ if (alterOp instanceof ReplacePartitionFieldOp) {
throw new UserException("REPLACE PARTITION KEY is only supported for Iceberg tables");
}
- }
- for (AlterClause clause : alterClauses) {
Map<String, String> properties = null;
try {
- properties = clause.getProperties();
+ properties = alterOp.getProperties();
} catch (Exception e) {
continue;
}
@@ -213,7 +210,7 @@ public class Alter {
}
if (olapTable instanceof MTMV) {
- currentAlterOps.checkMTMVAllow(alterClauses);
+ currentAlterOps.checkMTMVAllow(alterOps);
}
// check cluster capacity and db quota, only need to check once.
@@ -225,9 +222,9 @@ public class Alter {
boolean needProcessOutsideTableLock = false;
BaseTableInfo oldBaseTableInfo = new BaseTableInfo(olapTable);
Optional<BaseTableInfo> newBaseTableInfo = Optional.empty();
- if (currentAlterOps.checkTableStoragePolicy(alterClauses)) {
+ if (currentAlterOps.checkTableStoragePolicy(alterOps)) {
String tableStoragePolicy = olapTable.getStoragePolicy();
- String currentStoragePolicy = currentAlterOps.getTableStoragePolicy(alterClauses);
+ String currentStoragePolicy = currentAlterOps.getTableStoragePolicy(alterOps);
// If the two policy has one same resource, then it's safe for the table to change policy
// There would only be the cooldown ttl or cooldown time would be affected
@@ -237,8 +234,8 @@ public class Alter {
for (Partition partition : olapTable.getAllPartitions()) {
if (Partition.PARTITION_INIT_VERSION < partition.getVisibleVersion()) {
throw new DdlException("Do not support alter table's storage policy , this table ["
- + olapTable.getName() + "] has storage policy " + tableStoragePolicy
- + ", the table need to be empty.");
+ + olapTable.getName() + "] has storage policy " + tableStoragePolicy
+ + ", the table need to be empty.");
}
}
}
@@ -259,47 +256,47 @@ public class Alter {
}
olapTable.setStoragePolicy(currentStoragePolicy);
needProcessOutsideTableLock = true;
- } else if (currentAlterOps.checkIsBeingSynced(alterClauses)) {
- olapTable.setIsBeingSynced(currentAlterOps.isBeingSynced(alterClauses));
+ } else if (currentAlterOps.checkIsBeingSynced(alterOps)) {
+ olapTable.setIsBeingSynced(currentAlterOps.isBeingSynced(alterOps));
needProcessOutsideTableLock = true;
- } else if (currentAlterOps.checkMinLoadReplicaNum(alterClauses)) {
- Preconditions.checkState(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
- processModifyMinLoadReplicaNum(db, olapTable, alterClause);
- } else if (currentAlterOps.checkBinlogConfigChange(alterClauses)) {
+ } else if (currentAlterOps.checkMinLoadReplicaNum(alterOps)) {
+ Preconditions.checkState(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
+ processModifyMinLoadReplicaNum(db, olapTable, alterOp);
+ } else if (currentAlterOps.checkBinlogConfigChange(alterOps)) {
if (!Config.enable_feature_binlog) {
throw new DdlException("Binlog feature is not enabled");
}
// TODO(Drogon): check error
- ((SchemaChangeHandler) schemaChangeHandler).updateBinlogConfig(db, olapTable, alterClauses);
+ ((SchemaChangeHandler) schemaChangeHandler).updateBinlogConfig(db, olapTable, alterOps);
} else if (currentAlterOps.hasSchemaChangeOp()) {
// schema change, or change properties that need schema change(dynamic partition, storage_medium...)
- schemaChangeHandler.process(sql, alterClauses, db, olapTable);
+ schemaChangeHandler.process(sql, alterOps, db, olapTable);
} else if (currentAlterOps.hasRollupOp()) {
- materializedViewHandler.process(alterClauses, db, olapTable);
+ materializedViewHandler.process(alterOps, db, olapTable);
} else if (currentAlterOps.hasPartitionOp()) {
- Preconditions.checkState(!alterClauses.isEmpty());
- for (AlterClause alterClause : alterClauses) {
+ Preconditions.checkState(!alterOps.isEmpty());
+ for (AlterOp alterOp : alterOps) {
olapTable.writeLockOrDdlException();
try {
- if (alterClause instanceof DropPartitionClause) {
- if (!((DropPartitionClause) alterClause).isTempPartition()) {
+ if (alterOp instanceof DropPartitionOp) {
+ if (!((DropPartitionOp) alterOp).isTempPartition()) {
DynamicPartitionUtil.checkAlterAllowed(olapTable);
}
- Env.getCurrentEnv().dropPartition(db, olapTable, ((DropPartitionClause) alterClause));
- } else if (alterClause instanceof ReplacePartitionClause) {
- Env.getCurrentEnv().replaceTempPartition(db, olapTable, (ReplacePartitionClause) alterClause);
- } else if (alterClause instanceof ModifyPartitionClause) {
- ModifyPartitionClause clause = ((ModifyPartitionClause) alterClause);
+ Env.getCurrentEnv().dropPartition(db, olapTable, ((DropPartitionOp) alterOp));
+ } else if (alterOp instanceof ReplacePartitionOp) {
+ Env.getCurrentEnv().replaceTempPartition(db, olapTable, (ReplacePartitionOp) alterOp);
+ } else if (alterOp instanceof ModifyPartitionOp) {
+ ModifyPartitionOp op = ((ModifyPartitionOp) alterOp);
// expand the partition names if it is 'Modify Partition(*)'
- if (clause.isNeedExpand()) {
- List<String> partitionNames = clause.getPartitionNames();
+ if (op.isNeedExpand()) {
+ List<String> partitionNames = op.getPartitionNames();
partitionNames.clear();
for (Partition partition : olapTable.getPartitions()) {
partitionNames.add(partition.getName());
}
}
- Map<String, String> properties = clause.getProperties();
+ Map<String, String> properties = op.getProperties();
if (properties.containsKey(PropertyAnalyzer.PROPERTIES_INMEMORY)) {
boolean isInMemory =
Boolean.parseBoolean(properties.get(PropertyAnalyzer.PROPERTIES_INMEMORY));
@@ -308,56 +305,56 @@ public class Alter {
}
needProcessOutsideTableLock = true;
} else {
- List<String> partitionNames = clause.getPartitionNames();
+ List<String> partitionNames = op.getPartitionNames();
if (!properties.containsKey(PropertyAnalyzer.PROPERTIES_STORAGE_POLICY)) {
modifyPartitionsProperty(db, olapTable, partitionNames, properties,
- clause.isTempPartition());
+ op.isTempPartition());
} else {
needProcessOutsideTableLock = true;
}
}
- } else if (alterClause instanceof DropPartitionFromIndexClause) {
+ } else if (alterOp instanceof DropPartitionFromIndexOp) {
// do nothing
- } else if (alterClause instanceof AddPartitionClause
- || alterClause instanceof AddPartitionLikeClause
- || alterClause instanceof AlterMultiPartitionClause) {
+ } else if (alterOp instanceof AddPartitionOp
+ || alterOp instanceof AddPartitionLikeOp
+ || alterOp instanceof AlterMultiPartitionOp) {
needProcessOutsideTableLock = true;
} else {
- throw new DdlException("Invalid alter operation: " + alterClause.getOpType());
+ throw new DdlException("Invalid alter operation: " + alterOp.getOpType());
}
} finally {
olapTable.writeUnlock();
}
}
} else if (currentAlterOps.hasRenameOp()) {
- processRename(db, olapTable, alterClauses);
+ processRename(db, olapTable, alterOps);
newBaseTableInfo = Optional.of(new BaseTableInfo(olapTable));
} else if (currentAlterOps.hasReplaceTableOp()) {
- processReplaceTable(db, olapTable, alterClauses);
+ processReplaceTable(db, olapTable, alterOps);
// after replace table, olapTable may still be old name, so need set it to new name
- ReplaceTableClause clause = (ReplaceTableClause) alterClauses.get(0);
- String newTblName = clause.getTblName();
+ ReplaceTableOp op = (ReplaceTableOp) alterOps.get(0);
+ String newTblName = op.getTblName();
newBaseTableInfo = Optional.of(new BaseTableInfo(olapTable));
newBaseTableInfo.get().setTableName(newTblName);
} else if (currentAlterOps.contains(AlterOpType.MODIFY_TABLE_PROPERTY_SYNC)) {
needProcessOutsideTableLock = true;
} else if (currentAlterOps.contains(AlterOpType.MODIFY_DISTRIBUTION)) {
- Preconditions.checkState(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
+ Preconditions.checkState(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
Env.getCurrentEnv()
- .modifyDefaultDistributionBucketNum(db, olapTable, (ModifyDistributionClause) alterClause);
+ .modifyDefaultDistributionBucketNum(db, olapTable, (ModifyDistributionOp) alterOp);
} else if (currentAlterOps.contains(AlterOpType.MODIFY_COLUMN_COMMENT)) {
- processModifyColumnComment(db, olapTable, alterClauses);
+ processModifyColumnComment(db, olapTable, alterOps);
} else if (currentAlterOps.contains(AlterOpType.MODIFY_TABLE_COMMENT)) {
- Preconditions.checkState(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
- processModifyTableComment(db, olapTable, alterClause);
+ Preconditions.checkState(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
+ processModifyTableComment(db, olapTable, alterOp);
} else {
throw new DdlException("Invalid alter operations: " + currentAlterOps);
}
- if (needChangeMTMVState(alterClauses)) {
+ if (needChangeMTMVState(alterOps)) {
Env.getCurrentEnv().getMtmvService()
- .alterTable(oldBaseTableInfo, newBaseTableInfo, currentAlterOps.hasReplaceTableOp());
+ .alterTable(oldBaseTableInfo, newBaseTableInfo, currentAlterOps.hasReplaceTableOp());
}
olapTable.writeLock();
@@ -370,11 +367,11 @@ public class Alter {
return needProcessOutsideTableLock;
}
- private void setExternalTableAutoAnalyzePolicy(ExternalTable table, List<AlterClause> alterClauses) {
- Preconditions.checkState(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
- Preconditions.checkState(alterClause instanceof ModifyTablePropertiesClause);
- Map<String, String> properties = alterClause.getProperties();
+ private void setExternalTableAutoAnalyzePolicy(ExternalTable table, List<AlterOp> alterOps) {
+ Preconditions.checkState(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
+ Preconditions.checkState(alterOp instanceof ModifyTablePropertiesOp);
+ Map<String, String> properties = alterOp.getProperties();
Preconditions.checkState(properties.size() == 1);
Preconditions.checkState(properties.containsKey(PropertyAnalyzer.PROPERTIES_AUTO_ANALYZE_POLICY));
String value = properties.get(PropertyAnalyzer.PROPERTIES_AUTO_ANALYZE_POLICY);
@@ -389,68 +386,63 @@ public class Alter {
}
private void processAlterTableForExternalTable(
- ExternalTable table,
- List<AlterClause> alterClauses) throws UserException {
- for (AlterClause alterClause : alterClauses) {
- if (alterClause instanceof ModifyTablePropertiesClause) {
- setExternalTableAutoAnalyzePolicy(table, alterClauses);
- } else if (alterClause instanceof CreateOrReplaceBranchClause) {
+ ExternalTable table, List<AlterOp> alterOps) throws UserException {
+ for (AlterOp alterOp : alterOps) {
+ if (alterOp instanceof ModifyTablePropertiesOp) {
+ setExternalTableAutoAnalyzePolicy(table, alterOps);
+ } else if (alterOp instanceof CreateOrReplaceBranchOp) {
table.getCatalog().createOrReplaceBranch(
- table,
- ((CreateOrReplaceBranchClause) alterClause).getBranchInfo());
- } else if (alterClause instanceof CreateOrReplaceTagClause) {
+ table, ((CreateOrReplaceBranchOp) alterOp).getBranchInfo());
+ } else if (alterOp instanceof CreateOrReplaceTagOp) {
table.getCatalog().createOrReplaceTag(
- table,
- ((CreateOrReplaceTagClause) alterClause).getTagInfo());
- } else if (alterClause instanceof DropBranchClause) {
+ table, ((CreateOrReplaceTagOp) alterOp).getTagInfo());
+ } else if (alterOp instanceof DropBranchOp) {
table.getCatalog().dropBranch(
- table,
- ((DropBranchClause) alterClause).getDropBranchInfo());
- } else if (alterClause instanceof DropTagClause) {
+ table, ((DropBranchOp) alterOp).getDropBranchInfo());
+ } else if (alterOp instanceof DropTagOp) {
table.getCatalog().dropTag(
- table,
- ((DropTagClause) alterClause).getDropTagInfo());
- } else if (alterClause instanceof TableRenameClause) {
- TableRenameClause tableRename = (TableRenameClause) alterClause;
+ table, ((DropTagOp) alterOp).getDropTagInfo());
+ } else if (alterOp instanceof RenameTableOp) {
+ RenameTableOp renameTableOp = (RenameTableOp) alterOp;
table.getCatalog().renameTable(
- table.getDbName(), table.getName(), tableRename.getNewTableName());
- } else if (alterClause instanceof AddColumnClause) {
- AddColumnClause addColumn = (AddColumnClause) alterClause;
+ table.getDbName(), table.getName(), renameTableOp.getNewTableName());
+ } else if (alterOp instanceof AddColumnOp) {
+ AddColumnOp addColumn = (AddColumnOp) alterOp;
table.getCatalog().addColumn(table, addColumn.getColumn(), addColumn.getColPos());
- } else if (alterClause instanceof AddColumnsClause) {
- AddColumnsClause addColumns = (AddColumnsClause) alterClause;
+ } else if (alterOp instanceof AddColumnsOp) {
+ AddColumnsOp addColumns = (AddColumnsOp) alterOp;
table.getCatalog().addColumns(table, addColumns.getColumns());
- } else if (alterClause instanceof DropColumnClause) {
- DropColumnClause dropColumn = (DropColumnClause) alterClause;
+ } else if (alterOp instanceof DropColumnOp) {
+ DropColumnOp dropColumn = (DropColumnOp) alterOp;
table.getCatalog().dropColumn(table, dropColumn.getColName());
- } else if (alterClause instanceof ColumnRenameClause) {
- ColumnRenameClause columnRename = (ColumnRenameClause) alterClause;
+ } else if (alterOp instanceof RenameColumnOp) {
+ RenameColumnOp columnRename = (RenameColumnOp) alterOp;
table.getCatalog().renameColumn(
table, columnRename.getColName(), columnRename.getNewColName());
- } else if (alterClause instanceof ModifyColumnClause) {
- ModifyColumnClause modifyColumn = (ModifyColumnClause) alterClause;
+ } else if (alterOp instanceof ModifyColumnOp) {
+ ModifyColumnOp modifyColumn = (ModifyColumnOp) alterOp;
table.getCatalog().modifyColumn(table, modifyColumn.getColumn(), modifyColumn.getColPos());
- } else if (alterClause instanceof ReorderColumnsClause) {
- ReorderColumnsClause reorderColumns = (ReorderColumnsClause) alterClause;
+ } else if (alterOp instanceof ReorderColumnsOp) {
+ ReorderColumnsOp reorderColumns = (ReorderColumnsOp) alterOp;
table.getCatalog().reorderColumns(table, reorderColumns.getColumnsByPos());
- } else if (alterClause instanceof AddPartitionFieldClause) {
- AddPartitionFieldClause addPartitionField = (AddPartitionFieldClause) alterClause;
+ } else if (alterOp instanceof AddPartitionFieldOp) {
+ AddPartitionFieldOp addPartitionField = (AddPartitionFieldOp) alterOp;
if (table instanceof IcebergExternalTable) {
((IcebergExternalCatalog) table.getCatalog()).addPartitionField(
(IcebergExternalTable) table, addPartitionField);
} else {
throw new UserException("ADD PARTITION KEY is only supported for Iceberg tables");
}
- } else if (alterClause instanceof DropPartitionFieldClause) {
- DropPartitionFieldClause dropPartitionField = (DropPartitionFieldClause) alterClause;
+ } else if (alterOp instanceof DropPartitionFieldOp) {
+ DropPartitionFieldOp dropPartitionField = (DropPartitionFieldOp) alterOp;
if (table instanceof IcebergExternalTable) {
((IcebergExternalCatalog) table.getCatalog()).dropPartitionField(
(IcebergExternalTable) table, dropPartitionField);
} else {
throw new UserException("DROP PARTITION KEY is only supported for Iceberg tables");
}
- } else if (alterClause instanceof ReplacePartitionFieldClause) {
- ReplacePartitionFieldClause replacePartitionField = (ReplacePartitionFieldClause) alterClause;
+ } else if (alterOp instanceof ReplacePartitionFieldOp) {
+ ReplacePartitionFieldOp replacePartitionField = (ReplacePartitionFieldOp) alterOp;
if (table instanceof IcebergExternalTable) {
((IcebergExternalCatalog) table.getCatalog()).replacePartitionField(
(IcebergExternalTable) table, replacePartitionField);
@@ -458,25 +450,25 @@ public class Alter {
throw new UserException("REPLACE PARTITION KEY is only supported for Iceberg tables");
}
} else {
- throw new UserException("Invalid alter operations for external table: " + alterClauses);
+ throw new UserException("Invalid alter operations for external table: " + alterOps);
}
}
}
- private boolean needChangeMTMVState(List<AlterClause> alterClauses) {
- for (AlterClause alterClause : alterClauses) {
- if (alterClause.needChangeMTMVState()) {
+ private boolean needChangeMTMVState(List<AlterOp> alterOps) {
+ for (AlterOp alterOp : alterOps) {
+ if (alterOp.needChangeMTMVState()) {
return true;
}
}
return false;
}
- private void processModifyTableComment(Database db, OlapTable tbl, AlterClause alterClause)
+ private void processModifyTableComment(Database db, OlapTable tbl, AlterOp alterOp)
throws DdlException {
tbl.writeLockOrDdlException();
try {
- ModifyTableCommentClause clause = (ModifyTableCommentClause) alterClause;
+ ModifyTableCommentOp clause = (ModifyTableCommentOp) alterOp;
tbl.setComment(clause.getComment());
// log
ModifyCommentOperationLog op = ModifyCommentOperationLog
@@ -487,23 +479,23 @@ public class Alter {
}
}
- private void processModifyColumnComment(Database db, OlapTable tbl, List<AlterClause> alterClauses)
+ private void processModifyColumnComment(Database db, OlapTable tbl, List<AlterOp> alterOps)
throws DdlException {
tbl.writeLockOrDdlException();
try {
// check first
Map<String, String> colToComment = Maps.newHashMap();
- for (AlterClause alterClause : alterClauses) {
- Preconditions.checkState(alterClause instanceof ModifyColumnCommentClause);
- ModifyColumnCommentClause clause = (ModifyColumnCommentClause) alterClause;
- String colName = clause.getColName();
+ for (AlterOp alterOp : alterOps) {
+ Preconditions.checkState(alterOp instanceof ModifyColumnCommentOp);
+ ModifyColumnCommentOp op = (ModifyColumnCommentOp) alterOp;
+ String colName = op.getColName();
if (tbl.getColumn(colName) == null) {
throw new DdlException("Unknown column: " + colName);
}
if (colToComment.containsKey(colName)) {
throw new DdlException("Duplicate column: " + colName);
}
- colToComment.put(colName, clause.getComment());
+ colToComment.put(colName, op.getComment());
}
// modify comment
@@ -547,33 +539,32 @@ public class Alter {
private void processAlterExternalTable(AlterTableCommand command, Table externalTable, Database db)
throws UserException {
- List<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.addAll(command.getOps());
- processAlterExternalTableInternal(alterClauses, externalTable, db);
+ List<AlterOp> alterOps = new ArrayList<>(command.getOps());
+ processAlterExternalTableInternal(alterOps, externalTable, db);
}
- private void processAlterExternalTableInternal(List<AlterClause> alterClauses, Table externalTable, Database db)
+ private void processAlterExternalTableInternal(List<AlterOp> alterOps, Table externalTable, Database db)
throws UserException {
// check conflict alter ops first
AlterOperations currentAlterOps = new AlterOperations();
- currentAlterOps.checkConflict(alterClauses);
+ currentAlterOps.checkConflict(alterOps);
if (currentAlterOps.hasRenameOp()) {
- processRename(db, externalTable, alterClauses);
+ processRename(db, externalTable, alterOps);
} else if (currentAlterOps.hasSchemaChangeOp()) {
- schemaChangeHandler.processExternalTable(alterClauses, db, externalTable);
+ schemaChangeHandler.processExternalTable(alterOps, db, externalTable);
} else if (currentAlterOps.contains(AlterOpType.MODIFY_ENGINE)) {
- ModifyEngineClause modifyEngineClause = (ModifyEngineClause) alterClauses.get(0);
- processModifyEngine(db, externalTable, modifyEngineClause);
+ ModifyEngineOp modifyEngineOp = (ModifyEngineOp) alterOps.get(0);
+ processModifyEngine(db, externalTable, modifyEngineOp);
}
}
- public void processModifyEngine(Database db, Table externalTable, ModifyEngineClause clause) throws DdlException {
+ public void processModifyEngine(Database db, Table externalTable, ModifyEngineOp op) throws DdlException {
externalTable.writeLockOrDdlException();
try {
if (externalTable.getType() != TableType.MYSQL) {
throw new DdlException("Only support modify table engine from MySQL to ODBC");
}
- processModifyEngineInternal(db, externalTable, clause.getProperties(), false);
+ processModifyEngineInternal(db, externalTable, op.getProperties(), false);
} finally {
externalTable.writeUnlock();
}
@@ -645,14 +636,14 @@ public class Alter {
.getCatalogOrDdlException(ctlName)
.getDbOrDdlException(dbName);
TableIf tableIf = dbIf.getTableOrDdlException(tableName);
- List<AlterClause> alterClauses = Lists.newArrayList();
+ List<AlterOp> alterOps = Lists.newArrayList();
// some operations will take long time to process, need to be done outside the table lock
boolean needProcessOutsideTableLock = false;
switch (tableIf.getType()) {
case MATERIALIZED_VIEW:
case OLAP:
OlapTable olapTable = (OlapTable) tableIf;
- needProcessOutsideTableLock = processAlterOlapTable(command, olapTable, alterClauses, (Database) dbIf);
+ needProcessOutsideTableLock = processAlterOlapTable(command, olapTable, alterOps, (Database) dbIf);
break;
case ODBC:
case JDBC:
@@ -668,8 +659,8 @@ public class Alter {
case MAX_COMPUTE_EXTERNAL_TABLE:
case HUDI_EXTERNAL_TABLE:
case TRINO_CONNECTOR_EXTERNAL_TABLE:
- alterClauses.addAll(command.getOps());
- processAlterTableForExternalTable((ExternalTable) tableIf, alterClauses);
+ alterOps.addAll(command.getOps());
+ processAlterTableForExternalTable((ExternalTable) tableIf, alterOps);
return;
default:
throw new DdlException("Do not support alter "
@@ -679,22 +670,22 @@ public class Alter {
Database db = (Database) dbIf;
// the following ops should done outside table lock. because it contain synchronized create operation
if (needProcessOutsideTableLock) {
- Preconditions.checkState(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
- if (alterClause instanceof AddPartitionClause) {
- if (!((AddPartitionClause) alterClause).isTempPartition()) {
+ Preconditions.checkState(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
+ if (alterOp instanceof AddPartitionOp) {
+ if (!((AddPartitionOp) alterOp).isTempPartition()) {
DynamicPartitionUtil.checkAlterAllowed(
(OlapTable) db.getTableOrMetaException(tableName, TableType.OLAP));
}
- Env.getCurrentEnv().addPartition(db, tableName, (AddPartitionClause) alterClause, false, 0, true);
- } else if (alterClause instanceof AddPartitionLikeClause) {
- if (!((AddPartitionLikeClause) alterClause).getIsTempPartition()) {
+ Env.getCurrentEnv().addPartition(db, tableName, (AddPartitionOp) alterOp, false, 0, true);
+ } else if (alterOp instanceof AddPartitionLikeOp) {
+ if (!((AddPartitionLikeOp) alterOp).getTempPartition()) {
DynamicPartitionUtil.checkAlterAllowed(
(OlapTable) db.getTableOrMetaException(tableName, TableType.OLAP));
}
- Env.getCurrentEnv().addPartitionLike(db, tableName, (AddPartitionLikeClause) alterClause);
- } else if (alterClause instanceof ModifyPartitionClause) {
- ModifyPartitionClause clause = ((ModifyPartitionClause) alterClause);
+ Env.getCurrentEnv().addPartitionLike(db, tableName, (AddPartitionLikeOp) alterOp);
+ } else if (alterOp instanceof ModifyPartitionOp) {
+ ModifyPartitionOp clause = ((ModifyPartitionOp) alterOp);
Map<String, String> properties = clause.getProperties();
List<String> partitionNames = clause.getPartitionNames();
((SchemaChangeHandler) schemaChangeHandler).updatePartitionsProperties(
@@ -706,25 +697,25 @@ public class Alter {
} finally {
olapTable.writeUnlock();
}
- } else if (alterClause instanceof ModifyTablePropertiesClause) {
- Map<String, String> properties = alterClause.getProperties();
+ } else if (alterOp instanceof ModifyTablePropertiesOp) {
+ Map<String, String> properties = alterOp.getProperties();
((SchemaChangeHandler) schemaChangeHandler).updateTableProperties(db, tableName, properties);
- } else if (alterClause instanceof AlterMultiPartitionClause) {
- if (!((AlterMultiPartitionClause) alterClause).isTempPartition()) {
+ } else if (alterOp instanceof AlterMultiPartitionOp) {
+ if (!((AlterMultiPartitionOp) alterOp).isTempPartition()) {
DynamicPartitionUtil.checkAlterAllowed(
(OlapTable) db.getTableOrMetaException(tableName, TableType.OLAP));
}
- Env.getCurrentEnv().addMultiPartitions(db, tableName, (AlterMultiPartitionClause) alterClause);
+ Env.getCurrentEnv().addMultiPartitions(db, tableName, (AlterMultiPartitionOp) alterOp);
} else {
- throw new DdlException("Invalid alter operation: " + alterClause.getOpType());
+ throw new DdlException("Invalid alter operation: " + alterOp.getOpType());
}
}
}
// entry of processing replace table
- private void processReplaceTable(Database db, OlapTable origTable, List<AlterClause> alterClauses)
+ private void processReplaceTable(Database db, OlapTable origTable, List<AlterOp> alterOps)
throws UserException {
- ReplaceTableClause clause = (ReplaceTableClause) alterClauses.get(0);
+ ReplaceTableOp clause = (ReplaceTableOp) alterOps.get(0);
String newTblName = clause.getTblName();
Table newTable = db.getTableOrMetaException(newTblName);
if (newTable.getType() == TableType.MATERIALIZED_VIEW) {
@@ -918,20 +909,20 @@ public class Alter {
systemHandler.processForNereids(Collections.singletonList(command), null, null);
}
- private void processRename(Database db, OlapTable table, List<AlterClause> alterClauses) throws DdlException {
- for (AlterClause alterClause : alterClauses) {
- if (alterClause instanceof TableRenameClause) {
- Env.getCurrentEnv().renameTable(db, table, (TableRenameClause) alterClause);
+ private void processRename(Database db, OlapTable table, List<AlterOp> alterOps) throws DdlException {
+ for (AlterOp alterOp : alterOps) {
+ if (alterOp instanceof RenameTableOp) {
+ Env.getCurrentEnv().renameTable(db, table, (RenameTableOp) alterOp);
break;
} else {
- if (alterClause instanceof RollupRenameClause) {
- Env.getCurrentEnv().renameRollup(db, table, (RollupRenameClause) alterClause);
+ if (alterOp instanceof RenameRollupOp) {
+ Env.getCurrentEnv().renameRollup(db, table, (RenameRollupOp) alterOp);
break;
- } else if (alterClause instanceof PartitionRenameClause) {
- Env.getCurrentEnv().renamePartition(db, table, (PartitionRenameClause) alterClause);
+ } else if (alterOp instanceof RenamePartitionOp) {
+ Env.getCurrentEnv().renamePartition(db, table, (RenamePartitionOp) alterOp);
break;
- } else if (alterClause instanceof ColumnRenameClause) {
- Env.getCurrentEnv().renameColumn(db, table, (ColumnRenameClause) alterClause);
+ } else if (alterOp instanceof RenameColumnOp) {
+ Env.getCurrentEnv().renameColumn(db, table, (RenameColumnOp) alterOp);
break;
} else {
Preconditions.checkState(false);
@@ -940,10 +931,10 @@ public class Alter {
}
}
- private void processRename(Database db, Table table, List<AlterClause> alterClauses) throws DdlException {
- for (AlterClause alterClause : alterClauses) {
- if (alterClause instanceof TableRenameClause) {
- Env.getCurrentEnv().renameTable(db, table, (TableRenameClause) alterClause);
+ private void processRename(Database db, Table table, List<AlterOp> alterOps) throws DdlException {
+ for (AlterOp alterOp : alterOps) {
+ if (alterOp instanceof RenameTableOp) {
+ Env.getCurrentEnv().renameTable(db, table, (RenameTableOp) alterOp);
break;
} else {
Preconditions.checkState(false);
@@ -1212,9 +1203,9 @@ public class Alter {
}
}
- private void processModifyMinLoadReplicaNum(Database db, OlapTable olapTable, AlterClause alterClause)
+ private void processModifyMinLoadReplicaNum(Database db, OlapTable olapTable, AlterOp alterOp)
throws DdlException {
- Map<String, String> properties = alterClause.getProperties();
+ Map<String, String> properties = alterOp.getProperties();
short minLoadReplicaNum = -1;
try {
minLoadReplicaNum = PropertyAnalyzer.analyzeMinLoadReplicaNum(properties);
@@ -1224,13 +1215,13 @@ public class Alter {
ReplicaAllocation replicaAlloc = olapTable.getDefaultReplicaAllocation();
if (minLoadReplicaNum > replicaAlloc.getTotalReplicaNum()) {
throw new DdlException("Failed to check min load replica num [" + minLoadReplicaNum + "] <= "
- + "default replica num [" + replicaAlloc.getTotalReplicaNum() + "]");
+ + "default replica num [" + replicaAlloc.getTotalReplicaNum() + "]");
}
if (olapTable.dynamicPartitionExists()) {
replicaAlloc = olapTable.getTableProperty().getDynamicPartitionProperty().getReplicaAllocation();
if (!replicaAlloc.isNotSet() && minLoadReplicaNum > replicaAlloc.getTotalReplicaNum()) {
throw new DdlException("Failed to check min load replica num [" + minLoadReplicaNum + "] <= "
- + "dynamic partition replica num [" + replicaAlloc.getTotalReplicaNum() + "]");
+ + "dynamic partition replica num [" + replicaAlloc.getTotalReplicaNum() + "]");
}
}
properties.put(PropertyAnalyzer.PROPERTIES_MIN_LOAD_REPLICA_NUM, Short.toString(minLoadReplicaNum));
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/AlterHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/AlterHandler.java
index a938640baa6..798bfdbdacb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/AlterHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/AlterHandler.java
@@ -17,7 +17,6 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AlterClause;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.MaterializedIndex;
@@ -35,6 +34,7 @@ import org.apache.doris.common.UserException;
import org.apache.doris.common.util.MasterDaemon;
import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.nereids.trees.plans.commands.AlterCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
import org.apache.doris.persist.RemoveAlterJobV2OperationLog;
import org.apache.doris.persist.ReplicaPersistInfo;
import org.apache.doris.task.AlterReplicaTask;
@@ -174,7 +174,7 @@ public abstract class AlterHandler extends MasterDaemon {
/*
* entry function. handle alter ops
*/
- public abstract void process(String rawSql, List<AlterClause> alterClauses, Database db,
+ public abstract void process(String rawSql, List<AlterOp> alterOps, Database db,
OlapTable olapTable)
throws UserException;
@@ -185,9 +185,9 @@ public abstract class AlterHandler extends MasterDaemon {
/*
* entry function. handle alter ops
*/
- public void process(List<AlterClause> alterClauses, Database db, OlapTable olapTable)
+ public void process(List<AlterOp> alterOps, Database db, OlapTable olapTable)
throws UserException {
- process("", alterClauses, db, olapTable);
+ process("", alterOps, db, olapTable);
}
public void processForNereids(List<AlterCommand> alterSystemCommands, Database db, OlapTable olapTable)
@@ -198,7 +198,7 @@ public abstract class AlterHandler extends MasterDaemon {
/*
* entry function. handle alter ops for external table
*/
- public void processExternalTable(List<AlterClause> alterClauses, Database db, Table externalTable)
+ public void processExternalTable(List<AlterOp> alterOps, Database db, Table externalTable)
throws UserException {}
/*
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/AlterOperations.java b/fe/fe-core/src/main/java/org/apache/doris/alter/AlterOperations.java
index ba5175b6fa9..371d04c464c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/AlterOperations.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/AlterOperations.java
@@ -17,10 +17,10 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.ModifyTablePropertiesClause;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.util.PropertyAnalyzer;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyTablePropertiesOp;
import com.google.common.base.Joiner;
@@ -41,16 +41,16 @@ public class AlterOperations {
return currentOps;
}
- // check the conflicts of the given list of alter clauses
- public void checkConflict(List<AlterClause> alterClauses) throws DdlException {
- for (AlterClause alterClause : alterClauses) {
- checkOp(alterClause.getOpType());
+ // check the conflicts of the given list of alter ops
+ public void checkConflict(List<AlterOp> alterTableOps) throws DdlException {
+ for (AlterOp alterTableOp : alterTableOps) {
+ checkOp(alterTableOp.getOpType());
}
}
- public void checkMTMVAllow(List<AlterClause> alterClauses) throws DdlException {
- for (AlterClause alterClause : alterClauses) {
- if (!(alterClause.allowOpMTMV())) {
+ public void checkMTMVAllow(List<AlterOp> alterOps) throws DdlException {
+ for (AlterOp alterOp : alterOps) {
+ if (!alterOp.allowOpMTMV()) {
throw new DdlException("Not allowed to perform current operation on async materialized view");
}
}
@@ -74,43 +74,43 @@ public class AlterOperations {
|| currentOps.contains(AlterOpType.MODIFY_PARTITION);
}
- public boolean checkTableStoragePolicy(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
+ public boolean checkTableStoragePolicy(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
).anyMatch(clause -> clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_STORAGE_POLICY));
}
- public String getTableStoragePolicy(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
- ).map(c -> ((ModifyTablePropertiesClause) c).getStoragePolicy()).findFirst().orElse("");
+ public String getTableStoragePolicy(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
+ ).map(c -> ((ModifyTablePropertiesOp) c).getStoragePolicy()).findFirst().orElse("");
}
- public boolean checkIsBeingSynced(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
+ public boolean checkIsBeingSynced(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
).anyMatch(clause -> clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_IS_BEING_SYNCED));
}
- public boolean checkMinLoadReplicaNum(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
+ public boolean checkMinLoadReplicaNum(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
).anyMatch(clause -> clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_MIN_LOAD_REPLICA_NUM));
}
- public boolean checkBinlogConfigChange(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
+ public boolean checkBinlogConfigChange(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
).anyMatch(clause -> clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_BINLOG_ENABLE)
|| clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_BINLOG_TTL_SECONDS)
|| clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_BINLOG_MAX_BYTES)
|| clause.getProperties().containsKey(PropertyAnalyzer.PROPERTIES_BINLOG_MAX_HISTORY_NUMS));
}
- public boolean isBeingSynced(List<AlterClause> alterClauses) {
- return alterClauses.stream().filter(clause ->
- clause instanceof ModifyTablePropertiesClause
- ).map(c -> ((ModifyTablePropertiesClause) c).isBeingSynced()).findFirst().orElse(false);
+ public boolean isBeingSynced(List<AlterOp> alterOps) {
+ return alterOps.stream().filter(tableOp ->
+ tableOp instanceof ModifyTablePropertiesOp
+ ).map(c -> ((ModifyTablePropertiesOp) c).isBeingSynced()).findFirst().orElse(false);
}
// MODIFY_TABLE_PROPERTY is also processed by SchemaChangeHandler
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
index c9764681028..81a541c334c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java
@@ -17,10 +17,7 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AddRollupClause;
-import org.apache.doris.analysis.AlterClause;
import org.apache.doris.analysis.CastExpr;
-import org.apache.doris.analysis.DropRollupClause;
import org.apache.doris.analysis.MVColumnItem;
import org.apache.doris.analysis.SlotRef;
import org.apache.doris.catalog.AggregateType;
@@ -59,6 +56,9 @@ import org.apache.doris.nereids.trees.plans.commands.AlterCommand;
import org.apache.doris.nereids.trees.plans.commands.CancelAlterTableCommand;
import org.apache.doris.nereids.trees.plans.commands.CreateMaterializedViewCommand;
import org.apache.doris.nereids.trees.plans.commands.DropMaterializedViewCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AddRollupOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropRollupOp;
import org.apache.doris.persist.BatchDropInfo;
import org.apache.doris.persist.DropInfo;
import org.apache.doris.persist.EditLog;
@@ -261,13 +261,13 @@ public class MaterializedViewHandler extends AlterHandler {
* Step1.1: base table validation: the status of base table and partition could be NORMAL.
* Step1.2: rollup validation: the name and columns of rollup is checked.
* Step2: create rollup job
- * @param alterClauses
+ * @param alterOps
* @param db
* @param olapTable
* @throws DdlException
* @throws AnalysisException
*/
- public void processBatchAddRollup(String rawSql, List<AlterClause> alterClauses, Database db, OlapTable olapTable)
+ public void processBatchAddRollup(String rawSql, List<AlterOp> alterOps, Database db, OlapTable olapTable)
throws DdlException, AnalysisException {
checkReplicaCount(olapTable);
@@ -286,27 +286,27 @@ public class MaterializedViewHandler extends AlterHandler {
}
// 1 check and make rollup job
- for (AlterClause alterClause : alterClauses) {
- AddRollupClause addRollupClause = (AddRollupClause) alterClause;
+ for (AlterOp alterOp : alterOps) {
+ AddRollupOp addRollupOp = (AddRollupOp) alterOp;
// step 1 check whether current alter is change storage format
- String rollupIndexName = addRollupClause.getRollupName();
+ String rollupIndexName = addRollupOp.getRollupName();
boolean changeStorageFormat = false;
if (rollupIndexName.equalsIgnoreCase(olapTable.getName())) {
// for upgrade test to create segment v2 rollup index by using the sql:
// alter table table_name add rollup table_name (columns) properties ("storage_format" = "v2");
- Map<String, String> properties = addRollupClause.getProperties();
+ Map<String, String> properties = addRollupOp.getProperties();
if (properties == null || !properties.containsKey(PropertyAnalyzer.PROPERTIES_STORAGE_FORMAT)
|| !properties.get(PropertyAnalyzer.PROPERTIES_STORAGE_FORMAT).equalsIgnoreCase("v2")) {
throw new DdlException("Table[" + olapTable.getName() + "] can not "
- + "add segment v2 rollup index without setting storage format to v2.");
+ + "add segment v2 rollup index without setting storage format to v2.");
}
rollupIndexName = NEW_STORAGE_FORMAT_INDEX_NAME_PREFIX + olapTable.getName();
changeStorageFormat = true;
}
// get base index schema
- String baseIndexName = addRollupClause.getBaseRollupName();
+ String baseIndexName = addRollupOp.getBaseRollupName();
if (baseIndexName == null) {
// use table name as base table name
baseIndexName = olapTable.getName();
@@ -318,15 +318,15 @@ public class MaterializedViewHandler extends AlterHandler {
// step 2.2 check rollup schema
List<Column> rollupSchema = checkAndPrepareMaterializedView(
- addRollupClause, olapTable, baseIndexId, changeStorageFormat);
+ addRollupOp, olapTable, baseIndexId, changeStorageFormat);
// step 3 create rollup job
RollupJobV2 alterJobV2 =
createMaterializedViewJob(rawSql, rollupIndexName, baseIndexName, rollupSchema, null,
- addRollupClause.getProperties(), olapTable, db, baseIndexId, olapTable.getKeysType(),
- null);
+ addRollupOp.getProperties(), olapTable, db, baseIndexId, olapTable.getKeysType(),
+ null);
- rollupNameJobMap.put(addRollupClause.getRollupName(), alterJobV2);
+ rollupNameJobMap.put(addRollupOp.getRollupName(), alterJobV2);
logJobIdSet.add(alterJobV2.getJobId());
}
@@ -673,14 +673,14 @@ public class MaterializedViewHandler extends AlterHandler {
return newMVColumns;
}
- public List<Column> checkAndPrepareMaterializedView(AddRollupClause addRollupClause, OlapTable olapTable,
- long baseIndexId, boolean changeStorageFormat)
+ public List<Column> checkAndPrepareMaterializedView(AddRollupOp addRollupOp, OlapTable olapTable,
+ long baseIndexId, boolean changeStorageFormat)
throws DdlException {
if (olapTable.getRowStoreCol() != null) {
throw new DdlException("RowStore table can't create materialized view.");
}
- String rollupIndexName = addRollupClause.getRollupName();
- List<String> rollupColumnNames = addRollupClause.getColumnNames();
+ String rollupIndexName = addRollupOp.getRollupName();
+ List<String> rollupColumnNames = addRollupOp.getColumnNames();
if (changeStorageFormat) {
String newStorageFormatIndexName = NEW_STORAGE_FORMAT_INDEX_NAME_PREFIX + olapTable.getName();
rollupIndexName = newStorageFormatIndexName;
@@ -728,7 +728,7 @@ public class MaterializedViewHandler extends AlterHandler {
if (baseColumn.isKey()) {
if (baseColumn.getType().isFloatingPointType()) {
throw new DdlException(
- "Do not support float/double type on group by, you can change it to decimal");
+ "Do not support float/double type on group by, you can change it to decimal");
}
keysNumOfRollup += 1;
hasKey = true;
@@ -777,12 +777,12 @@ public class MaterializedViewHandler extends AlterHandler {
}
if (allKeysMatch) {
throw new DdlException("Rollup contains all keys in base table with same order for "
- + "aggregation or unique table is useless.");
+ + "aggregation or unique table is useless.");
}
}
} else if (KeysType.DUP_KEYS == keysType) {
// supplement the duplicate key
- if (addRollupClause.getDupKeys() == null || addRollupClause.getDupKeys().isEmpty()) {
+ if (addRollupOp.getDupKeys() == null || addRollupOp.getDupKeys().isEmpty()) {
// check the column meta
boolean allColumnsMatch = true;
for (int i = 0; i < rollupColumnNames.size(); i++) {
@@ -834,7 +834,7 @@ public class MaterializedViewHandler extends AlterHandler {
}
if (allColumnsMatch) {
throw new DdlException("Rollup contain the columns of the base table in prefix order for "
- + "duplicate table is useless.");
+ + "duplicate table is useless.");
}
} else {
/*
@@ -854,7 +854,7 @@ public class MaterializedViewHandler extends AlterHandler {
* 1. (k1) dup key (k1)
*/
// user specify the duplicate keys for rollup index
- List<String> dupKeys = addRollupClause.getDupKeys();
+ List<String> dupKeys = addRollupOp.getDupKeys();
if (dupKeys.size() > rollupColumnNames.size()) {
throw new DdlException("Num of duplicate keys should less than or equal to num of rollup columns.");
}
@@ -897,7 +897,7 @@ public class MaterializedViewHandler extends AlterHandler {
}
if (allColumnsMatch) {
throw new DdlException("Rollup contain the columns of the base table in prefix order for "
- + "duplicate table is useless.");
+ + "duplicate table is useless.");
}
}
}
@@ -944,7 +944,7 @@ public class MaterializedViewHandler extends AlterHandler {
return baseIndexId;
}
- public void processBatchDropRollup(List<AlterClause> dropRollupClauses, Database db, OlapTable olapTable)
+ public void processBatchDropRollup(List<AlterOp> alterOps, Database db, OlapTable olapTable)
throws DdlException, MetaNotFoundException {
List<Long> deleteIndexList = null;
olapTable.writeLockOrDdlException();
@@ -955,16 +955,16 @@ public class MaterializedViewHandler extends AlterHandler {
}
// check drop rollup index operation
- for (AlterClause alterClause : dropRollupClauses) {
- DropRollupClause dropRollupClause = (DropRollupClause) alterClause;
- checkDropMaterializedView(dropRollupClause.getRollupName(), olapTable);
+ for (AlterOp alterOp : alterOps) {
+ DropRollupOp dropRollupOp = (DropRollupOp) alterOp;
+ checkDropMaterializedView(dropRollupOp.getRollupName(), olapTable);
}
// drop data in memory
Map<Long, String> rollupNameMap = new HashMap<>();
- for (AlterClause alterClause : dropRollupClauses) {
- DropRollupClause dropRollupClause = (DropRollupClause) alterClause;
- String rollupIndexName = dropRollupClause.getRollupName();
+ for (AlterOp alterOp : alterOps) {
+ DropRollupOp dropRollupOp = (DropRollupOp) alterOp;
+ String rollupIndexName = dropRollupOp.getRollupName();
long rollupIndexId = dropMaterializedView(rollupIndexName, olapTable);
rollupNameMap.put(rollupIndexId, rollupIndexName);
}
@@ -1290,18 +1290,18 @@ public class MaterializedViewHandler extends AlterHandler {
}
@Override
- public void process(String rawSql, List<AlterClause> alterClauses, Database db,
+ public void process(String rawSql, List<AlterOp> alterOps, Database db,
OlapTable olapTable)
throws DdlException, AnalysisException, MetaNotFoundException {
if (olapTable.isDuplicateWithoutKey()) {
throw new DdlException("Duplicate table without keys do not support alter rollup!");
}
- Optional<AlterClause> alterClauseOptional = alterClauses.stream().findAny();
- if (alterClauseOptional.isPresent()) {
- if (alterClauseOptional.get() instanceof AddRollupClause) {
- processBatchAddRollup(rawSql, alterClauses, db, olapTable);
- } else if (alterClauseOptional.get() instanceof DropRollupClause) {
- processBatchDropRollup(alterClauses, db, olapTable);
+ Optional<AlterOp> alterOpOptional = alterOps.stream().findAny();
+ if (alterOpOptional.isPresent()) {
+ if (alterOpOptional.get() instanceof AddRollupOp) {
+ processBatchAddRollup(rawSql, alterOps, db, olapTable);
+ } else if (alterOpOptional.get() instanceof DropRollupOp) {
+ processBatchDropRollup(alterOps, db, olapTable);
} else {
Preconditions.checkState(false);
}
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 dc26aea6bf7..0b0a01ece9d 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
@@ -17,20 +17,10 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AddColumnClause;
-import org.apache.doris.analysis.AddColumnsClause;
-import org.apache.doris.analysis.AlterClause;
import org.apache.doris.analysis.AnnIndexPropertiesChecker;
-import org.apache.doris.analysis.BuildIndexClause;
import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.CreateIndexClause;
-import org.apache.doris.analysis.DropColumnClause;
-import org.apache.doris.analysis.DropIndexClause;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.InvertedIndexUtil;
-import org.apache.doris.analysis.ModifyColumnClause;
-import org.apache.doris.analysis.ModifyTablePropertiesClause;
-import org.apache.doris.analysis.ReorderColumnsClause;
import org.apache.doris.analysis.SlotRef;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.BinlogConfig;
@@ -87,9 +77,19 @@ import org.apache.doris.mysql.privilege.PrivPredicate;
import org.apache.doris.nereids.trees.plans.commands.AlterCommand;
import org.apache.doris.nereids.trees.plans.commands.CancelAlterTableCommand;
import org.apache.doris.nereids.trees.plans.commands.CancelBuildIndexCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AddColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddColumnsOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.BuildIndexOp;
import org.apache.doris.nereids.trees.plans.commands.info.ColumnDefinition;
+import org.apache.doris.nereids.trees.plans.commands.info.CreateIndexOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropIndexOp;
import org.apache.doris.nereids.trees.plans.commands.info.IndexDefinition;
import org.apache.doris.nereids.trees.plans.commands.info.IndexDefinition.IndexType;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyTablePropertiesOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReorderColumnsOp;
import org.apache.doris.persist.AlterLightSchemaChangeInfo;
import org.apache.doris.persist.RemoveAlterJobV2OperationLog;
import org.apache.doris.persist.TableAddOrDropColumnsInfo;
@@ -168,20 +168,20 @@ public class SchemaChangeHandler extends AlterHandler {
}
/**
- * @param alterClause
+ * @param addColumnOp
* @param olapTable
* @param indexSchemaMap
* @param colUniqueIdSupplierMap for multi add columns clause, we need stash middle state of maxColUniqueId
* @return true: can light schema change, false: cannot light schema change
* @throws DdlException
*/
- private boolean processAddColumn(AddColumnClause alterClause, OlapTable olapTable,
+ private boolean processAddColumn(AddColumnOp addColumnOp, OlapTable olapTable,
Map<Long, LinkedList<Column>> indexSchemaMap,
Map<Long, IntSupplier> colUniqueIdSupplierMap)
throws DdlException {
- Column column = alterClause.getColumn();
- ColumnPosition columnPos = alterClause.getColPos();
- String targetIndexName = alterClause.getRollupName();
+ Column column = addColumnOp.getColumn();
+ ColumnPosition columnPos = addColumnOp.getColPos();
+ String targetIndexName = addColumnOp.getRollupName();
checkIndexExists(olapTable, targetIndexName);
String baseIndexName = olapTable.getName();
@@ -196,23 +196,23 @@ public class SchemaChangeHandler extends AlterHandler {
Set<String> newColNameSet = Sets.newHashSet(column.getName());
return addColumnInternal(olapTable, column, columnPos, targetIndexId, baseIndexId, indexSchemaMap,
- newColNameSet, false, colUniqueIdSupplierMap);
+ newColNameSet, false, colUniqueIdSupplierMap);
}
- private void processAddColumn(AddColumnClause alterClause, Table externalTable, List<Column> newSchema)
+ private void processAddColumn(AddColumnOp addColumnOp, Table externalTable, List<Column> newSchema)
throws DdlException {
- Column column = alterClause.getColumn();
- ColumnPosition columnPos = alterClause.getColPos();
+ Column column = addColumnOp.getColumn();
+ ColumnPosition columnPos = addColumnOp.getColPos();
Set<String> newColNameSet = Sets.newHashSet(column.getName());
addColumnInternal(column, columnPos, newSchema, newColNameSet);
}
- private void processAddColumns(AddColumnsClause alterClause, Table externalTable, List<Column> newSchema)
+ private void processAddColumns(AddColumnsOp addColumnsOp, Table externalTable, List<Column> newSchema)
throws DdlException {
- List<Column> columns = alterClause.getColumns();
+ List<Column> columns = addColumnsOp.getColumns();
Set<String> newColNameSet = Sets.newHashSet();
- for (Column column : alterClause.getColumns()) {
+ for (Column column : addColumnsOp.getColumns()) {
newColNameSet.add(column.getName());
}
@@ -222,7 +222,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
/**
- * @param alterClause
+ * @param addColumnsOp
* @param olapTable
* @param indexSchemaMap
* @param ignoreSameColumn
@@ -230,11 +230,11 @@ public class SchemaChangeHandler extends AlterHandler {
* @return true: can light schema change, false: cannot light schema change
* @throws DdlException
*/
- public boolean processAddColumns(AddColumnsClause alterClause, OlapTable olapTable,
+ public boolean processAddColumns(AddColumnsOp addColumnsOp, OlapTable olapTable,
Map<Long, LinkedList<Column>> indexSchemaMap, boolean ignoreSameColumn,
Map<Long, IntSupplier> colUniqueIdSupplierMap) throws DdlException {
- List<Column> columns = alterClause.getColumns();
- String targetIndexName = alterClause.getRollupName();
+ List<Column> columns = addColumnsOp.getColumns();
+ String targetIndexName = addColumnsOp.getRollupName();
checkIndexExists(olapTable, targetIndexName);
Set<String> newColNameSet = Sets.newHashSet();
@@ -262,9 +262,9 @@ public class SchemaChangeHandler extends AlterHandler {
return lightSchemaChange;
}
- private void processDropColumn(DropColumnClause alterClause, Table externalTable, List<Column> newSchema)
+ private void processDropColumn(DropColumnOp dropColumnOp, Table externalTable, List<Column> newSchema)
throws DdlException {
- String dropColName = alterClause.getColName();
+ String dropColName = dropColumnOp.getColName();
// find column in base index and remove it
boolean found = false;
@@ -277,8 +277,8 @@ public class SchemaChangeHandler extends AlterHandler {
found = true;
} else {
throw new DdlException(
- "Do not allow remove last column of table: " + externalTable.getName() + " column: "
- + dropColName);
+ "Do not allow remove last column of table: " + externalTable.getName() + " column: "
+ + dropColName);
}
break;
}
@@ -290,19 +290,19 @@ public class SchemaChangeHandler extends AlterHandler {
}
/**
- * @param alterClause
+ * @param dropColumnOp
* @param olapTable
* @param indexSchemaMap
* @param indexes
* @return true: can light schema change, false: cannot
* @throws DdlException
*/
- private boolean processDropColumn(DropColumnClause alterClause, OlapTable olapTable,
+ private boolean processDropColumn(DropColumnOp dropColumnOp, OlapTable olapTable,
Map<Long, LinkedList<Column>> indexSchemaMap, List<Index> indexes)
throws DdlException {
- String dropColName = alterClause.getColName();
- String targetIndexName = alterClause.getRollupName();
+ String dropColName = dropColumnOp.getColName();
+ String targetIndexName = dropColumnOp.getRollupName();
checkIndexExists(olapTable, targetIndexName);
String baseIndexName = olapTable.getName();
@@ -334,7 +334,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
if (olapTable.hasSequenceCol() && dropColName.equalsIgnoreCase(olapTable.getSequenceMapCol())) {
throw new DdlException("Can not drop sequence mapping column[" + dropColName
- + "] in Unique data model table[" + olapTable.getName() + "]");
+ + "] in Unique data model table[" + olapTable.getName() + "]");
}
} else if (KeysType.AGG_KEYS == olapTable.getKeysType()) {
if (null == targetIndexName) {
@@ -353,7 +353,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
if (isKey && hasReplaceColumn) {
throw new DdlException(
- "Can not drop key column when table has value column with REPLACE aggregation method");
+ "Can not drop key column when table has value column with REPLACE aggregation method");
}
} else {
// drop column in rollup and base index
@@ -372,7 +372,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
if (isKey && hasReplaceColumn) {
throw new DdlException(
- "Can not drop key column when rollup has value column with REPLACE aggregation method");
+ "Can not drop key column when rollup has value column with REPLACE aggregation method");
}
}
} else if (KeysType.DUP_KEYS == olapTable.getKeysType()) {
@@ -469,7 +469,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
if (containedByMV) {
throw new DdlException("Can not drop column contained by mv, mv="
- + olapTable.getIndexNameById(indexIds.get(i)));
+ + olapTable.getIndexNameById(indexIds.get(i)));
}
}
}
@@ -498,10 +498,10 @@ public class SchemaChangeHandler extends AlterHandler {
}
// User can modify column type and column position
- private void processModifyColumn(ModifyColumnClause alterClause, Table externalTable, List<Column> newSchema)
+ private void processModifyColumn(ModifyColumnOp modifyColumnOp, Table externalTable, List<Column> newSchema)
throws DdlException {
- Column modColumn = alterClause.getColumn();
- ColumnPosition columnPos = alterClause.getColPos();
+ Column modColumn = modifyColumnOp.getColumn();
+ ColumnPosition columnPos = modifyColumnOp.getColPos();
// find modified column
String newColName = modColumn.getName();
@@ -565,9 +565,9 @@ public class SchemaChangeHandler extends AlterHandler {
}
// User can modify column type and column position
- private boolean processModifyColumn(ModifyColumnClause alterClause, OlapTable olapTable,
+ private boolean processModifyColumn(ModifyColumnOp modifyColumnOp, OlapTable olapTable,
Map<Long, LinkedList<Column>> indexSchemaMap) throws DdlException {
- Column modColumn = alterClause.getColumn();
+ Column modColumn = modifyColumnOp.getColumn();
boolean lightSchemaChange = false;
if (KeysType.AGG_KEYS == olapTable.getKeysType()) {
@@ -579,7 +579,7 @@ public class SchemaChangeHandler extends AlterHandler {
} else if (KeysType.UNIQUE_KEYS == olapTable.getKeysType()) {
if (null != modColumn.getAggregationType() && modColumn.isKey()) {
throw new DdlException("Can not assign aggregation method" + " on column in Unique data model table: "
- + modColumn.getName());
+ + modColumn.getName());
}
if (!modColumn.isKey()) {
if (olapTable.getEnableUniqueKeyMergeOnWrite()) {
@@ -591,15 +591,15 @@ public class SchemaChangeHandler extends AlterHandler {
} else {
if (null != modColumn.getAggregationType() && modColumn.isKey()) {
throw new DdlException(
- "Can not assign aggregation method" + " on column in Duplicate data model table: "
- + modColumn.getName());
+ "Can not assign aggregation method" + " on column in Duplicate data model table: "
+ + modColumn.getName());
}
if (!modColumn.isKey()) {
modColumn.setAggregationType(AggregateType.NONE, true);
}
}
- ColumnPosition columnPos = alterClause.getColPos();
- String targetIndexName = alterClause.getRollupName();
+ ColumnPosition columnPos = modifyColumnOp.getColPos();
+ String targetIndexName = modifyColumnOp.getRollupName();
checkIndexExists(olapTable, targetIndexName);
String baseIndexName = olapTable.getName();
@@ -687,7 +687,7 @@ public class SchemaChangeHandler extends AlterHandler {
if (!modColumn.equals(oriColumn) && oriColumn.isAutoInc() != modColumn.isAutoInc()) {
throw new DdlException("Can't modify the column["
- + oriColumn.getName() + "]'s auto-increment attribute.");
+ + oriColumn.getName() + "]'s auto-increment attribute.");
}
// handle the move operation in 'indexForFindingColumn' if has
@@ -723,7 +723,7 @@ public class SchemaChangeHandler extends AlterHandler {
String columnName = column.getName();
if (column.isMaterializedViewColumn()) {
throw new DdlException("Can not modify column contained by mv, mv="
- + olapTable.getIndexNameById(entry.getKey()));
+ + olapTable.getIndexNameById(entry.getKey()));
}
if (columnName.equalsIgnoreCase(modColumn.getName())) {
otherIndexIds.add(entry.getKey());
@@ -740,7 +740,7 @@ public class SchemaChangeHandler extends AlterHandler {
String columnName = col.getName();
if (col.isMaterializedViewColumn()) {
throw new DdlException("Can not modify column contained by mv, mv="
- + olapTable.getIndexNameById(otherIndexId));
+ + olapTable.getIndexNameById(otherIndexId));
}
if (!columnName.equalsIgnoreCase(modColumn.getName())) {
continue;
@@ -786,9 +786,9 @@ public class SchemaChangeHandler extends AlterHandler {
return lightSchemaChange;
}
- private void processReorderColumn(ReorderColumnsClause alterClause, Table externalTable, List<Column> newSchema)
+ private void processReorderColumn(ReorderColumnsOp reorderColumnsOp, Table externalTable, List<Column> newSchema)
throws DdlException {
- List<String> orderedColNames = alterClause.getColumnsByPos();
+ List<String> orderedColNames = reorderColumnsOp.getColumnsByPos();
newSchema.clear();
List<Column> targetIndexSchema = externalTable.getBaseSchema();
@@ -819,10 +819,10 @@ public class SchemaChangeHandler extends AlterHandler {
}
}
- private void processReorderColumn(ReorderColumnsClause alterClause, OlapTable olapTable,
+ private void processReorderColumn(ReorderColumnsOp reorderColumnsOp, OlapTable olapTable,
Map<Long, LinkedList<Column>> indexSchemaMap) throws DdlException {
- List<String> orderedColNames = alterClause.getColumnsByPos();
- String targetIndexName = alterClause.getRollupName();
+ List<String> orderedColNames = reorderColumnsOp.getColumnsByPos();
+ String targetIndexName = reorderColumnsOp.getRollupName();
checkIndexExists(olapTable, targetIndexName);
String baseIndexName = olapTable.getName();
@@ -837,7 +837,7 @@ public class SchemaChangeHandler extends AlterHandler {
List<Column> targetIndexSchema = indexSchemaMap.get(targetIndexId);
// When rollup is specified, there is no need to check the order of generated columns.
// When rollup is not specified and the order of baseIndex needs to be modified, the order needs to be checked.
- if (alterClause.getRollupName() == null) {
+ if (reorderColumnsOp.getRollupName() == null) {
checkOrder(targetIndexSchema, orderedColNames);
}
// check and create new ordered column list
@@ -1910,7 +1910,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
@Override
- public void process(String rawSql, List<AlterClause> alterClauses, Database db,
+ public void process(String rawSql, List<AlterOp> alterOps, Database db,
OlapTable olapTable)
throws UserException {
olapTable.writeLockOrDdlException();
@@ -1970,8 +1970,8 @@ public class SchemaChangeHandler extends AlterHandler {
Map<Long, Set<String>> indexOnPartitions = new HashMap<>();
boolean isDropIndex = false;
Map<String, String> propertyMap = new HashMap<>();
- for (AlterClause alterClause : alterClauses) {
- Map<String, String> properties = alterClause.getProperties();
+ for (AlterOp alterOp : alterOps) {
+ Map<String, String> properties = alterOp.getProperties();
// alter table properties
if (properties != null) {
if (propertyMap.isEmpty()) {
@@ -1991,7 +1991,7 @@ public class SchemaChangeHandler extends AlterHandler {
String distributionType = properties.get(PropertyAnalyzer.PROPERTIES_DISTRIBUTION_TYPE);
if (!distributionType.equalsIgnoreCase("random")) {
throw new DdlException(
- "Only support modifying distribution type of table from" + " hash to random");
+ "Only support modifying distribution type of table from" + " hash to random");
}
Env.getCurrentEnv().convertDistributionType(db, olapTable);
return;
@@ -2015,8 +2015,8 @@ public class SchemaChangeHandler extends AlterHandler {
// This table is not a dynamic partition table
// and didn't supply all dynamic partition properties
throw new DdlException("Table " + db.getFullName() + "." + olapTable.getName()
- + " is not a dynamic partition table." + " Use command `HELP ALTER TABLE` "
- + "to see how to change a normal table to a dynamic partition table.");
+ + " is not a dynamic partition table." + " Use command `HELP ALTER TABLE` "
+ + "to see how to change a normal table to a dynamic partition table.");
}
}
Env.getCurrentEnv().modifyTableDynamicPartition(db, olapTable, properties);
@@ -2035,7 +2035,7 @@ public class SchemaChangeHandler extends AlterHandler {
return;
} else if (properties.containsKey(PropertyAnalyzer.PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE)) {
lightSchemaChange = Boolean.parseBoolean(
- properties.get(PropertyAnalyzer.PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE));
+ properties.get(PropertyAnalyzer.PROPERTIES_ENABLE_LIGHT_SCHEMA_CHANGE));
if (Objects.equals(olapTable.getEnableLightSchemaChange(), lightSchemaChange)) {
return;
}
@@ -2045,7 +2045,7 @@ public class SchemaChangeHandler extends AlterHandler {
enableLightSchemaChange(db, olapTable);
return;
} else if (properties.containsKey(PropertyAnalyzer.PROPERTIES_STORE_ROW_COLUMN)
- || properties.containsKey(PropertyAnalyzer.PROPERTIES_ROW_STORE_COLUMNS)) {
+ || properties.containsKey(PropertyAnalyzer.PROPERTIES_ROW_STORE_COLUMNS)) {
String value = properties.get(PropertyAnalyzer.PROPERTIES_STORE_ROW_COLUMN);
if (value != null && value.equalsIgnoreCase("false")) {
throw new DdlException("Can not alter store_row_column from true to false currently");
@@ -2069,46 +2069,46 @@ public class SchemaChangeHandler extends AlterHandler {
throw new DdlException("Can not alter table when there are temp partitions in table");
}
- if (alterClause instanceof AddColumnClause) {
+ if (alterOp instanceof AddColumnOp) {
// add column
- boolean clauseCanLightSchemaChange = processAddColumn((AddColumnClause) alterClause, olapTable,
+ boolean clauseCanLightSchemaChange = processAddColumn((AddColumnOp) alterOp, olapTable,
indexSchemaMap, colUniqueIdSupplierMap);
if (!clauseCanLightSchemaChange) {
lightSchemaChange = false;
}
- } else if (alterClause instanceof AddColumnsClause) {
+ } else if (alterOp instanceof AddColumnsOp) {
// add columns
- boolean clauseCanLightSchemaChange = processAddColumns((AddColumnsClause) alterClause, olapTable,
+ boolean clauseCanLightSchemaChange = processAddColumns((AddColumnsOp) alterOp, olapTable,
indexSchemaMap, false, colUniqueIdSupplierMap);
if (!clauseCanLightSchemaChange) {
lightSchemaChange = false;
}
- } else if (alterClause instanceof DropColumnClause) {
+ } else if (alterOp instanceof DropColumnOp) {
// drop column and drop indexes on this column
- boolean clauseCanLightSchemaChange = processDropColumn((DropColumnClause) alterClause, olapTable,
+ boolean clauseCanLightSchemaChange = processDropColumn((DropColumnOp) alterOp, olapTable,
indexSchemaMap, newIndexes);
if (!clauseCanLightSchemaChange) {
lightSchemaChange = false;
}
- } else if (alterClause instanceof ModifyColumnClause) {
+ } else if (alterOp instanceof ModifyColumnOp) {
// modify column
- boolean clauseCanLightSchemaChange = processModifyColumn((ModifyColumnClause) alterClause,
+ boolean clauseCanLightSchemaChange = processModifyColumn((ModifyColumnOp) alterOp,
olapTable, indexSchemaMap);
if (!clauseCanLightSchemaChange) {
lightSchemaChange = false;
}
- } else if (alterClause instanceof ReorderColumnsClause) {
+ } else if (alterOp instanceof ReorderColumnsOp) {
// reorder column
- processReorderColumn((ReorderColumnsClause) alterClause, olapTable, indexSchemaMap);
+ processReorderColumn((ReorderColumnsOp) alterOp, olapTable, indexSchemaMap);
lightSchemaChange = false;
- } else if (alterClause instanceof ModifyTablePropertiesClause) {
+ } else if (alterOp instanceof ModifyTablePropertiesOp) {
// modify table properties
// do nothing, properties are already in propertyMap
lightSchemaChange = false;
- } else if (alterClause instanceof CreateIndexClause) {
- CreateIndexClause createIndexClause = (CreateIndexClause) alterClause;
- Index index = createIndexClause.getIndex();
- if (processAddIndex(createIndexClause, olapTable, newIndexes)) {
+ } else if (alterOp instanceof CreateIndexOp) {
+ CreateIndexOp createIndexOp = (CreateIndexOp) alterOp;
+ Index index = createIndexOp.getIndex();
+ if (processAddIndex(createIndexOp, olapTable, newIndexes)) {
return;
}
lightSchemaChange = false;
@@ -2120,10 +2120,10 @@ public class SchemaChangeHandler extends AlterHandler {
isDropIndex = false;
lightIndexChange = true;
}
- } else if (alterClause instanceof BuildIndexClause) {
- BuildIndexClause buildIndexClause = (BuildIndexClause) alterClause;
- IndexDefinition indexDef = buildIndexClause.getIndexDef();
- Index index = buildIndexClause.getIndex();
+ } else if (alterOp instanceof BuildIndexOp) {
+ BuildIndexOp buildIndexOp = (BuildIndexOp) alterOp;
+ IndexDefinition indexDef = buildIndexOp.getIndexDef();
+ Index index = buildIndexOp.getIndex();
for (Column column : olapTable.getBaseSchema()) {
if (!column.getType().isVariantType()) {
@@ -2133,8 +2133,8 @@ public class SchemaChangeHandler extends AlterHandler {
for (String indexColumn : index.getColumns()) {
if (column.getName().equalsIgnoreCase(indexColumn)) {
throw new DdlException("BUILD INDEX operation failed: The "
- + indexDef.getIndexName() + " index can not be built on the "
- + indexColumn + " column, because it is a variant type column.");
+ + indexDef.getIndexName() + " index can not be built on the "
+ + indexColumn + " column, because it is a variant type column.");
}
}
}
@@ -2149,17 +2149,17 @@ public class SchemaChangeHandler extends AlterHandler {
alterIndexes.add(index);
buildIndexChange = true;
lightSchemaChange = false;
- } else if (alterClause instanceof DropIndexClause) {
- if (processDropIndex((DropIndexClause) alterClause, olapTable, newIndexes)) {
+ } else if (alterOp instanceof DropIndexOp) {
+ if (processDropIndex((DropIndexOp) alterOp, olapTable, newIndexes)) {
return;
}
lightSchemaChange = false;
- DropIndexClause dropIndexClause = (DropIndexClause) alterClause;
+ DropIndexOp dropIndexOp = (DropIndexOp) alterOp;
List<Index> existedIndexes = olapTable.getIndexes();
Index found = null;
for (Index existedIdx : existedIndexes) {
- if (existedIdx.getIndexName().equalsIgnoreCase(dropIndexClause.getIndexName())) {
+ if (existedIdx.getIndexName().equalsIgnoreCase(dropIndexOp.getIndexName())) {
found = existedIdx;
break;
}
@@ -2198,12 +2198,12 @@ public class SchemaChangeHandler extends AlterHandler {
long jobId = Env.getCurrentEnv().getNextId();
//for schema change add/drop value column optimize, direct modify table meta.
modifyTableLightSchemaChange(rawSql, db, olapTable, indexSchemaMap, newIndexes,
- null, isDropIndex, jobId, false, propertyMap);
+ null, isDropIndex, jobId, false, propertyMap);
} else if (Config.enable_light_index_change && lightIndexChange) {
long jobId = Env.getCurrentEnv().getNextId();
//for schema change add/drop inverted index and ngram_bf optimize, direct modify table meta firstly.
modifyTableLightSchemaChange(rawSql, db, olapTable, indexSchemaMap, newIndexes,
- alterIndexes, isDropIndex, jobId, false, propertyMap);
+ alterIndexes, isDropIndex, jobId, false, propertyMap);
} else if (buildIndexChange) {
if (alterIndexes.isEmpty()) {
throw new DdlException("Altered index is empty. please check your alter stmt.");
@@ -2252,7 +2252,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
@Override
- public void processExternalTable(List<AlterClause> alterClauses, Database db, Table externalTable)
+ public void processExternalTable(List<AlterOp> alterOps, Database db, Table externalTable)
throws UserException {
externalTable.writeLockOrDdlException();
try {
@@ -2260,22 +2260,22 @@ public class SchemaChangeHandler extends AlterHandler {
List<Column> newSchema = Lists.newArrayList();
newSchema.addAll(externalTable.getBaseSchema(true));
- for (AlterClause alterClause : alterClauses) {
- if (alterClause instanceof AddColumnClause) {
+ for (AlterOp alterOp : alterOps) {
+ if (alterOp instanceof AddColumnOp) {
// add column
- processAddColumn((AddColumnClause) alterClause, externalTable, newSchema);
- } else if (alterClause instanceof AddColumnsClause) {
+ processAddColumn((AddColumnOp) alterOp, externalTable, newSchema);
+ } else if (alterOp instanceof AddColumnsOp) {
// add columns
- processAddColumns((AddColumnsClause) alterClause, externalTable, newSchema);
- } else if (alterClause instanceof DropColumnClause) {
+ processAddColumns((AddColumnsOp) alterOp, externalTable, newSchema);
+ } else if (alterOp instanceof DropColumnOp) {
// drop column and drop indexes on this column
- processDropColumn((DropColumnClause) alterClause, externalTable, newSchema);
- } else if (alterClause instanceof ModifyColumnClause) {
+ processDropColumn((DropColumnOp) alterOp, externalTable, newSchema);
+ } else if (alterOp instanceof ModifyColumnOp) {
// modify column
- processModifyColumn((ModifyColumnClause) alterClause, externalTable, newSchema);
- } else if (alterClause instanceof ReorderColumnsClause) {
+ processModifyColumn((ModifyColumnOp) alterOp, externalTable, newSchema);
+ } else if (alterOp instanceof ReorderColumnsOp) {
// reorder column
- processReorderColumn((ReorderColumnsClause) alterClause, externalTable, newSchema);
+ processReorderColumn((ReorderColumnsOp) alterOp, externalTable, newSchema);
} else {
Preconditions.checkState(false);
}
@@ -2740,15 +2740,15 @@ public class SchemaChangeHandler extends AlterHandler {
* Returns true if the index already exists, there is no need to create the job to add the index.
* Otherwise, return false, there is need to create a job to add the index.
*/
- private boolean processAddIndex(CreateIndexClause alterClause, OlapTable olapTable, List<Index> newIndexes)
- throws UserException {
- Index alterIndex = alterClause.getIndex();
+ private boolean processAddIndex(CreateIndexOp createIndexOp, OlapTable olapTable, List<Index> newIndexes)
+ throws UserException {
+ Index alterIndex = createIndexOp.getIndex();
if (alterIndex == null) {
return false;
}
List<Index> existedIndexes = olapTable.getIndexes();
- IndexDefinition indexDef = alterClause.getIndexDef();
+ IndexDefinition indexDef = createIndexOp.getIndexDef();
Set<String> newColset = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
newColset.addAll(indexDef.getColumnNames());
Set<Long> existedIndexIdSet = Sets.newHashSet();
@@ -2812,7 +2812,7 @@ public class SchemaChangeHandler extends AlterHandler {
if (index.getIndexType() == indexDef.getIndexType() && newColset.equals(existedIdxColSet)) {
if (newColset.size() == 1
&& olapTable.getInvertedIndexFileStorageFormat()
- .compareTo(TInvertedIndexFileStorageFormat.V2) >= 0) {
+ .compareTo(TInvertedIndexFileStorageFormat.V2) >= 0) {
String columnName = indexDef.getColumnNames().get(0);
Column column = olapTable.getColumn(columnName);
if (column != null && (column.getType().isStringType() || column.getType().isVariantType())) {
@@ -2842,9 +2842,9 @@ public class SchemaChangeHandler extends AlterHandler {
* Returns true if the index does not exist, there is no need to create the job to drop the index.
* Otherwise return false, there is need to create a job to drop the index.
*/
- private boolean processDropIndex(DropIndexClause alterClause, OlapTable olapTable, List<Index> indexes)
+ private boolean processDropIndex(DropIndexOp dropIndexOp, OlapTable olapTable, List<Index> indexes)
throws DdlException {
- String indexName = alterClause.getIndexName();
+ String indexName = dropIndexOp.getIndexName();
List<Index> existedIndexes = olapTable.getIndexes();
Index found = null;
for (Index existedIdx : existedIndexes) {
@@ -2854,7 +2854,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
}
if (found == null) {
- if (alterClause.isSetIfExists()) {
+ if (dropIndexOp.isSetIfExists()) {
LOG.info("drop index[{}] which does not exist on table[{}]", indexName, olapTable.getName());
return true;
}
@@ -2868,7 +2868,7 @@ public class SchemaChangeHandler extends AlterHandler {
Iterator<Index> itr = indexes.iterator();
while (itr.hasNext()) {
Index idx = itr.next();
- if (idx.getIndexName().equalsIgnoreCase(alterClause.getIndexName())) {
+ if (idx.getIndexName().equalsIgnoreCase(dropIndexOp.getIndexName())) {
itr.remove();
break;
}
@@ -3382,7 +3382,7 @@ public class SchemaChangeHandler extends AlterHandler {
}
}
- public boolean updateBinlogConfig(Database db, OlapTable olapTable, List<AlterClause> alterClauses)
+ public boolean updateBinlogConfig(Database db, OlapTable olapTable, List<AlterOp> alterOps)
throws DdlException, UserException {
List<Partition> partitions = Lists.newArrayList();
BinlogConfig oldBinlogConfig;
@@ -3399,8 +3399,8 @@ public class SchemaChangeHandler extends AlterHandler {
olapTable.readUnlock();
}
- for (AlterClause alterClause : alterClauses) {
- Map<String, String> properties = alterClause.getProperties();
+ for (AlterOp alterOp : alterOps) {
+ Map<String, String> properties = alterOp.getProperties();
if (properties == null) {
continue;
}
@@ -3461,7 +3461,7 @@ public class SchemaChangeHandler extends AlterHandler {
for (Partition partition : partitions) {
updatePartitionProperties(db, olapTable.getName(), partition.getName(), -1, -1,
- newBinlogConfig, null, null, -1, -1, -1);
+ newBinlogConfig, null, null, -1, -1, -1);
}
olapTable.writeLockOrDdlException();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java b/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java
index 0daacffea49..23e5fae545e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/alter/SystemHandler.java
@@ -17,18 +17,6 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AddBackendClause;
-import org.apache.doris.analysis.AddFollowerClause;
-import org.apache.doris.analysis.AddObserverClause;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.DecommissionBackendClause;
-import org.apache.doris.analysis.DropBackendClause;
-import org.apache.doris.analysis.DropFollowerClause;
-import org.apache.doris.analysis.DropObserverClause;
-import org.apache.doris.analysis.ModifyBackendClause;
-import org.apache.doris.analysis.ModifyBackendHostNameClause;
-import org.apache.doris.analysis.ModifyBrokerClause;
-import org.apache.doris.analysis.ModifyFrontendHostNameClause;
import org.apache.doris.catalog.CatalogRecycleBin;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
@@ -54,14 +42,18 @@ import org.apache.doris.nereids.trees.plans.commands.info.AddBackendOp;
import org.apache.doris.nereids.trees.plans.commands.info.AddBrokerOp;
import org.apache.doris.nereids.trees.plans.commands.info.AddFollowerOp;
import org.apache.doris.nereids.trees.plans.commands.info.AddObserverOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
import org.apache.doris.nereids.trees.plans.commands.info.DecommissionBackendOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropAllBrokerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropBackendOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropBrokerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropFollowerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropObserverOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendHostNameOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendOp;
-import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendOrBackendHostNameOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyBrokerOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendHostNameOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyNodeHostNameOp;
import org.apache.doris.resource.Tag;
import org.apache.doris.system.Backend;
import org.apache.doris.system.SystemInfoService;
@@ -151,37 +143,36 @@ public class SystemHandler extends AlterHandler {
@Override
// add synchronized to avoid process 2 or more stmts at same time
- public synchronized void process(String rawSql, List<AlterClause> alterClauses,
- Database dummyDb,
- OlapTable dummyTbl) throws UserException {
- Preconditions.checkArgument(alterClauses.size() == 1);
- AlterClause alterClause = alterClauses.get(0);
+ public synchronized void process(String rawSql, List<AlterOp> alterOps, Database dummyDb,
+ OlapTable dummyTbl) throws UserException {
+ Preconditions.checkArgument(alterOps.size() == 1);
+ AlterOp alterOp = alterOps.get(0);
- if (alterClause instanceof AddBackendClause) {
+ if (alterOp instanceof AddBackendOp) {
// add backend
- AddBackendClause addBackendClause = (AddBackendClause) alterClause;
- Env.getCurrentSystemInfo().addBackends(addBackendClause.getHostInfos(), addBackendClause.getTagMap());
- } else if (alterClause instanceof DropBackendClause) {
+ AddBackendOp addBackendOp = (AddBackendOp) alterOp;
+ Env.getCurrentSystemInfo().addBackends(addBackendOp.getHostInfos(), addBackendOp.getTagMap());
+ } else if (alterOp instanceof DropBackendOp) {
// drop backend
- DropBackendClause dropBackendClause = (DropBackendClause) alterClause;
- if (!dropBackendClause.isForce()) {
+ DropBackendOp dropBackendOp = (DropBackendOp) alterOp;
+ if (!dropBackendOp.isForce()) {
throw new DdlException("It is highly NOT RECOMMENDED to use DROP BACKEND stmt."
+ "It is not safe to directly drop a backend. "
+ "All data on this backend will be discarded permanently. "
+ "If you insist, use DROPP instead of DROP");
}
- if (dropBackendClause.getHostInfos().isEmpty()) {
+ if (dropBackendOp.getHostInfos().isEmpty()) {
// drop by id
- Env.getCurrentSystemInfo().dropBackendsByIds(dropBackendClause.getIds());
+ Env.getCurrentSystemInfo().dropBackendsByIds(dropBackendOp.getIds());
} else {
// drop by host
- Env.getCurrentSystemInfo().dropBackends(dropBackendClause.getHostInfos());
+ Env.getCurrentSystemInfo().dropBackends(dropBackendOp.getHostInfos());
}
- } else if (alterClause instanceof DecommissionBackendClause) {
+ } else if (alterOp instanceof DecommissionBackendOp) {
// decommission
- DecommissionBackendClause decommissionBackendClause = (DecommissionBackendClause) alterClause;
+ DecommissionBackendOp decommissionBackendOp = (DecommissionBackendOp) alterOp;
// check request
- List<Backend> decommissionBackends = checkDecommission(decommissionBackendClause);
+ List<Backend> decommissionBackends = checkDecommission(decommissionBackendOp);
// set backend's state as 'decommissioned'
// for decommission operation, here is no decommission job. the system handler will check
@@ -190,34 +181,34 @@ public class SystemHandler extends AlterHandler {
Env.getCurrentSystemInfo().decommissionBackend(backend);
}
- } else if (alterClause instanceof AddObserverClause) {
- AddObserverClause clause = (AddObserverClause) alterClause;
- Env.getCurrentEnv().addFrontend(FrontendNodeType.OBSERVER, clause.getHost(),
- clause.getPort());
- } else if (alterClause instanceof DropObserverClause) {
- DropObserverClause clause = (DropObserverClause) alterClause;
- Env.getCurrentEnv().dropFrontend(FrontendNodeType.OBSERVER, clause.getHost(),
- clause.getPort());
- } else if (alterClause instanceof AddFollowerClause) {
- AddFollowerClause clause = (AddFollowerClause) alterClause;
- Env.getCurrentEnv().addFrontend(FrontendNodeType.FOLLOWER, clause.getHost(),
- clause.getPort());
- } else if (alterClause instanceof DropFollowerClause) {
- DropFollowerClause clause = (DropFollowerClause) alterClause;
- Env.getCurrentEnv().dropFrontend(FrontendNodeType.FOLLOWER, clause.getHost(),
- clause.getPort());
- } else if (alterClause instanceof ModifyBrokerClause) {
- ModifyBrokerClause clause = (ModifyBrokerClause) alterClause;
- Env.getCurrentEnv().getBrokerMgr().execute(clause);
- } else if (alterClause instanceof ModifyBackendClause) {
- Env.getCurrentSystemInfo().modifyBackends(((ModifyBackendClause) alterClause));
- } else if (alterClause instanceof ModifyFrontendHostNameClause) {
- ModifyFrontendHostNameClause clause = (ModifyFrontendHostNameClause) alterClause;
- Env.getCurrentEnv().modifyFrontendHostName(clause.getHost(), clause.getPort(), clause.getNewHost());
- } else if (alterClause instanceof ModifyBackendHostNameClause) {
- Env.getCurrentSystemInfo().modifyBackendHost((ModifyBackendHostNameClause) alterClause);
+ } else if (alterOp instanceof AddObserverOp) {
+ AddObserverOp op = (AddObserverOp) alterOp;
+ Env.getCurrentEnv().addFrontend(FrontendNodeType.OBSERVER, op.getHost(),
+ op.getPort());
+ } else if (alterOp instanceof DropObserverOp) {
+ DropObserverOp op = (DropObserverOp) alterOp;
+ Env.getCurrentEnv().dropFrontend(FrontendNodeType.OBSERVER, op.getHost(),
+ op.getPort());
+ } else if (alterOp instanceof AddFollowerOp) {
+ AddFollowerOp op = (AddFollowerOp) alterOp;
+ Env.getCurrentEnv().addFrontend(FrontendNodeType.FOLLOWER, op.getHost(),
+ op.getPort());
+ } else if (alterOp instanceof DropFollowerOp) {
+ DropFollowerOp op = (DropFollowerOp) alterOp;
+ Env.getCurrentEnv().dropFrontend(FrontendNodeType.FOLLOWER, op.getHost(),
+ op.getPort());
+ } else if (alterOp instanceof ModifyBrokerOp) {
+ ModifyBrokerOp modifyBrokerOp = (ModifyBrokerOp) alterOp;
+ Env.getCurrentEnv().getBrokerMgr().execute(modifyBrokerOp);
+ } else if (alterOp instanceof ModifyBackendOp) {
+ Env.getCurrentSystemInfo().modifyBackends(((ModifyBackendOp) alterOp));
+ } else if (alterOp instanceof ModifyFrontendHostNameOp) {
+ ModifyFrontendHostNameOp op = (ModifyFrontendHostNameOp) alterOp;
+ Env.getCurrentEnv().modifyFrontendHostName(op.getHost(), op.getPort(), op.getNewHost());
+ } else if (alterOp instanceof ModifyBackendHostNameOp) {
+ Env.getCurrentSystemInfo().modifyBackendHost((ModifyBackendHostNameOp) alterOp);
} else {
- Preconditions.checkState(false, alterClause.getClass());
+ Preconditions.checkState(false, alterOp.getClass());
}
}
@@ -287,9 +278,9 @@ public class SystemHandler extends AlterHandler {
ModifyBackendOp op = (ModifyBackendOp) alterSystemCommand.getAlterSystemOp();
Env.getCurrentSystemInfo().modifyBackends(op);
} else if (alterSystemCommand.getType().equals(PlanType.ALTER_SYSTEM_MODIFY_FRONTEND_OR_BACKEND_HOSTNAME)) {
- ModifyFrontendOrBackendHostNameOp op =
- (ModifyFrontendOrBackendHostNameOp) alterSystemCommand.getAlterSystemOp();
- if (op.getModifyOpType().equals(ModifyFrontendOrBackendHostNameOp.ModifyOpType.Frontend)) {
+ ModifyNodeHostNameOp op =
+ (ModifyNodeHostNameOp) alterSystemCommand.getAlterSystemOp();
+ if (op.getModifyOpType().equals(ModifyNodeHostNameOp.ModifyOpType.Frontend)) {
Env.getCurrentEnv().modifyFrontendHostName(op.getHost(), op.getPort(), op.getNewHost());
} else {
Env.getCurrentSystemInfo().modifyBackendHostName(op.getHost(), op.getPort(), op.getNewHost());
@@ -444,12 +435,12 @@ public class SystemHandler extends AlterHandler {
return sampleTablets.isEmpty() && leakyTablets.values().stream().allMatch(ts -> ts < skipLeakyTs);
}
- private List<Backend> checkDecommission(DecommissionBackendClause decommissionBackendClause)
+ private List<Backend> checkDecommission(DecommissionBackendOp decommissionBackendOp)
throws DdlException {
- if (decommissionBackendClause.getHostInfos().isEmpty()) {
- return checkDecommissionByIds(decommissionBackendClause.getIds());
+ if (decommissionBackendOp.getHostInfos().isEmpty()) {
+ return checkDecommissionByIds(decommissionBackendOp.getIds());
}
- return checkDecommission(decommissionBackendClause.getHostInfos());
+ return checkDecommission(decommissionBackendOp.getHostInfos());
}
private List<Backend> checkDecommissionForNereids(DecommissionBackendOp decommissionBackendOp)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
index 83205deef2f..ddc2c9b28ca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DistributionDesc.java
@@ -22,6 +22,7 @@ import org.apache.doris.catalog.DistributionInfo;
import org.apache.doris.catalog.DistributionInfo.DistributionInfoType;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
+import org.apache.doris.nereids.trees.plans.commands.info.DistributionDescriptor;
import org.apache.commons.lang3.NotImplementedException;
@@ -73,4 +74,8 @@ public class DistributionDesc {
public boolean inDistributionColumns(String columnName) {
return getDistributionColumnNames() != null && getDistributionColumnNames().contains(columnName);
}
+
+ public DistributionDescriptor toDistributionDescriptor() {
+ throw new NotImplementedException("toDistributionDescriptor not implemented");
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
index 39c44c951c6..89aaadd9164 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/HashDistributionDesc.java
@@ -24,6 +24,7 @@ import org.apache.doris.catalog.HashDistributionInfo;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
+import org.apache.doris.nereids.trees.plans.commands.info.DistributionDescriptor;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -144,4 +145,9 @@ public class HashDistributionDesc extends DistributionDesc {
new HashDistributionInfo(numBucket, autoBucket, distributionColumns);
return hashDistributionInfo;
}
+
+ @Override
+ public DistributionDescriptor toDistributionDescriptor() {
+ return new DistributionDescriptor(true, this.autoBucket, this.numBucket, this.distributionColumnNames);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionExprUtil.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionExprUtil.java
index ec6772e849a..e228eabf469 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionExprUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionExprUtil.java
@@ -28,6 +28,7 @@ import org.apache.doris.catalog.Type;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.util.AutoBucketCalculator;
import org.apache.doris.common.util.PropertyAnalyzer;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
import org.apache.doris.thrift.TNullableStringLiteral;
import com.google.common.base.Objects;
@@ -124,10 +125,10 @@ public class PartitionExprUtil {
return null;
}
- public static Map<String, AddPartitionClause> getAddPartitionClauseFromPartitionValues(OlapTable olapTable,
- ArrayList<List<TNullableStringLiteral>> partitionValues, PartitionInfo partitionInfo)
+ public static Map<String, AddPartitionOp> getAddPartitionClauseFromPartitionValues(
+ OlapTable olapTable, ArrayList<List<TNullableStringLiteral>> partitionValues, PartitionInfo partitionInfo)
throws AnalysisException {
- Map<String, AddPartitionClause> result = Maps.newHashMap();
+ Map<String, AddPartitionOp> result = Maps.newHashMap();
ArrayList<Expr> partitionExprs = partitionInfo.getPartitionExprs();
PartitionType partitionType = partitionInfo.getType();
List<Column> partitionColumn = partitionInfo.getPartitionColumns();
@@ -162,8 +163,8 @@ public class PartitionExprUtil {
Type partitionColumnType = partitionColumn.get(0).getType();
DateLiteral beginDateTime = new DateLiteral(beginTime, partitionColumnType);
partitionName += String.format(DATETIME_NAME_FORMATTER,
- beginDateTime.getYear(), beginDateTime.getMonth(), beginDateTime.getDay(),
- beginDateTime.getHour(), beginDateTime.getMinute(), beginDateTime.getSecond());
+ beginDateTime.getYear(), beginDateTime.getMonth(), beginDateTime.getDay(),
+ beginDateTime.getHour(), beginDateTime.getMinute(), beginDateTime.getSecond());
DateLiteral endDateTime = getRangeEnd(beginDateTime, intervalInfo);
partitionKeyDesc = createPartitionKeyDescWithRange(beginDateTime, endDateTime, partitionColumnType);
} else if (partitionType == PartitionType.LIST) {
@@ -182,7 +183,7 @@ public class PartitionExprUtil {
if (hasStringType) {
if (partitionName.length() > MAX_PARTITION_NAME_LENGTH) {
partitionName = partitionName.substring(0, MAX_PARTITION_NAME_LENGTH)
- + "_" + Integer.toHexString(partitionName.hashCode());
+ + "_" + Integer.toHexString(partitionName.hashCode());
}
}
} else {
@@ -223,8 +224,9 @@ public class PartitionExprUtil {
partitionProperties.put(PropertyAnalyzer.PROPERTIES_STORAGE_MEDIUM,
olapTable.getStorageMedium().name());
}
- AddPartitionClause addPartitionClause = new AddPartitionClause(singleRangePartitionDesc,
- distributionDesc, partitionProperties, false);
+ AddPartitionOp addPartitionClause = new AddPartitionOp(
+ singleRangePartitionDesc.translateToPartitionDefinition(),
+ distributionDesc.toDistributionDescriptor(), partitionProperties, false);
result.put(partitionName, addPartitionClause);
}
return result;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionKeyDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionKeyDesc.java
index 223576a52c2..8c6c731e59c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionKeyDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/PartitionKeyDesc.java
@@ -24,6 +24,7 @@ import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.collect.Lists;
+import java.util.ArrayList;
import java.util.List;
// Describe the partition key values in create table or add partition clause
@@ -117,7 +118,7 @@ public class PartitionKeyDesc {
}
public List<PartitionValue> getUpperValues() {
- return upperValues;
+ return upperValues == null ? new ArrayList<>() : upperValues;
}
public List<List<PartitionValue>> getInValues() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
index 4ffc24fdb19..09cba1d773b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/RandomDistributionDesc.java
@@ -22,7 +22,9 @@ import org.apache.doris.catalog.DistributionInfo;
import org.apache.doris.catalog.DistributionInfo.DistributionInfoType;
import org.apache.doris.catalog.RandomDistributionInfo;
import org.apache.doris.common.AnalysisException;
+import org.apache.doris.nereids.trees.plans.commands.info.DistributionDescriptor;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -67,4 +69,9 @@ public class RandomDistributionDesc extends DistributionDesc {
public List<String> getDistributionColumnNames() {
return null;
}
+
+ @Override
+ public DistributionDescriptor toDistributionDescriptor() {
+ return new DistributionDescriptor(false, this.autoBucket, this.numBucket, new ArrayList<>());
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/BrokerMgr.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/BrokerMgr.java
index 82d9c2f0ec1..3ee25e5711b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/BrokerMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/BrokerMgr.java
@@ -29,6 +29,7 @@ import org.apache.doris.common.proc.ProcNodeInterface;
import org.apache.doris.common.proc.ProcResult;
import org.apache.doris.common.util.NetUtils;
import org.apache.doris.common.util.TimeUtils;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyBrokerOp;
import org.apache.doris.persist.gson.GsonUtils;
import com.google.common.collect.ArrayListMultimap;
@@ -86,6 +87,22 @@ public class BrokerMgr {
return brokers;
}
+ public void execute(ModifyBrokerOp modifyBrokerOp) throws DdlException {
+ switch (modifyBrokerOp.getOp()) {
+ case OP_ADD:
+ addBrokers(modifyBrokerOp.getBrokerName(), modifyBrokerOp.getHostPortPairs());
+ break;
+ case OP_DROP:
+ dropBrokers(modifyBrokerOp.getBrokerName(), modifyBrokerOp.getHostPortPairs());
+ break;
+ case OP_DROP_ALL:
+ dropAllBroker(modifyBrokerOp.getBrokerName());
+ break;
+ default:
+ break;
+ }
+ }
+
public void execute(ModifyBrokerClause clause) throws DdlException {
switch (clause.getOp()) {
case OP_ADD:
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 8fa63f6b33b..7d8e59b708b 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
@@ -24,19 +24,9 @@ import org.apache.doris.alter.MaterializedViewHandler;
import org.apache.doris.alter.QuotaType;
import org.apache.doris.alter.SchemaChangeHandler;
import org.apache.doris.alter.SystemHandler;
-import org.apache.doris.analysis.AddPartitionClause;
-import org.apache.doris.analysis.AddPartitionLikeClause;
-import org.apache.doris.analysis.AlterMultiPartitionClause;
-import org.apache.doris.analysis.ColumnRenameClause;
import org.apache.doris.analysis.DistributionDesc;
-import org.apache.doris.analysis.DropPartitionClause;
import org.apache.doris.analysis.Expr;
-import org.apache.doris.analysis.ModifyDistributionClause;
-import org.apache.doris.analysis.PartitionRenameClause;
-import org.apache.doris.analysis.ReplacePartitionClause;
-import org.apache.doris.analysis.RollupRenameClause;
import org.apache.doris.analysis.SlotRef;
-import org.apache.doris.analysis.TableRenameClause;
import org.apache.doris.backup.BackupHandler;
import org.apache.doris.backup.RestoreJob;
import org.apache.doris.binlog.BinlogGcer;
@@ -184,13 +174,23 @@ import org.apache.doris.nereids.trees.plans.commands.DropMTMVCommand;
import org.apache.doris.nereids.trees.plans.commands.DropMaterializedViewCommand;
import org.apache.doris.nereids.trees.plans.commands.TruncateTableCommand;
import org.apache.doris.nereids.trees.plans.commands.UninstallPluginCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionLikeOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
import org.apache.doris.nereids.trees.plans.commands.info.AlterMTMVPropertyInfo;
import org.apache.doris.nereids.trees.plans.commands.info.AlterMTMVRefreshInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterMultiPartitionOp;
import org.apache.doris.nereids.trees.plans.commands.info.AlterViewInfo;
import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
import org.apache.doris.nereids.trees.plans.commands.info.CreateTableLikeInfo;
import org.apache.doris.nereids.trees.plans.commands.info.CreateViewInfo;
import org.apache.doris.nereids.trees.plans.commands.info.DropMTMVInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyDistributionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenamePartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameRollupOp;
+import org.apache.doris.nereids.trees.plans.commands.info.RenameTableOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionOp;
import org.apache.doris.persist.AlterMTMV;
import org.apache.doris.persist.AutoIncrementIdUpdateLog;
import org.apache.doris.persist.BackendReplicasInfo;
@@ -3483,36 +3483,36 @@ public class Env {
*
* @param db
* @param tableName
- * @param addPartitionClause clause in the CreateTableStmt
+ * @param addPartitionOp clause in the CreateTableStmt
* @param isCreateTable this call is for creating table
* @param generatedPartitionId the preset partition id for the partition to add
* @param writeEditLog whether to write an edit log for this addition
* @return PartitionPersistInfo to be written to editlog. It may be null if no partitions added.
* @throws DdlException
*/
- public PartitionPersistInfo addPartition(Database db, String tableName, AddPartitionClause addPartitionClause,
+ public PartitionPersistInfo addPartition(Database db, String tableName, AddPartitionOp addPartitionOp,
boolean isCreateTable, long generatedPartitionId,
boolean writeEditLog) throws DdlException {
- return getInternalCatalog().addPartition(db, tableName, addPartitionClause,
+ return getInternalCatalog().addPartition(db, tableName, addPartitionOp,
isCreateTable, generatedPartitionId, writeEditLog);
}
- public void addMultiPartitions(Database db, String tableName, AlterMultiPartitionClause multiPartitionClause)
+ public void addMultiPartitions(Database db, String tableName, AlterMultiPartitionOp multiPartitionOp)
throws DdlException {
- getInternalCatalog().addMultiPartitions(db, tableName, multiPartitionClause);
+ getInternalCatalog().addMultiPartitions(db, tableName, multiPartitionOp);
}
- public void addPartitionLike(Database db, String tableName, AddPartitionLikeClause addPartitionLikeClause)
+ public void addPartitionLike(Database db, String tableName, AddPartitionLikeOp addPartitionLikeOp)
throws DdlException {
- getInternalCatalog().addPartitionLike(db, tableName, addPartitionLikeClause);
+ getInternalCatalog().addPartitionLike(db, tableName, addPartitionLikeOp);
}
public void replayAddPartition(PartitionPersistInfo info) throws MetaNotFoundException {
getInternalCatalog().replayAddPartition(info);
}
- public void dropPartition(Database db, OlapTable olapTable, DropPartitionClause clause) throws DdlException {
- getInternalCatalog().dropPartition(db, olapTable, clause);
+ public void dropPartition(Database db, OlapTable olapTable, DropPartitionOp dropPartitionOp) throws DdlException {
+ getInternalCatalog().dropPartition(db, olapTable, dropPartitionOp);
}
public void replayDropPartition(DropPartitionInfo info) throws MetaNotFoundException {
@@ -5398,8 +5398,8 @@ public class Env {
getBackupHandler().cancel(command);
}
- public void renameTable(Database db, Table table, TableRenameClause tableRenameClause) throws DdlException {
- renameTable(db, table, tableRenameClause.getNewTableName());
+ public void renameTable(Database db, Table table, RenameTableOp renameTableOp) throws DdlException {
+ renameTable(db, table, renameTableOp.getNewTableName());
}
// entry of rename table operation
@@ -5607,17 +5607,17 @@ public class Env {
}
}
- public void renameRollup(Database db, OlapTable table, RollupRenameClause renameClause) throws DdlException {
+ public void renameRollup(Database db, OlapTable table, RenameRollupOp renameRollupOp) throws DdlException {
table.writeLockOrDdlException();
try {
table.checkNormalStateForAlter();
- String rollupName = renameClause.getRollupName();
+ String rollupName = renameRollupOp.getRollupName();
// check if it is base table name
if (rollupName.equals(table.getName())) {
throw new DdlException("Using ALTER TABLE RENAME to change table name");
}
- String newRollupName = renameClause.getNewRollupName();
+ String newRollupName = renameRollupOp.getNewRollupName();
if (rollupName.equals(newRollupName)) {
throw new DdlException("Same rollup name");
}
@@ -5666,18 +5666,18 @@ public class Env {
}
}
- public void renamePartition(Database db, OlapTable table, PartitionRenameClause renameClause) throws DdlException {
+ public void renamePartition(Database db, OlapTable table, RenamePartitionOp renamePartitionOp) throws DdlException {
table.writeLockOrDdlException();
try {
table.checkNormalStateForAlter();
if (table.getPartitionInfo().getType() != PartitionType.RANGE
&& table.getPartitionInfo().getType() != PartitionType.LIST) {
throw new DdlException(
- "Table[" + table.getName() + "] is single partitioned. " + "no need to rename partition name.");
+ "Table[" + table.getName() + "] is single partitioned. " + "no need to rename partition name.");
}
- String partitionName = renameClause.getPartitionName();
- String newPartitionName = renameClause.getNewPartitionName();
+ String partitionName = renamePartitionOp.getPartitionName();
+ String newPartitionName = renamePartitionOp.getNewPartitionName();
if (partitionName.equalsIgnoreCase(newPartitionName)) {
throw new DdlException("Same partition name");
}
@@ -5881,11 +5881,11 @@ public class Env {
}
}
- public void renameColumn(Database db, OlapTable table, ColumnRenameClause renameClause) throws DdlException {
+ public void renameColumn(Database db, OlapTable table, RenameColumnOp renameColumnOp) throws DdlException {
table.writeLockOrDdlException();
try {
- String colName = renameClause.getColName();
- String newColName = renameClause.getNewColName();
+ String colName = renameColumnOp.getColName();
+ String newColName = renameColumnOp.getNewColName();
Map<Long, Integer> indexIdToSchemaVersion = new HashMap<Long, Integer>();
renameColumn(db, table, colName, newColName, indexIdToSchemaVersion, false);
} finally {
@@ -6159,7 +6159,7 @@ public class Env {
}
public void modifyDefaultDistributionBucketNum(Database db, OlapTable olapTable,
- ModifyDistributionClause modifyDistributionClause)
+ ModifyDistributionOp modifyDistributionOp)
throws DdlException {
olapTable.writeLockOrDdlException();
try {
@@ -6172,7 +6172,7 @@ public class Env {
throw new DdlException("Only support change partitioned table's distribution.");
}
- DistributionDesc distributionDesc = modifyDistributionClause.getDistributionDesc();
+ DistributionDesc distributionDesc = modifyDistributionOp.getDistributionDesc().translateToCatalogStyle();
if (distributionDesc != null) {
DistributionInfo defaultDistributionInfo = olapTable.getDefaultDistributionInfo();
List<Column> baseSchema = olapTable.getBaseSchema();
@@ -6180,14 +6180,14 @@ public class Env {
// for now. we only support modify distribution's bucket num
if (distributionInfo.getType() != defaultDistributionInfo.getType()) {
throw new DdlException(
- "Cannot change distribution type when modify" + " default distribution bucket num");
+ "Cannot change distribution type when modify" + " default distribution bucket num");
}
if (distributionInfo.getType() == DistributionInfoType.HASH) {
HashDistributionInfo hashDistributionInfo = (HashDistributionInfo) distributionInfo;
if (!hashDistributionInfo.sameDistributionColumns((HashDistributionInfo) defaultDistributionInfo)) {
throw new DdlException("Cannot assign hash distribution with different distribution cols. "
- + "new is: " + hashDistributionInfo.getDistributionColumns() + " default is: "
- + ((HashDistributionInfo) defaultDistributionInfo).getDistributionColumns());
+ + "new is: " + hashDistributionInfo.getDistributionColumns() + " default is: "
+ + ((HashDistributionInfo) defaultDistributionInfo).getDistributionColumns());
}
}
@@ -6200,8 +6200,8 @@ public class Env {
ModifyTableDefaultDistributionBucketNumOperationLog info
= new ModifyTableDefaultDistributionBucketNumOperationLog(db.getId(), olapTable.getId(),
- distributionInfo.getType(), distributionInfo.getAutoBucket(), bucketNum,
- defaultDistributionInfo.getColumnsName());
+ distributionInfo.getType(), distributionInfo.getAutoBucket(), bucketNum,
+ defaultDistributionInfo.getColumnsName());
editLog.logModifyDefaultDistributionBucketNum(info);
LOG.info("modify table[{}] default bucket num to {}", olapTable.getName(), bucketNum);
}
@@ -6692,14 +6692,14 @@ public class Env {
/*
* The entry of replacing partitions with temp partitions.
*/
- public void replaceTempPartition(Database db, OlapTable olapTable, ReplacePartitionClause clause)
+ public void replaceTempPartition(Database db, OlapTable olapTable, ReplacePartitionOp replacePartitionOp)
throws DdlException {
Preconditions.checkState(olapTable.isWriteLockHeldByCurrentThread());
- List<String> partitionNames = clause.getPartitionNames();
- List<String> tempPartitionNames = clause.getTempPartitionNames();
- boolean isStrictRange = clause.isStrictRange();
- boolean useTempPartitionName = clause.useTempPartitionName();
- boolean isForceDropOld = clause.isForceDropOldPartition();
+ List<String> partitionNames = replacePartitionOp.getPartitionNames();
+ List<String> tempPartitionNames = replacePartitionOp.getTempPartitionNames();
+ boolean isStrictRange = replacePartitionOp.isStrictRange();
+ boolean useTempPartitionName = replacePartitionOp.useTempPartitionName();
+ boolean isForceDropOld = replacePartitionOp.isForceDropOldPartition();
// check partition exist
for (String partName : partitionNames) {
if (!olapTable.checkPartitionNameExist(partName, false)) {
@@ -6727,8 +6727,8 @@ public class Env {
// it does not affect the logic of replace the partition
try {
Env.getCurrentEnv().getEventProcessor().processEvent(
- new ReplacePartitionEvent(db.getCatalog().getId(), db.getId(),
- olapTable.getId()));
+ new ReplacePartitionEvent(db.getCatalog().getId(), db.getId(),
+ olapTable.getId()));
} catch (Throwable t) {
// According to normal logic, no exceptions will be thrown,
// but in order to avoid bugs affecting the original logic, all exceptions are caught
@@ -6741,8 +6741,9 @@ public class Env {
versionTime,
isForceDropOld);
editLog.logReplaceTempPartition(info);
- LOG.info("finished to replace partitions {} with temp partitions {} from table: {}", clause.getPartitionNames(),
- clause.getTempPartitionNames(), olapTable.getName());
+ LOG.info("finished to replace partitions {} with temp partitions {} from table: {}",
+ replacePartitionOp.getPartitionNames(),
+ replacePartitionOp.getTempPartitionNames(), olapTable.getName());
}
public void replayReplaceTempPartition(ReplacePartitionOperationLog replaceTempPartitionLog)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
index 390ce3aacbc..88a812bdc90 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java
@@ -17,9 +17,7 @@
package org.apache.doris.clone;
-import org.apache.doris.analysis.AddPartitionClause;
import org.apache.doris.analysis.DistributionDesc;
-import org.apache.doris.analysis.DropPartitionClause;
import org.apache.doris.analysis.HashDistributionDesc;
import org.apache.doris.analysis.PartitionKeyDesc;
import org.apache.doris.analysis.PartitionValue;
@@ -56,6 +54,8 @@ import org.apache.doris.common.util.RangeUtils;
import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.datasource.InternalCatalog;
import org.apache.doris.meta.MetaContext;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
import org.apache.doris.nereids.util.DateUtils;
import org.apache.doris.persist.PartitionPersistInfo;
import org.apache.doris.thrift.TStorageMedium;
@@ -266,9 +266,10 @@ public class DynamicPartitionScheduler extends MasterDaemon {
return Pair.of(bucketsNum, previousPartitionBucketsNum);
}
- private ArrayList<AddPartitionClause> getAddPartitionClause(Database db, OlapTable olapTable,
- Column partitionColumn, String partitionFormat, boolean executeFirstTime) throws DdlException {
- ArrayList<AddPartitionClause> addPartitionClauses = new ArrayList<>();
+ private ArrayList<AddPartitionOp> getAddPartitionOp(Database db, OlapTable olapTable,
+ Column partitionColumn, String partitionFormat,
+ boolean executeFirstTime) throws DdlException {
+ ArrayList<AddPartitionOp> addPartitionOps = new ArrayList<>();
DynamicPartitionProperty dynamicPartitionProperty = olapTable.getTableProperty().getDynamicPartitionProperty();
RangePartitionInfo rangePartitionInfo = (RangePartitionInfo) olapTable.getPartitionInfo();
ZonedDateTime now = ZonedDateTime.now(dynamicPartitionProperty.getTimeZone().toZoneId());
@@ -278,7 +279,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
// When enable create_history_partition, will check the valid value from start and history_partition_num.
if (createHistoryPartition) {
idx = DynamicPartitionUtil.getRealStart(dynamicPartitionProperty.getStart(),
- dynamicPartitionProperty.getHistoryPartitionNum());
+ dynamicPartitionProperty.getHistoryPartitionNum());
} else {
idx = 0;
}
@@ -314,7 +315,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
db.getFullName(), olapTable.getName(), idx, e);
if (executeFirstTime) {
throw new DdlException("maybe dynamic_partition.start is too small, error: "
- + e.getMessage());
+ + e.getMessage());
}
continue;
}
@@ -392,9 +393,10 @@ public class DynamicPartitionScheduler extends MasterDaemon {
distributionDesc = new RandomDistributionDesc(bucketsNum);
}
// add partition according to partition desc and distribution desc
- addPartitionClauses.add(new AddPartitionClause(rangePartitionDesc, distributionDesc, null, false));
+ addPartitionOps.add(new AddPartitionOp(rangePartitionDesc.translateToPartitionDefinition(),
+ distributionDesc.toDistributionDescriptor(), null, false));
}
- return addPartitionClauses;
+ return addPartitionOps;
}
public static int checkAndFixAutoBucketCalcNumIsValid(int currentPartitionNumBuckets,
@@ -500,13 +502,14 @@ public class DynamicPartitionScheduler extends MasterDaemon {
* 1. get the range of [start, 0) as a reserved range.
* 2. get DropPartitionClause of partitions which range are before this reserved range.
*/
- private ArrayList<DropPartitionClause> getDropPartitionClauseForDynamic(Database db, OlapTable olapTable,
- Column partitionColumn, String partitionFormat) throws DdlException {
- ArrayList<DropPartitionClause> dropPartitionClauses = new ArrayList<>();
+ private ArrayList<DropPartitionOp> getDropPartitionOpForDynamic(Database db, OlapTable olapTable,
+ Column partitionColumn, String partitionFormat)
+ throws DdlException {
+ ArrayList<DropPartitionOp> dropPartitionOps = new ArrayList<>();
DynamicPartitionProperty dynamicPartitionProperty = olapTable.getTableProperty().getDynamicPartitionProperty();
if (dynamicPartitionProperty.getStart() == DynamicPartitionProperty.MIN_START_OFFSET) {
// not set start offset, so not drop any partition
- return dropPartitionClauses;
+ return dropPartitionOps;
}
// drop partition only considering start, not considering history_partition_num.
@@ -529,7 +532,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
Collections.singletonList(partitionColumn));
// if start offset very small, then lowerBound may be very large, such as '6031-07-01 00:00:00'
if (lowerBound.compareTo(limitBound) >= 0) {
- return dropPartitionClauses;
+ return dropPartitionOps;
}
reservePartitionKeyRange = Range.atLeast(lowerBound);
reservedHistoryPartitionKeyRangeList.add(reservePartitionKeyRange);
@@ -542,7 +545,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
db.getFullName(), olapTable.getName(), hint, e);
recordDropPartitionFailedMsg(db.getFullName(), olapTable.getName(), hint + ", error: " + e.getMessage(),
olapTable.getId());
- return dropPartitionClauses;
+ return dropPartitionOps;
}
String reservedHistoryPeriods = dynamicPartitionProperty.getReservedHistoryPeriods();
@@ -561,9 +564,9 @@ public class DynamicPartitionScheduler extends MasterDaemon {
lowerBorderOfReservedHistory, upperBorderOfReservedHistory);
reservedHistoryPartitionKeyRangeList.add(reservedHistoryPartitionKeyRange);
} catch (IllegalArgumentException e) {
- return dropPartitionClauses;
+ return dropPartitionOps;
} catch (org.apache.doris.common.AnalysisException
- | org.apache.doris.nereids.exceptions.AnalysisException e) {
+ | org.apache.doris.nereids.exceptions.AnalysisException e) {
throw new DdlException(e.getMessage());
}
}
@@ -589,18 +592,18 @@ public class DynamicPartitionScheduler extends MasterDaemon {
// catalog recycle bin. This is for safe reason.
if (!isContaineds.get(dropPartitionId)) {
String dropPartitionName = olapTable.getPartition(dropPartitionId).getName();
- dropPartitionClauses.add(new DropPartitionClause(false, dropPartitionName, false, false));
+ dropPartitionOps.add(new DropPartitionOp(false, dropPartitionName, false, false));
}
}
- return dropPartitionClauses;
+ return dropPartitionOps;
}
/**
* Get drop partition clauses for AUTO PARTITION tables based on partition.retention_count
*/
- private ArrayList<DropPartitionClause> getDropPartitionClauseForAutoPartition(Database db, OlapTable olapTable)
+ private ArrayList<DropPartitionOp> getDropPartitionOpForAutoPartition(Database db, OlapTable olapTable)
throws DdlException {
- ArrayList<DropPartitionClause> dropPartitionClauses = new ArrayList<>();
+ ArrayList<DropPartitionOp> dropPartitionOps = new ArrayList<>();
// when create/modify table, we already checked retentionCount validity.
// only restrict history partitions with this value. not drop any future partition.
@@ -649,10 +652,10 @@ public class DynamicPartitionScheduler extends MasterDaemon {
String dropPartitionName = olapTable.getPartition(dropPartitionId).getName();
// Do not drop the partition "by force", or the partition will be dropped directly instead of being in
// catalog recycle bin. This is for safe reason.
- dropPartitionClauses.add(new DropPartitionClause(false, dropPartitionName, false, false));
+ dropPartitionOps.add(new DropPartitionOp(false, dropPartitionName, false, false));
}
- return dropPartitionClauses;
+ return dropPartitionOps;
}
// make public just for fe ut
@@ -669,8 +672,8 @@ public class DynamicPartitionScheduler extends MasterDaemon {
continue;
}
- ArrayList<AddPartitionClause> addPartitionClauses = new ArrayList<>();
- ArrayList<DropPartitionClause> dropPartitionClauses = new ArrayList<>();
+ ArrayList<AddPartitionOp> addPartitionOps = new ArrayList<>();
+ ArrayList<DropPartitionOp> dropPartitionOps = new ArrayList<>();
String tableName = null;
boolean skipAddPartition = false;
OlapTable olapTable;
@@ -723,16 +726,16 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
if (!skipAddPartition) {
- addPartitionClauses = getAddPartitionClause(db, olapTable, partitionColumn, partitionFormat,
+ addPartitionOps = getAddPartitionOp(db, olapTable, partitionColumn, partitionFormat,
executeFirstTime);
}
clearDropPartitionFailedMsg(olapTable.getId());
if (olapTable.getPartitionRetentionCount() > 0) {
// Handle AUTO PARTITION cleanup based on partition.retention_count
- dropPartitionClauses = getDropPartitionClauseForAutoPartition(db, olapTable);
+ dropPartitionOps = getDropPartitionOpForAutoPartition(db, olapTable);
} else {
// Handle dynamic partition cleanup
- dropPartitionClauses = getDropPartitionClauseForDynamic(db, olapTable, partitionColumn,
+ dropPartitionOps = getDropPartitionOpForDynamic(db, olapTable, partitionColumn,
partitionFormat);
}
tableName = olapTable.getName();
@@ -746,12 +749,12 @@ public class DynamicPartitionScheduler extends MasterDaemon {
olapTable.readUnlock();
}
- for (DropPartitionClause dropPartitionClause : dropPartitionClauses) {
+ for (DropPartitionOp dropPartitionOp : dropPartitionOps) {
if (!olapTable.writeLockIfExist()) {
continue;
}
try {
- Env.getCurrentEnv().dropPartition(db, olapTable, dropPartitionClause);
+ Env.getCurrentEnv().dropPartition(db, olapTable, dropPartitionOp);
} catch (Exception e) {
recordDropPartitionFailedMsg(db.getFullName(), tableName, e.getMessage(), olapTable.getId());
LOG.warn("db [{}-{}], table [{}-{}]'s dynamic partition has error",
@@ -768,11 +771,11 @@ public class DynamicPartitionScheduler extends MasterDaemon {
// get partitionIds and indexIds
List<Long> indexIds = new ArrayList<>(olapTable.getCopiedIndexIdToMeta().keySet());
List<Long> generatedPartitionIds = new ArrayList<>();
- cloudBatchBeforeCreatePartitions(executeFirstTime, addPartitionClauses, olapTable, indexIds,
+ cloudBatchBeforeCreatePartitions(executeFirstTime, addPartitionOps, olapTable, indexIds,
db, tableName, generatedPartitionIds);
List<PartitionPersistInfo> partsInfo = new ArrayList<>();
- for (int i = 0; i < addPartitionClauses.size(); i++) {
+ for (int i = 0; i < addPartitionOps.size(); i++) {
try {
boolean needWriteEditLog = true;
// ATTN: !executeFirstTime, needWriteEditLog
@@ -781,7 +784,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
needWriteEditLog = !executeFirstTime;
}
PartitionPersistInfo info =
- Env.getCurrentEnv().addPartition(db, tableName, addPartitionClauses.get(i),
+ Env.getCurrentEnv().addPartition(db, tableName, addPartitionOps.get(i),
executeFirstTime,
executeFirstTime && Config.isCloudMode() ? generatedPartitionIds.get(i) : 0,
needWriteEditLog);
@@ -800,10 +803,10 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
}
cloudBatchAfterCreatePartitions(executeFirstTime, partsInfo,
- addPartitionClauses, db, olapTable, indexIds, tableName);
+ addPartitionOps, db, olapTable, indexIds, tableName);
// ATTN: Breaking up dynamic partition table scheduling, consuming peak CPU consumption
- if (!executeFirstTime && !addPartitionClauses.isEmpty()
+ if (!executeFirstTime && !addPartitionOps.isEmpty()
&& Config.dynamic_partition_step_interval_ms > 0) {
long sleep = Config.dynamic_partition_step_interval_ms;
if (sleep > 1800 * 1000) {
@@ -820,7 +823,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
private void cloudBatchAfterCreatePartitions(boolean executeFirstTime, List<PartitionPersistInfo> partsInfo,
- ArrayList<AddPartitionClause> addPartitionClauses, Database db,
+ ArrayList<AddPartitionOp> addPartitionOps, Database db,
OlapTable olapTable, List<Long> indexIds,
String tableName) throws DdlException {
if (Config.isNotCloudMode()) {
@@ -828,8 +831,8 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
List<Long> succeedPartitionIds = partsInfo.stream().map(partitionPersistInfo
-> partitionPersistInfo.getPartition().getId()).collect(Collectors.toList());
- if (!executeFirstTime || addPartitionClauses.isEmpty()) {
- LOG.info("cloud commit rpc in batch, {}-{}", !executeFirstTime, addPartitionClauses.size());
+ if (!executeFirstTime || addPartitionOps.isEmpty()) {
+ LOG.info("cloud commit rpc in batch, {}-{}", !executeFirstTime, addPartitionOps.size());
return;
}
try {
@@ -875,18 +878,18 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
private void cloudBatchBeforeCreatePartitions(boolean executeFirstTime,
- ArrayList<AddPartitionClause> addPartitionClauses,
+ ArrayList<AddPartitionOp> addPartitionOps,
OlapTable olapTable, List<Long> indexIds, Database db,
String tableName, List<Long> generatedPartitionIds)
throws DdlException {
if (Config.isNotCloudMode()) {
return;
}
- if (!executeFirstTime || addPartitionClauses.isEmpty()) {
- LOG.info("cloud prepare rpc in batch, {}-{}", !executeFirstTime, addPartitionClauses.size());
+ if (!executeFirstTime || addPartitionOps.isEmpty()) {
+ LOG.info("cloud prepare rpc in batch, {}-{}", !executeFirstTime, addPartitionOps.size());
return;
}
- AddPartitionClause addPartitionClause = addPartitionClauses.get(0);
+ AddPartitionOp addPartitionClause = addPartitionOps.get(0);
DistributionDesc distributionDesc = addPartitionClause.getDistributionDesc();
try {
DistributionInfo distributionInfo = distributionDesc
@@ -896,7 +899,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
.toDistributionDesc().toDistributionInfo(olapTable.getBaseSchema());
}
long allPartitionBufferSize = 0;
- for (int i = 0; i < addPartitionClauses.size(); i++) {
+ for (int i = 0; i < addPartitionOps.size(); i++) {
long bufferSize = InternalCatalog.checkAndGetBufferSize(indexIds.size(),
distributionInfo.getBucketNum(),
addPartitionClause.getSingeRangePartitionDesc()
@@ -906,7 +909,7 @@ public class DynamicPartitionScheduler extends MasterDaemon {
}
MetaIdGenerator.IdGeneratorBuffer idGeneratorBuffer = Env.getCurrentEnv()
.getIdGeneratorBuffer(allPartitionBufferSize);
- addPartitionClauses.forEach(p -> generatedPartitionIds.add(idGeneratorBuffer.getNextId()));
+ addPartitionOps.forEach(p -> generatedPartitionIds.add(idGeneratorBuffer.getNextId()));
// executeFirstTime true
Env.getCurrentInternalCatalog().beforeCreatePartitions(db.getId(), olapTable.getId(),
generatedPartitionIds, indexIds, true);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/IdGeneratorUtil.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/IdGeneratorUtil.java
index 2aa7086b0ea..22a7d958108 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/common/util/IdGeneratorUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/IdGeneratorUtil.java
@@ -36,7 +36,7 @@ public class IdGeneratorUtil {
long bufferSize = 1;
long partitionNum = createTableInfo.getPartitionDesc() == null ? 1 :
createTableInfo.getPartitionDesc().getSinglePartitionDescs().size();
- long indexNum = createTableInfo.getRollupAlterClauseList().size() + 1;
+ long indexNum = createTableInfo.getAddRollupOps().size() + 1;
long bucketNum = createTableInfo.getDistributionDesc().toDistributionInfo(createTableInfo.getColumns())
.getBucketNum();
bufferSize = bufferSize + partitionNum + indexNum;
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 53aada4fb46..7ffff48608d 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
@@ -18,14 +18,8 @@
package org.apache.doris.datasource;
import org.apache.doris.alter.QuotaType;
-import org.apache.doris.analysis.AddPartitionClause;
-import org.apache.doris.analysis.AddPartitionLikeClause;
-import org.apache.doris.analysis.AddRollupClause;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.AlterMultiPartitionClause;
import org.apache.doris.analysis.DataSortInfo;
import org.apache.doris.analysis.DistributionDesc;
-import org.apache.doris.analysis.DropPartitionClause;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.KeysDesc;
import org.apache.doris.analysis.MultiPartitionDesc;
@@ -121,7 +115,13 @@ import org.apache.doris.mtmv.BaseTableInfo;
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.AddPartitionLikeOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AddRollupOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterMultiPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
import org.apache.doris.nereids.trees.plans.commands.info.CreateTableInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
import org.apache.doris.persist.AlterDatabasePropertyInfo;
import org.apache.doris.persist.AutoIncrementIdUpdateLog;
import org.apache.doris.persist.ColocatePersistInfo;
@@ -1309,7 +1309,7 @@ public class InternalCatalog implements CatalogIf<Database> {
}
}
- public void addPartitionLike(Database db, String tableName, AddPartitionLikeClause addPartitionLikeClause)
+ public void addPartitionLike(Database db, String tableName, AddPartitionLikeOp addPartitionLikeOp)
throws DdlException {
try {
Table table = db.getTableOrDdlException(tableName);
@@ -1319,44 +1319,45 @@ public class InternalCatalog implements CatalogIf<Database> {
}
// Lock the table to prevent other SQL from performing write operation during table structure modification
- AddPartitionClause clause = null;
+ AddPartitionOp addPartitionOp = null;
table.readLock();
try {
- String partitionName = addPartitionLikeClause.getPartitionName();
- String existedName = addPartitionLikeClause.getExistedPartitionName();
+ String partitionName = addPartitionLikeOp.getPartitionName();
+ String existedName = addPartitionLikeOp.getExistedPartitionName();
OlapTable olapTable = (OlapTable) table;
Partition part = olapTable.getPartition(existedName);
if (part == null) {
throw new DdlException("Failed to ADD PARTITION" + partitionName + " LIKE "
- + existedName + ". Reason: " + "partition " + existedName + "not exist");
+ + existedName + ". Reason: " + "partition " + existedName + "not exist");
}
PartitionInfo partitionInfo = olapTable.getPartitionInfo();
SinglePartitionDesc newPartitionDesc;
if (partitionInfo instanceof SinglePartitionInfo) {
newPartitionDesc = new SinglePartitionDesc(false, partitionName,
- PartitionKeyDesc.DUMMY_KEY_DESC, Maps.newHashMap());
+ PartitionKeyDesc.DUMMY_KEY_DESC, Maps.newHashMap());
} else {
PartitionDesc partitionDesc = partitionInfo.toPartitionDesc((OlapTable) table);
SinglePartitionDesc oldPartitionDesc = partitionDesc.getSinglePartitionDescByName(existedName);
if (oldPartitionDesc == null) {
throw new DdlException("Failed to ADD PARTITION" + partitionName + " LIKE "
- + existedName + ". Reason: " + "partition " + existedName + "desc not exist");
+ + existedName + ". Reason: " + "partition " + existedName + "desc not exist");
}
newPartitionDesc = new SinglePartitionDesc(false, partitionName,
- oldPartitionDesc.getPartitionKeyDesc(), oldPartitionDesc.getProperties());
+ oldPartitionDesc.getPartitionKeyDesc(), oldPartitionDesc.getProperties());
}
DistributionDesc distributionDesc = part.getDistributionInfo().toDistributionDesc();
Map<String, String> properties = newPartitionDesc.getProperties();
- clause = new AddPartitionClause(newPartitionDesc, distributionDesc,
- properties, addPartitionLikeClause.getIsTempPartition());
+ addPartitionOp = new AddPartitionOp(newPartitionDesc,
+ distributionDesc.toDistributionDescriptor(),
+ properties, addPartitionLikeOp.getTempPartition());
} finally {
table.readUnlock();
}
- addPartition(db, tableName, clause, false, 0, true);
+ addPartition(db, tableName, addPartitionOp, false, 0, true);
} catch (UserException e) {
- throw new DdlException("Failed to ADD PARTITION " + addPartitionLikeClause.getPartitionName()
- + " LIKE " + addPartitionLikeClause.getExistedPartitionName() + ". Reason: " + e.getMessage());
+ throw new DdlException("Failed to ADD PARTITION " + addPartitionLikeOp.getPartitionName()
+ + " LIKE " + addPartitionLikeOp.getExistedPartitionName() + ". Reason: " + e.getMessage());
}
}
@@ -1441,7 +1442,7 @@ public class InternalCatalog implements CatalogIf<Database> {
}
}
- public PartitionPersistInfo addPartition(Database db, String tableName, AddPartitionClause addPartitionClause,
+ public PartitionPersistInfo addPartition(Database db, String tableName, AddPartitionOp addPartitionOp,
boolean isCreateTable, long generatedPartitionId,
boolean writeEditLog) throws DdlException {
// in cloud mode, isCreateTable == true, create dynamic partition use, so partitionId must have been generated.
@@ -1450,9 +1451,9 @@ public class InternalCatalog implements CatalogIf<Database> {
&& (isCreateTable && generatedPartitionId == 0) || (!isCreateTable && generatedPartitionId != 0)) {
throw new DdlException("not impossible");
}
- SinglePartitionDesc singlePartitionDesc = addPartitionClause.getSingeRangePartitionDesc();
- DistributionDesc distributionDesc = addPartitionClause.getDistributionDesc();
- boolean isTempPartition = addPartitionClause.isTempPartition();
+ SinglePartitionDesc singlePartitionDesc = addPartitionOp.getSingeRangePartitionDesc();
+ DistributionDesc distributionDesc = addPartitionOp.getDistributionDesc();
+ boolean isTempPartition = addPartitionOp.isTempPartition();
DistributionInfo distributionInfo;
Map<Long, MaterializedIndexMeta> indexIdToMeta;
@@ -1501,8 +1502,8 @@ public class InternalCatalog implements CatalogIf<Database> {
* And JCUP choose to bind to AddPartitionClause, so we should add properties of AddPartitionClause to
* SinglePartitionDesc's properties here.
*/
- if (null != addPartitionClause.getProperties()) {
- properties.putAll(addPartitionClause.getProperties());
+ if (null != addPartitionOp.getProperties()) {
+ properties.putAll(addPartitionOp.getProperties());
}
// partition properties should inherit table properties
@@ -1819,21 +1820,22 @@ public class InternalCatalog implements CatalogIf<Database> {
}
}
- public void addMultiPartitions(Database db, String tableName, AlterMultiPartitionClause multiPartitionClause)
+ public void addMultiPartitions(Database db, String tableName, AlterMultiPartitionOp multiPartitionOp)
throws DdlException {
List<SinglePartitionDesc> singlePartitionDescs;
try {
- MultiPartitionDesc multiPartitionDesc = new MultiPartitionDesc(multiPartitionClause.getPartitionKeyDesc(),
- multiPartitionClause.getProperties());
+ MultiPartitionDesc multiPartitionDesc = new MultiPartitionDesc(multiPartitionOp.getPartitionKeyDesc(),
+ multiPartitionOp.getProperties());
singlePartitionDescs = multiPartitionDesc.getSinglePartitionDescList();
} catch (AnalysisException e) {
throw new DdlException("Failed to analyze multi partition clause: " + e.getMessage());
}
for (SinglePartitionDesc singlePartitionDesc : singlePartitionDescs) {
- AddPartitionClause addPartitionClause = new AddPartitionClause(singlePartitionDesc, null,
- multiPartitionClause.getProperties(), false);
- addPartition(db, tableName, addPartitionClause, false, 0, true);
+ AddPartitionOp addPartitionOp = new AddPartitionOp(
+ singlePartitionDesc.translateToPartitionDefinition(), null,
+ multiPartitionOp.getProperties(), false);
+ addPartition(db, tableName, addPartitionOp, false, 0, true);
}
}
@@ -1881,16 +1883,16 @@ public class InternalCatalog implements CatalogIf<Database> {
}
}
- public void dropPartition(Database db, OlapTable olapTable, DropPartitionClause clause) throws DdlException {
+ public void dropPartition(Database db, OlapTable olapTable, DropPartitionOp dropPartitionOp) throws DdlException {
Preconditions.checkArgument(olapTable.isWriteLockHeldByCurrentThread());
- String partitionName = clause.getPartitionName();
- boolean isTempPartition = clause.isTempPartition();
- boolean isForceDrop = clause.isForceDrop();
+ String partitionName = dropPartitionOp.getPartitionName();
+ boolean isTempPartition = dropPartitionOp.isTempPartition();
+ boolean isForceDrop = dropPartitionOp.isForceDrop();
olapTable.checkNormalStateForAlter();
if (!olapTable.checkPartitionNameExist(partitionName, isTempPartition)) {
- if (clause.isSetIfExists()) {
+ if (dropPartitionOp.isSetIfExists()) {
LOG.info("drop partition[{}] which does not exist", partitionName);
return;
} else {
@@ -1907,12 +1909,12 @@ public class InternalCatalog implements CatalogIf<Database> {
if (!isTempPartition && !isForceDrop) {
Partition partition = olapTable.getPartition(partitionName);
if (partition != null && Env.getCurrentGlobalTransactionMgr()
- .existCommittedTxns(db.getId(), olapTable.getId(), partition.getId())) {
+ .existCommittedTxns(db.getId(), olapTable.getId(), partition.getId())) {
throw new DdlException(
- "There are still some transactions in the COMMITTED state waiting to be completed."
- + " The partition [" + partitionName
- + "] cannot be dropped. If you want to forcibly drop(cannot be recovered),"
- + " please use \"DROP partition FORCE\".");
+ "There are still some transactions in the COMMITTED state waiting to be completed."
+ + " The partition [" + partitionName
+ + "] cannot be dropped. If you want to forcibly drop(cannot be recovered),"
+ + " please use \"DROP partition FORCE\".");
}
}
@@ -2814,30 +2816,30 @@ public class InternalCatalog implements CatalogIf<Database> {
olapTable.setIndexMeta(baseIndexId, tableName, baseSchema, schemaVersion, schemaHash, shortKeyColumnCount,
baseIndexStorageType, keysType, olapTable.getIndexes());
- for (AlterClause alterClause : createTableInfo.getRollupAlterClauseList()) {
+ for (AlterOp alterOp : createTableInfo.getAddRollupOps()) {
if (olapTable.isDuplicateWithoutKey()) {
throw new DdlException("Duplicate table without keys do not support add rollup!");
}
- AddRollupClause addRollupClause = (AddRollupClause) alterClause;
+ AddRollupOp addRollupOp = (AddRollupOp) alterOp;
Long baseRollupIndex = olapTable.getIndexIdByName(tableName);
// get storage type for rollup index
TStorageType rollupIndexStorageType = null;
try {
- rollupIndexStorageType = PropertyAnalyzer.analyzeStorageType(addRollupClause.getProperties());
+ rollupIndexStorageType = PropertyAnalyzer.analyzeStorageType(addRollupOp.getProperties());
} catch (AnalysisException e) {
throw new DdlException(e.getMessage());
}
Preconditions.checkNotNull(rollupIndexStorageType);
// set rollup index meta to olap table
List<Column> rollupColumns = Env.getCurrentEnv().getMaterializedViewHandler()
- .checkAndPrepareMaterializedView(addRollupClause, olapTable, baseRollupIndex, false);
- short rollupShortKeyColumnCount = Env.calcShortKeyColumnCount(rollupColumns, alterClause.getProperties(),
+ .checkAndPrepareMaterializedView(addRollupOp, olapTable, baseRollupIndex, false);
+ short rollupShortKeyColumnCount = Env.calcShortKeyColumnCount(rollupColumns, alterOp.getProperties(),
true/*isKeysRequired*/);
int rollupSchemaHash = Util.generateSchemaHash();
long rollupIndexId = idGeneratorBuffer.getNextId();
- olapTable.setIndexMeta(rollupIndexId, addRollupClause.getRollupName(), rollupColumns, schemaVersion,
+ olapTable.setIndexMeta(rollupIndexId, addRollupOp.getRollupName(), rollupColumns, schemaVersion,
rollupSchemaHash, rollupShortKeyColumnCount, rollupIndexStorageType, keysType);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java
index 02d24cc0146..7d386b9a5a1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergExternalCatalog.java
@@ -17,9 +17,6 @@
package org.apache.doris.datasource.iceberg;
-import org.apache.doris.analysis.AddPartitionFieldClause;
-import org.apache.doris.analysis.DropPartitionFieldClause;
-import org.apache.doris.analysis.ReplacePartitionFieldClause;
import org.apache.doris.catalog.Env;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.ThreadPoolManager;
@@ -30,6 +27,9 @@ import org.apache.doris.datasource.InitCatalogLog;
import org.apache.doris.datasource.SessionContext;
import org.apache.doris.datasource.operations.ExternalMetadataOperations;
import org.apache.doris.datasource.property.metastore.AbstractIcebergProperties;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionFieldOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionFieldOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionFieldOp;
import org.apache.doris.transaction.TransactionManagerFactory;
import org.apache.iceberg.catalog.Catalog;
@@ -154,12 +154,12 @@ public abstract class IcebergExternalCatalog extends ExternalCatalog {
/**
* Add partition field to Iceberg table for partition evolution
*/
- public void addPartitionField(IcebergExternalTable table, AddPartitionFieldClause clause) throws UserException {
+ public void addPartitionField(IcebergExternalTable table, AddPartitionFieldOp op) throws UserException {
makeSureInitialized();
if (metadataOps == null) {
throw new UserException("Add partition field operation is not supported for catalog: " + getName());
}
- ((IcebergMetadataOps) metadataOps).addPartitionField(table, clause);
+ ((IcebergMetadataOps) metadataOps).addPartitionField(table, op);
Env.getCurrentEnv().getEditLog()
.logRefreshExternalTable(
ExternalObjectLog.createForRefreshTable(table.getCatalog().getId(),
@@ -169,12 +169,12 @@ public abstract class IcebergExternalCatalog extends ExternalCatalog {
/**
* Drop partition field from Iceberg table for partition evolution
*/
- public void dropPartitionField(IcebergExternalTable table, DropPartitionFieldClause clause) throws UserException {
+ public void dropPartitionField(IcebergExternalTable table, DropPartitionFieldOp op) throws UserException {
makeSureInitialized();
if (metadataOps == null) {
throw new UserException("Drop partition field operation is not supported for catalog: " + getName());
}
- ((IcebergMetadataOps) metadataOps).dropPartitionField(table, clause);
+ ((IcebergMetadataOps) metadataOps).dropPartitionField(table, op);
Env.getCurrentEnv().getEditLog()
.logRefreshExternalTable(
ExternalObjectLog.createForRefreshTable(table.getCatalog().getId(),
@@ -185,12 +185,12 @@ public abstract class IcebergExternalCatalog extends ExternalCatalog {
* Replace partition field in Iceberg table for partition evolution
*/
public void replacePartitionField(IcebergExternalTable table,
- ReplacePartitionFieldClause clause) throws UserException {
+ ReplacePartitionFieldOp op) throws UserException {
makeSureInitialized();
if (metadataOps == null) {
throw new UserException("Replace partition field operation is not supported for catalog: " + getName());
}
- ((IcebergMetadataOps) metadataOps).replacePartitionField(table, clause);
+ ((IcebergMetadataOps) metadataOps).replacePartitionField(table, op);
Env.getCurrentEnv().getEditLog()
.logRefreshExternalTable(
ExternalObjectLog.createForRefreshTable(table.getCatalog().getId(),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
index 8148579743e..a5f6a70b977 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/iceberg/IcebergMetadataOps.java
@@ -17,10 +17,7 @@
package org.apache.doris.datasource.iceberg;
-import org.apache.doris.analysis.AddPartitionFieldClause;
import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.DropPartitionFieldClause;
-import org.apache.doris.analysis.ReplacePartitionFieldClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.StructField;
@@ -38,12 +35,15 @@ import org.apache.doris.datasource.ExternalTable;
import org.apache.doris.datasource.operations.ExternalMetadataOps;
import org.apache.doris.datasource.property.metastore.IcebergRestProperties;
import org.apache.doris.datasource.property.metastore.MetastoreProperties;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionFieldOp;
import org.apache.doris.nereids.trees.plans.commands.info.BranchOptions;
import org.apache.doris.nereids.trees.plans.commands.info.CreateOrReplaceBranchInfo;
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.DropPartitionFieldOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropTagInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionFieldOp;
import org.apache.doris.nereids.trees.plans.commands.info.TagOptions;
import com.google.common.annotations.VisibleForTesting;
@@ -808,14 +808,14 @@ public class IcebergMetadataOps implements ExternalMetadataOps {
/**
* Add partition field to Iceberg table for partition evolution
*/
- public void addPartitionField(ExternalTable dorisTable, AddPartitionFieldClause clause) throws UserException {
+ public void addPartitionField(ExternalTable dorisTable, AddPartitionFieldOp op) throws UserException {
Table icebergTable = IcebergUtils.getIcebergTable(dorisTable);
UpdatePartitionSpec updateSpec = icebergTable.updateSpec();
- String transformName = clause.getTransformName();
- Integer transformArg = clause.getTransformArg();
- String columnName = clause.getColumnName();
- String partitionFieldName = clause.getPartitionFieldName();
+ String transformName = op.getTransformName();
+ Integer transformArg = op.getTransformArg();
+ String columnName = op.getColumnName();
+ String partitionFieldName = op.getPartitionFieldName();
Term transform = getTransform(transformName, columnName, transformArg);
if (partitionFieldName != null) {
@@ -838,16 +838,16 @@ public class IcebergMetadataOps implements ExternalMetadataOps {
/**
* Drop partition field from Iceberg table for partition evolution
*/
- public void dropPartitionField(ExternalTable dorisTable, DropPartitionFieldClause clause) throws UserException {
+ public void dropPartitionField(ExternalTable dorisTable, DropPartitionFieldOp op) throws UserException {
Table icebergTable = IcebergUtils.getIcebergTable(dorisTable);
UpdatePartitionSpec updateSpec = icebergTable.updateSpec();
- if (clause.getPartitionFieldName() != null) {
- updateSpec.removeField(clause.getPartitionFieldName());
+ if (op.getPartitionFieldName() != null) {
+ updateSpec.removeField(op.getPartitionFieldName());
} else {
- String transformName = clause.getTransformName();
- Integer transformArg = clause.getTransformArg();
- String columnName = clause.getColumnName();
+ String transformName = op.getTransformName();
+ Integer transformArg = op.getTransformArg();
+ String columnName = op.getColumnName();
Term transform = getTransform(transformName, columnName, transformArg);
updateSpec.removeField(transform);
}
@@ -866,27 +866,27 @@ public class IcebergMetadataOps implements ExternalMetadataOps {
/**
* Replace partition field in Iceberg table for partition evolution
*/
- public void replacePartitionField(ExternalTable dorisTable, ReplacePartitionFieldClause clause)
+ public void replacePartitionField(ExternalTable dorisTable, ReplacePartitionFieldOp op)
throws UserException {
Table icebergTable = IcebergUtils.getIcebergTable(dorisTable);
UpdatePartitionSpec updateSpec = icebergTable.updateSpec();
// remove old partition field
- if (clause.getOldPartitionFieldName() != null) {
- updateSpec.removeField(clause.getOldPartitionFieldName());
+ if (op.getOldPartitionFieldName() != null) {
+ updateSpec.removeField(op.getOldPartitionFieldName());
} else {
- String oldTransformName = clause.getOldTransformName();
- Integer oldTransformArg = clause.getOldTransformArg();
- String oldColumnName = clause.getOldColumnName();
+ String oldTransformName = op.getOldTransformName();
+ Integer oldTransformArg = op.getOldTransformArg();
+ String oldColumnName = op.getOldColumnName();
Term oldTransform = getTransform(oldTransformName, oldColumnName, oldTransformArg);
updateSpec.removeField(oldTransform);
}
// add new partition field
- String newPartitionFieldName = clause.getNewPartitionFieldName();
- String newTransformName = clause.getNewTransformName();
- Integer newTransformArg = clause.getNewTransformArg();
- String newColumnName = clause.getNewColumnName();
+ String newPartitionFieldName = op.getNewPartitionFieldName();
+ String newTransformName = op.getNewTransformName();
+ Integer newTransformArg = op.getNewTransformArg();
+ String newColumnName = op.getNewColumnName();
Term newTransform = getTransform(newTransformName, newColumnName, newTransformArg);
if (newPartitionFieldName != null) {
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 0416da1b90c..8e6dcc9ed19 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
@@ -17,9 +17,6 @@
package org.apache.doris.insertoverwrite;
-import org.apache.doris.analysis.AddPartitionLikeClause;
-import org.apache.doris.analysis.DropPartitionClause;
-import org.apache.doris.analysis.ReplacePartitionClause;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.OlapTable;
@@ -27,6 +24,9 @@ import org.apache.doris.catalog.TableIf;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.util.PropertyAnalyzer;
import org.apache.doris.info.PartitionNamesInfo;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionLikeOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ReplacePartitionOp;
import com.google.common.collect.Maps;
import org.apache.logging.log4j.LogManager;
@@ -53,7 +53,7 @@ public class InsertOverwriteUtil {
if (tableIf instanceof OlapTable) {
for (int i = 0; i < partitionNames.size(); i++) {
Env.getCurrentEnv().addPartitionLike((Database) tableIf.getDatabase(), tableIf.getName(),
- new AddPartitionLikeClause(tempPartitionNames.get(i), partitionNames.get(i), true));
+ new AddPartitionLikeOp(tempPartitionNames.get(i), partitionNames.get(i), true));
LOG.info("successfully add temp partition [{}] for [{}]", tempPartitionNames.get(i), tableIf.getName());
}
}
@@ -81,15 +81,15 @@ public class InsertOverwriteUtil {
}
Map<String, String> properties = Maps.newHashMap();
properties.put(PropertyAnalyzer.PROPERTIES_USE_TEMP_PARTITION_NAME, "false");
- ReplacePartitionClause replacePartitionClause = new ReplacePartitionClause(
+ ReplacePartitionOp replacePartitionOp = new ReplacePartitionOp(
new PartitionNamesInfo(false, partitionNames),
new PartitionNamesInfo(true, tempPartitionNames), isForce, properties);
- if (replacePartitionClause.getTempPartitionNames().isEmpty()) {
+ if (replacePartitionOp.getTempPartitionNames().isEmpty()) {
return;
}
Env.getCurrentEnv()
.replaceTempPartition((Database) olapTable.getDatabase(),
- (OlapTable) olapTable, replacePartitionClause);
+ (OlapTable) olapTable, replacePartitionOp);
} finally {
olapTable.writeUnlock();
}
@@ -140,7 +140,7 @@ public class InsertOverwriteUtil {
}
Env.getCurrentEnv().dropPartition(
(Database) olapTable.getDatabase(), olapTable,
- new DropPartitionClause(true, partitionName, true, true));
+ new DropPartitionOp(true, partitionName, true, true));
LOG.info("successfully drop temp partition [{}] for [{}]", partitionName, olapTable.getName());
}
} catch (DdlException e) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
index 24f382d8fc7..eee02b62a98 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPartitionUtil.java
@@ -17,9 +17,7 @@
package org.apache.doris.mtmv;
-import org.apache.doris.analysis.AddPartitionClause;
import org.apache.doris.analysis.AllPartitionDesc;
-import org.apache.doris.analysis.DropPartitionClause;
import org.apache.doris.analysis.PartitionKeyDesc;
import org.apache.doris.analysis.SinglePartitionDesc;
import org.apache.doris.catalog.Column;
@@ -36,6 +34,8 @@ import org.apache.doris.common.Pair;
import org.apache.doris.datasource.mvcc.MvccUtil;
import org.apache.doris.info.TableNameInfo;
import org.apache.doris.mtmv.MTMVPartitionInfo.MTMVPartitionType;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropPartitionOp;
import org.apache.doris.rpc.RpcException;
import com.google.common.base.Preconditions;
@@ -378,8 +378,8 @@ public class MTMVPartitionUtil {
return;
}
try {
- DropPartitionClause dropPartitionClause = new DropPartitionClause(false, partitionName, false, false);
- Env.getCurrentEnv().dropPartition((Database) mtmv.getDatabase(), mtmv, dropPartitionClause);
+ DropPartitionOp dropPartitionOp = new DropPartitionOp(false, partitionName, false, false);
+ Env.getCurrentEnv().dropPartition((Database) mtmv.getDatabase(), mtmv, dropPartitionOp);
} finally {
mtmv.writeUnlock();
}
@@ -401,8 +401,9 @@ public class MTMVPartitionUtil {
generatePartitionName(oldPartitionKeyDesc),
oldPartitionKeyDesc, partitionProperties);
- AddPartitionClause addPartitionClause = new AddPartitionClause(singlePartitionDesc,
- mtmv.getDefaultDistributionInfo().toDistributionDesc(), partitionProperties, false);
+ AddPartitionOp addPartitionClause = new AddPartitionOp(singlePartitionDesc.translateToPartitionDefinition(),
+ mtmv.getDefaultDistributionInfo().toDistributionDesc().toDistributionDescriptor(),
+ partitionProperties, false);
Env.getCurrentEnv().addPartition((Database) mtmv.getDatabase(), mtmv.getName(), addPartitionClause,
false, 0, true);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index daffc5e05e8..57567295c5c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -961,8 +961,8 @@ import org.apache.doris.nereids.trees.plans.commands.info.ModifyColumnCommentOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyColumnOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyDistributionOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyEngineOp;
-import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendOrBackendHostNameOp;
-import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendOrBackendHostNameOp.ModifyOpType;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyNodeHostNameOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyNodeHostNameOp.ModifyOpType;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyPartitionOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyTableCommentOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyTablePropertiesOp;
@@ -7549,9 +7549,9 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
String hostName = stripQuotes(ctx.hostName.getText());
AlterSystemOp alterSystemOp = null;
if (ctx.FRONTEND() != null) {
- alterSystemOp = new ModifyFrontendOrBackendHostNameOp(hostPort, hostName, ModifyOpType.Frontend);
+ alterSystemOp = new ModifyNodeHostNameOp(hostPort, hostName, ModifyOpType.Frontend);
} else if (ctx.BACKEND() != null) {
- alterSystemOp = new ModifyFrontendOrBackendHostNameOp(hostPort, hostName, ModifyOpType.Backend);
+ alterSystemOp = new ModifyNodeHostNameOp(hostPort, hostName, ModifyOpType.Backend);
}
return new AlterSystemCommand(alterSystemOp, PlanType.ALTER_SYSTEM_MODIFY_FRONTEND_OR_BACKEND_HOSTNAME);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommand.java
index 91b3e3ba79b..219b678a317 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommand.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommand.java
@@ -36,7 +36,7 @@ import org.apache.doris.nereids.trees.plans.commands.info.DropBrokerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropFollowerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropObserverOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendOp;
-import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendOrBackendHostNameOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyNodeHostNameOp;
import org.apache.doris.nereids.trees.plans.visitor.PlanVisitor;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.StmtExecutor;
@@ -83,7 +83,7 @@ public class AlterSystemCommand extends AlterCommand {
|| alterSystemOp instanceof AddBrokerOp
|| alterSystemOp instanceof DropBrokerOp
|| alterSystemOp instanceof ModifyBackendOp
- || alterSystemOp instanceof ModifyFrontendOrBackendHostNameOp
+ || alterSystemOp instanceof ModifyNodeHostNameOp
|| alterSystemOp instanceof AlterLoadErrorUrlOp)
);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterTableCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterTableCommand.java
index 50a54240275..fcd3948503e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterTableCommand.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/AlterTableCommand.java
@@ -17,7 +17,6 @@
package org.apache.doris.nereids.trees.plans.commands;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.analysis.ColumnPosition;
import org.apache.doris.analysis.StmtType;
import org.apache.doris.catalog.AggregateType;
@@ -92,14 +91,8 @@ public class AlterTableCommand extends Command implements ForwardWithSync {
/**
* getOps
*/
- public List<AlterTableClause> getOps() {
- List<AlterTableClause> alterTableClauses = new ArrayList<>(ops.size());
- for (AlterTableOp op : ops) {
- AlterTableClause alter = op.translateToLegacyAlterClause();
- alter.setTableNameInfo(tbl);
- alterTableClauses.add(alter);
- }
- return alterTableClauses;
+ public List<AlterTableOp> getOps() {
+ return ops;
}
/**
@@ -242,27 +235,27 @@ public class AlterTableCommand extends Command implements ForwardWithSync {
*/
private void checkExternalTableOperationAllow(TableIf table) throws UserException {
List<AlterTableOp> alterTableOps = new ArrayList<>();
- for (AlterTableOp alterClause : ops) {
- if (alterClause instanceof RenameTableOp
- || alterClause instanceof AddColumnOp
- || alterClause instanceof AddColumnsOp
- || alterClause instanceof DropColumnOp
- || alterClause instanceof RenameColumnOp
- || alterClause instanceof ModifyColumnOp
- || alterClause instanceof ReorderColumnsOp
- || alterClause instanceof ModifyEngineOp
- || alterClause instanceof ModifyTablePropertiesOp
- || alterClause instanceof CreateOrReplaceBranchOp
- || alterClause instanceof CreateOrReplaceTagOp
- || alterClause instanceof DropBranchOp
- || alterClause instanceof DropTagOp
- || alterClause instanceof AddPartitionFieldOp
- || alterClause instanceof DropPartitionFieldOp
- || alterClause instanceof ReplacePartitionFieldOp) {
- alterTableOps.add(alterClause);
+ for (AlterTableOp alterTableOp : ops) {
+ if (alterTableOp instanceof RenameTableOp
+ || alterTableOp instanceof AddColumnOp
+ || alterTableOp instanceof AddColumnsOp
+ || alterTableOp instanceof DropColumnOp
+ || alterTableOp instanceof RenameColumnOp
+ || alterTableOp instanceof ModifyColumnOp
+ || alterTableOp instanceof ReorderColumnsOp
+ || alterTableOp instanceof ModifyEngineOp
+ || alterTableOp instanceof ModifyTablePropertiesOp
+ || alterTableOp instanceof CreateOrReplaceBranchOp
+ || alterTableOp instanceof CreateOrReplaceTagOp
+ || alterTableOp instanceof DropBranchOp
+ || alterTableOp instanceof DropTagOp
+ || alterTableOp instanceof AddPartitionFieldOp
+ || alterTableOp instanceof DropPartitionFieldOp
+ || alterTableOp instanceof ReplacePartitionFieldOp) {
+ alterTableOps.add(alterTableOp);
} else {
throw new AnalysisException(table.getType().toString() + " [" + table.getName() + "] "
- + "do not support " + alterClause.getOpType().toString() + " clause now");
+ + "do not support " + alterTableOp.getOpType().toString() + " clause now");
}
}
ops = alterTableOps;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnOp.java
index 00b8fea42ae..a59e3cd7b3d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddColumnClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.analysis.ColumnPosition;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.Column;
@@ -90,11 +88,6 @@ public class AddColumnOp extends AlterTableOp {
column = columnDef.translateToCatalogStyleForSchemaChange();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new AddColumnClause(toSql(), column, colPos, rollupName, properties);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
@@ -143,44 +136,47 @@ public class AddColumnOp extends AlterTableOp {
boolean isEnableMergeOnWrite = false;
KeysType keysType = KeysType.DUP_KEYS;
Set<String> clusterKeySet = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER);
- TableIf table = Env.getCurrentEnv().getCatalogMgr()
- .getCatalogOrDdlException(tableName.getCtl())
- .getDbOrDdlException(tableName.getDb())
- .getTableOrDdlException(tableName.getTbl());
- if (table instanceof OlapTable) {
- isOlap = true;
- olapTable = (OlapTable) table;
- keysType = olapTable.getKeysType();
- AggregateType aggregateType = columnDef.getAggType();
- Long indexId = olapTable.getIndexIdByName(rollupName);
- if (indexId != null) {
- MaterializedIndexMeta indexMeta = olapTable.getIndexMetaByIndexId(indexId);
- if (indexMeta.getDefineStmt() != null) {
- throw new AnalysisException("Cannot add column in rollup " + rollupName);
+ if (tableName != null) {
+ TableIf table = Env.getCurrentEnv().getCatalogMgr()
+ .getCatalogOrDdlException(tableName.getCtl())
+ .getDbOrDdlException(tableName.getDb())
+ .getTableOrDdlException(tableName.getTbl());
+ if (table instanceof OlapTable) {
+ isOlap = true;
+ olapTable = (OlapTable) table;
+ keysType = olapTable.getKeysType();
+ AggregateType aggregateType = columnDef.getAggType();
+ Long indexId = olapTable.getIndexIdByName(rollupName);
+ if (indexId != null) {
+ MaterializedIndexMeta indexMeta = olapTable.getIndexMetaByIndexId(indexId);
+ if (indexMeta.getDefineStmt() != null) {
+ throw new AnalysisException("Cannot add column in rollup " + rollupName);
+ }
}
- }
- if (keysType == KeysType.AGG_KEYS) {
- if (aggregateType == null) {
- columnDef.setIsKey(true);
- } else {
- if (aggregateType == AggregateType.NONE) {
- throw new AnalysisException(
+ if (keysType == KeysType.AGG_KEYS) {
+ if (aggregateType == null) {
+ columnDef.setIsKey(true);
+ } else {
+ if (aggregateType == AggregateType.NONE) {
+ throw new AnalysisException(
String.format("can't set NONE as aggregation type on column %s",
- columnDef.getName()));
+ columnDef.getName()));
+ }
}
- }
- } else if (keysType == KeysType.UNIQUE_KEYS) {
- if (aggregateType != null && !aggregateType.isReplaceFamily() && columnDef.isVisible()) {
- throw new AnalysisException(
+ } else if (keysType == KeysType.UNIQUE_KEYS) {
+ if (aggregateType != null && !aggregateType.isReplaceFamily() && columnDef.isVisible()) {
+ throw new AnalysisException(
String.format("Can not assign aggregation method on column in Unique data model table: %s",
- columnDef.getName()));
+ columnDef.getName()));
+ }
}
+ isEnableMergeOnWrite = olapTable.getEnableUniqueKeyMergeOnWrite();
+ clusterKeySet
+ .addAll(olapTable.getBaseSchema().stream().filter(Column::isClusterKey).map(Column::getName)
+ .collect(Collectors.toList()));
}
- isEnableMergeOnWrite = olapTable.getEnableUniqueKeyMergeOnWrite();
- clusterKeySet
- .addAll(olapTable.getBaseSchema().stream().filter(Column::isClusterKey).map(Column::getName)
- .collect(Collectors.toList()));
}
+
columnDef.validate(isOlap, keysSet, clusterKeySet, isEnableMergeOnWrite, keysType);
if (!columnDef.isNullable() && !columnDef.hasDefaultValue()) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_NO_DEFAULT_FOR_FIELD, columnDef.getName());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnsOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnsOp.java
index f04a9338aa9..242a0883a2e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnsOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddColumnsOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddColumnsClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.OlapTable;
@@ -99,11 +97,6 @@ public class AddColumnsOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new AddColumnsClause(toSql(), columns, rollupName, properties);
- }
-
@Override
public boolean allowOpMTMV() {
return false;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOp.java
index fb05901a00a..95f6c1fc71b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddPartitionFieldClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.common.UserException;
import org.apache.doris.qe.ConnectContext;
@@ -67,11 +65,6 @@ public class AddPartitionFieldOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new AddPartitionFieldClause(transformName, transformArg, columnName, partitionFieldName);
- }
-
@Override
public Map<String, String> getProperties() {
return Collections.emptyMap();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionLikeOp.java
similarity index 59%
copy from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java
copy to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionLikeOp.java
index ab73f6b7e6b..32c9dd41c41 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionLikeOp.java
@@ -18,31 +18,30 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyDistributionClause;
-import java.util.HashMap;
import java.util.Map;
/**
- * ModifyDistributionOp
+ * AddPartitionLikeOp
*/
-public class ModifyDistributionOp extends AlterTableOp {
- private DistributionDescriptor distributionDesc;
+public class AddPartitionLikeOp extends AlterTableOp {
+ private final String partitionName;
+ private final String existedPartitionName;
+ private final Boolean isTempPartition;
- public ModifyDistributionOp(DistributionDescriptor distributionDesc) {
- super(AlterOpType.MODIFY_DISTRIBUTION);
- this.distributionDesc = distributionDesc;
+ public AddPartitionLikeOp(String partitionName,
+ String existedPartitionName,
+ boolean isTempPartition) {
+ super(AlterOpType.ADD_PARTITION);
+ this.partitionName = partitionName;
+ this.existedPartitionName = existedPartitionName;
+ this.isTempPartition = isTempPartition;
this.needTableStable = false;
}
- public DistributionDescriptor getDistributionDesc() {
- return distributionDesc;
- }
-
@Override
public boolean allowOpMTMV() {
- return true;
+ return false;
}
@Override
@@ -50,24 +49,29 @@ public class ModifyDistributionOp extends AlterTableOp {
return false;
}
+ public String getPartitionName() {
+ return partitionName;
+ }
+
+ public String getExistedPartitionName() {
+ return existedPartitionName;
+ }
+
+ public Boolean getTempPartition() {
+ return isTempPartition;
+ }
+
@Override
public String toSql() {
StringBuilder sb = new StringBuilder();
- sb.append("MODIFY DISTRIBUTION ");
- if (distributionDesc != null) {
- sb.append(distributionDesc.toSql());
- }
+ sb.append("ADD PARTITION ").append(partitionName).append(" LIKE ");
+ sb.append(existedPartitionName);
return sb.toString();
}
@Override
public Map<String, String> getProperties() {
- return new HashMap<>();
- }
-
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyDistributionClause(distributionDesc.translateToCatalogStyle());
+ return null;
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionOp.java
index bfb1b5cbca3..fb8437fb45b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddPartitionClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.analysis.DistributionDesc;
import org.apache.doris.analysis.SinglePartitionDesc;
import org.apache.doris.catalog.Column;
@@ -41,7 +39,8 @@ import java.util.Map;
* AddPartitionOp
*/
public class AddPartitionOp extends AlterTableOp {
- private PartitionDefinition partitionDesc;
+ private PartitionDefinition partitionDefinition;
+ private SinglePartitionDesc partitionDesc;
private DistributionDescriptor distributionDesc;
private Map<String, String> properties;
// true if this is to add a temporary partition
@@ -50,11 +49,27 @@ public class AddPartitionOp extends AlterTableOp {
/**
* AddPartitionOp
*/
- public AddPartitionOp(PartitionDefinition partitionDesc,
+ public AddPartitionOp(PartitionDefinition partitionDefinition,
DistributionDescriptor distributionDesc,
Map<String, String> properties,
boolean isTempPartition) {
super(AlterOpType.ADD_PARTITION);
+ this.partitionDefinition = partitionDefinition;
+ this.distributionDesc = distributionDesc;
+ this.properties = properties;
+ this.isTempPartition = isTempPartition;
+
+ this.needTableStable = false;
+ }
+
+ /**
+ * AddPartitionOp
+ */
+ public AddPartitionOp(SinglePartitionDesc partitionDesc,
+ DistributionDescriptor distributionDesc,
+ Map<String, String> properties,
+ boolean isTempPartition) {
+ super(AlterOpType.ADD_PARTITION);
this.partitionDesc = partitionDesc;
this.distributionDesc = distributionDesc;
this.properties = properties;
@@ -63,21 +78,28 @@ public class AddPartitionOp extends AlterTableOp {
this.needTableStable = false;
}
- private SinglePartitionDesc getSingeRangePartitionDesc() {
- SinglePartitionDesc singlePartitionDesc = (SinglePartitionDesc) partitionDesc.translateToCatalogStyle();
+ /**
+ * getSingeRangePartitionDesc
+ */
+ public SinglePartitionDesc getSingeRangePartitionDesc() {
+ if (partitionDesc != null) {
+ return partitionDesc;
+ }
+
+ SinglePartitionDesc singlePartitionDesc = (SinglePartitionDesc) partitionDefinition.translateToCatalogStyle();
// TODO fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java#addPartition
// will call singlePartitionDesc.analyze method, so have to set analyzed to false to let it work
singlePartitionDesc.setAnalyzed(false);
return singlePartitionDesc;
}
- private DistributionDesc getDistributionDesc() {
+ public DistributionDesc getDistributionDesc() {
return distributionDesc != null ? distributionDesc.translateToCatalogStyle() : null;
}
@Override
public void validate(ConnectContext ctx) throws UserException {
- if (partitionDesc instanceof StepPartition) {
+ if (partitionDefinition instanceof StepPartition) {
throw new AnalysisException("StepPartition is not supported");
}
String ctlName = tableName.getCtl();
@@ -93,14 +115,9 @@ public class AddPartitionOp extends AlterTableOp {
for (Column col : olapTable.getPartitionColumns()) {
partitionTypes.add(DataType.fromCatalogType(col.getType()));
}
- partitionDesc.setPartitionTypes(partitionTypes);
+ partitionDefinition.setPartitionTypes(partitionTypes);
}
- partitionDesc.validate(properties);
- }
-
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new AddPartitionClause(getSingeRangePartitionDesc(), getDistributionDesc(), properties, isTempPartition);
+ partitionDefinition.validate(properties);
}
public boolean isTempPartition() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddRollupOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddRollupOp.java
index eb59237e739..d3abfea5e95 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddRollupOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AddRollupOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddRollupClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.common.FeNameFormat;
@@ -94,11 +92,6 @@ public class AddRollupOp extends AlterTableOp {
baseRollupName = Strings.emptyToNull(baseRollupName);
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new AddRollupClause(rollupName, columnNames, dupKeys, baseRollupName, properties);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMultiPartitionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMultiPartitionOp.java
index fcb930a8f94..6529a6a8725 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMultiPartitionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterMultiPartitionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterMultiPartitionClause;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.analysis.PartitionKeyDesc;
import org.apache.doris.analysis.PartitionValue;
import org.apache.doris.nereids.exceptions.AnalysisException;
@@ -87,8 +85,10 @@ public class AlterMultiPartitionOp extends AlterTableOp {
return properties;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
+ /**
+ * getPartitionKeyDesc
+ */
+ public PartitionKeyDesc getPartitionKeyDesc() {
List<PartitionValue> fromValues = fromExpression.stream()
.map(this::toLegacyPartitionValue)
.collect(Collectors.toList());
@@ -98,7 +98,7 @@ public class AlterMultiPartitionOp extends AlterTableOp {
PartitionKeyDesc partitionKeyDesc = (unitString == null
? PartitionKeyDesc.createMultiFixed(fromValues, toValues, unit)
: PartitionKeyDesc.createMultiFixed(fromValues, toValues, unit, unitString));
- return new AlterMultiPartitionClause(partitionKeyDesc, properties, isTempPartition);
+ return partitionKeyDesc;
}
public boolean isTempPartition() {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterOp.java
similarity index 69%
copy from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
copy to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterOp.java
index ad0030f52be..6916215c8c3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterOp.java
@@ -18,18 +18,19 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.common.UserException;
-import org.apache.doris.qe.ConnectContext;
+
+import org.apache.commons.lang3.NotImplementedException;
import java.util.Map;
/**
- * AlterSystemOp
+ * AlterOp
*/
-public abstract class AlterSystemOp {
+public abstract class AlterOp {
+
protected AlterOpType opType;
- public AlterSystemOp(AlterOpType opType) {
+ public AlterOp(AlterOpType opType) {
this.opType = opType;
}
@@ -37,18 +38,11 @@ public abstract class AlterSystemOp {
return opType;
}
- public boolean allowOpMTMV() {
- return true;
- }
-
- public boolean needChangeMTMVState() {
- return false;
- }
-
- public abstract String toSql();
+ public abstract boolean allowOpMTMV();
- public abstract Map<String, String> getProperties();
+ public abstract boolean needChangeMTMVState();
- public void validate(ConnectContext ctx) throws UserException {
+ public Map<String, String> getProperties() {
+ throw new NotImplementedException("AlterOp.getProperties() is not implemented");
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
index ad0030f52be..9c185610f7f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
@@ -26,10 +26,11 @@ import java.util.Map;
/**
* AlterSystemOp
*/
-public abstract class AlterSystemOp {
+public abstract class AlterSystemOp extends AlterOp {
protected AlterOpType opType;
public AlterSystemOp(AlterOpType opType) {
+ super(opType);
this.opType = opType;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterTableOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterTableOp.java
index 7fe1dd34acb..0d40df1329d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterTableOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterTableOp.java
@@ -18,7 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.common.UserException;
import org.apache.doris.info.TableNameInfo;
import org.apache.doris.qe.ConnectContext;
@@ -28,7 +27,7 @@ import java.util.Map;
/**
* AlterTableOp
*/
-public abstract class AlterTableOp {
+public abstract class AlterTableOp extends AlterOp {
// if set to true, the corresponding table should be stable before processing this operation on it.
protected boolean needTableStable = true;
@@ -37,6 +36,7 @@ public abstract class AlterTableOp {
protected TableNameInfo tableName;
public AlterTableOp(AlterOpType opType) {
+ super(opType);
this.opType = opType;
}
@@ -58,6 +58,4 @@ public abstract class AlterTableOp {
public void validate(ConnectContext ctx) throws UserException {
}
-
- public abstract AlterTableClause translateToLegacyAlterClause();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
index 8d54ba9bd7b..04a980f3b1d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/BuildIndexOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.BuildIndexClause;
import org.apache.doris.catalog.DatabaseIf;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.Index;
@@ -164,12 +162,6 @@ public class BuildIndexOp extends AlterTableOp {
this.index = existedIdx.clone();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- indexDef.getIndexType();
- return new BuildIndexClause(tableName, indexDef, index, alter);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
index 2ef13e08819..765dd1875ca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateIndexOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.CreateIndexClause;
import org.apache.doris.catalog.Index;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
@@ -83,11 +81,6 @@ public class CreateIndexOp extends AlterTableOp {
index = indexDef.translateToCatalogStyle();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new CreateIndexClause(tableName, indexDef, index, alter);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceBranchOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceBranchOp.java
index 11258470ebc..bcaf90f7c8e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceBranchOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceBranchOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.CreateOrReplaceBranchClause;
import java.util.Map;
@@ -65,8 +63,7 @@ public class CreateOrReplaceBranchOp extends AlterTableOp {
return null;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new CreateOrReplaceBranchClause(branchInfo);
+ public CreateOrReplaceBranchInfo getBranchInfo() {
+ return branchInfo;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceTagOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceTagOp.java
index e56ccf5cafe..c91891712d7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceTagOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateOrReplaceTagOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.CreateOrReplaceTagClause;
import java.util.Map;
@@ -61,8 +59,7 @@ public class CreateOrReplaceTagOp extends AlterTableOp {
return null;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new CreateOrReplaceTagClause(tagInfo);
+ public CreateOrReplaceTagInfo getTagInfo() {
+ return tagInfo;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
index ebc22ecce0c..2fc3d849445 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
@@ -17,7 +17,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
-import org.apache.doris.analysis.AlterClause;
import org.apache.doris.analysis.DistributionDesc;
import org.apache.doris.analysis.Expr;
import org.apache.doris.analysis.InvertedIndexUtil;
@@ -1344,12 +1343,12 @@ public class CreateTableInfo {
}
/**
- * getRollupAlterClauseList
+ * getAddRollupOps
*/
- public List<AlterClause> getRollupAlterClauseList() {
- List<AlterClause> addRollups = Lists.newArrayList();
+ public List<AlterOp> getAddRollupOps() {
+ List<AlterOp> addRollups = Lists.newArrayList();
if (!rollups.isEmpty()) {
- addRollups.addAll(rollups.stream().map(RollupDefinition::translateToCatalogStyle)
+ addRollups.addAll(rollups.stream().map(RollupDefinition::translateToAddRollupOp)
.collect(Collectors.toList()));
}
return addRollups;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropBranchOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropBranchOp.java
index f04b0f34823..6755da41a7e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropBranchOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropBranchOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropBranchClause;
import java.util.Map;
@@ -57,8 +55,7 @@ public class DropBranchOp extends AlterTableOp {
return null;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropBranchClause(dropBranchInfo);
+ public DropBranchInfo getDropBranchInfo() {
+ return dropBranchInfo;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropColumnOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropColumnOp.java
index 74a216d2651..58ec29a8f8a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropColumnOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropColumnOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropColumnClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.KeysType;
@@ -148,11 +146,6 @@ public class DropColumnOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropColumnClause(colName, rollupName, properties);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropIndexOp.java
index 0c39ce8e53d..30cc6849bb2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropIndexOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropIndexClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.info.TableNameInfo;
@@ -77,11 +75,6 @@ public class DropIndexOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropIndexClause(indexName, ifExists, tableName, alter);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOp.java
index b53765f3180..0222fd7bb28 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropPartitionFieldClause;
import org.apache.doris.common.UserException;
import org.apache.doris.qe.ConnectContext;
@@ -75,11 +73,6 @@ public class DropPartitionFieldOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropPartitionFieldClause(partitionFieldName, transformName, transformArg, columnName);
- }
-
@Override
public Map<String, String> getProperties() {
return Collections.emptyMap();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFromIndexOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFromIndexOp.java
index e8d4177abb6..e67d1d9c435 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFromIndexOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFromIndexOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropPartitionFromIndexClause;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.common.UserException;
@@ -80,11 +78,6 @@ public class DropPartitionFromIndexOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropPartitionFromIndexClause(ifExists, partitionName, isTempPartition, forceDrop, indexName);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionOp.java
index e81bfb201b2..1ec1e38ec83 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropPartitionClause;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.common.UserException;
@@ -74,11 +72,6 @@ public class DropPartitionOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropPartitionClause(ifExists, partitionName, isTempPartition, forceDrop);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropRollupOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropRollupOp.java
index ef74d3bcc2a..0bf94ea4dd2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropRollupOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropRollupOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropRollupClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.qe.ConnectContext;
@@ -49,11 +47,6 @@ public class DropRollupOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropRollupClause(rollupName, properties);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropTagOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropTagOp.java
index 535b50974ec..560d50ca14e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropTagOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/DropTagOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.DropTagClause;
import java.util.Map;
@@ -57,8 +55,7 @@ public class DropTagOp extends AlterTableOp {
return null;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new DropTagClause(dropTagInfo);
+ public DropTagInfo getDropTagInfo() {
+ return dropTagInfo;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/EnableFeatureOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/EnableFeatureOp.java
index 0b3e35ace80..f4613b0b07b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/EnableFeatureOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/EnableFeatureOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.EnableFeatureClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.PrintableMap;
@@ -93,11 +91,6 @@ public class EnableFeatureOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new EnableFeatureClause(featureName, properties);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBackendHostNameOp.java
similarity index 56%
copy from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
copy to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBackendHostNameOp.java
index ad0030f52be..352193c6d4e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBackendHostNameOp.java
@@ -17,38 +17,19 @@
package org.apache.doris.nereids.trees.plans.commands.info;
-import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.common.UserException;
-import org.apache.doris.qe.ConnectContext;
-
-import java.util.Map;
-
/**
- * AlterSystemOp
+ * ModifyBackendHostNameOp
*/
-public abstract class AlterSystemOp {
- protected AlterOpType opType;
-
- public AlterSystemOp(AlterOpType opType) {
- this.opType = opType;
- }
-
- public AlterOpType getOpType() {
- return opType;
- }
-
- public boolean allowOpMTMV() {
- return true;
- }
+public class ModifyBackendHostNameOp extends ModifyNodeHostNameOp {
- public boolean needChangeMTMVState() {
- return false;
+ public ModifyBackendHostNameOp(String hostPort, String newHost, ModifyOpType modifyOpType) {
+ super(hostPort, newHost, modifyOpType);
}
- public abstract String toSql();
-
- public abstract Map<String, String> getProperties();
-
- public void validate(ConnectContext ctx) throws UserException {
+ public ModifyBackendHostNameOp(String hostPort, String newHost, ModifyOpType modifyOpType,
+ String host, int port) {
+ super(hostPort, newHost, modifyOpType);
+ this.host = host;
+ this.port = port;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBrokerOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBrokerOp.java
new file mode 100644
index 00000000000..11d463b850d
--- /dev/null
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyBrokerOp.java
@@ -0,0 +1,113 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package org.apache.doris.nereids.trees.plans.commands.info;
+
+import org.apache.doris.alter.AlterOpType;
+import org.apache.doris.common.AnalysisException;
+import org.apache.doris.common.Pair;
+import org.apache.doris.common.UserException;
+import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.system.SystemInfoService;
+
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.Sets;
+import org.apache.commons.lang3.NotImplementedException;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * ModifyBrokerOp
+ */
+public class ModifyBrokerOp extends AlterSystemOp {
+
+ /**
+ * ModifyOp
+ */
+ public enum ModifyOp {
+ OP_ADD,
+ OP_DROP,
+ OP_DROP_ALL
+ }
+
+ protected Set<Pair<String, Integer>> hostPortPairs;
+
+ private final ModifyOp op;
+ private final String brokerName;
+ private final List<String> hostPorts;
+
+ public ModifyBrokerOp(ModifyOp op, String brokerName, List<String> hostPorts) {
+ super(AlterOpType.ALTER_OTHER);
+ this.op = op;
+ this.brokerName = brokerName;
+ this.hostPorts = hostPorts;
+ }
+
+ public ModifyBrokerOp(ModifyOp op, String brokerName,
+ List<String> hostPorts, Set<Pair<String, Integer>> hostPortPairs) {
+ super(AlterOpType.ALTER_OTHER);
+ this.op = op;
+ this.brokerName = brokerName;
+ this.hostPorts = hostPorts;
+ this.hostPortPairs = hostPortPairs;
+ }
+
+ public ModifyOp getOp() {
+ return op;
+ }
+
+ public String getBrokerName() {
+ return brokerName;
+ }
+
+ public Set<Pair<String, Integer>> getHostPortPairs() {
+ return hostPortPairs;
+ }
+
+ private void validateBrokerName() throws AnalysisException {
+ if (Strings.isNullOrEmpty(brokerName)) {
+ throw new AnalysisException("Broker's name can't be empty.");
+ }
+ }
+
+ @Override
+ public void validate(ConnectContext ctx) throws UserException {
+ validateBrokerName();
+
+ if (op != ModifyOp.OP_DROP_ALL) {
+ hostPortPairs = Sets.newHashSet();
+ for (String hostPort : hostPorts) {
+ Pair<String, Integer> pair = SystemInfoService.validateHostAndPort(hostPort);
+ hostPortPairs.add(pair);
+ }
+ Preconditions.checkState(!hostPortPairs.isEmpty());
+ }
+ }
+
+ @Override
+ public String toSql() {
+ throw new NotImplementedException("toSql not implemented");
+ }
+
+ @Override
+ public Map<String, String> getProperties() {
+ throw new NotImplementedException("getProperties not implemented");
+ }
+}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnCommentOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnCommentOp.java
index 8553732f8dd..b1496710153 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnCommentOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnCommentOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyColumnCommentClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.qe.ConnectContext;
@@ -62,11 +60,6 @@ public class ModifyColumnCommentOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyColumnCommentClause(colName, comment);
- }
-
@Override
public boolean allowOpMTMV() {
return false;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnOp.java
index 7a964dcebe4..5f3154886f7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyColumnOp.java
@@ -18,9 +18,7 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.ModifyColumnClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.KeysType;
@@ -171,11 +169,6 @@ public class ModifyColumnOp extends AlterTableOp {
return columnDef;
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyColumnClause(toSql(), column, colPos, rollupName, properties);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java
index ab73f6b7e6b..2837dc36aac 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyDistributionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyDistributionClause;
import java.util.HashMap;
import java.util.Map;
@@ -65,11 +63,6 @@ public class ModifyDistributionOp extends AlterTableOp {
return new HashMap<>();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyDistributionClause(distributionDesc.translateToCatalogStyle());
- }
-
@Override
public String toString() {
return toSql();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyEngineOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyEngineOp.java
index 1bbf71952cc..7c55e29d91c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyEngineOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyEngineOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyEngineClause;
import org.apache.doris.catalog.OdbcTable;
import org.apache.doris.catalog.Table;
import org.apache.doris.common.AnalysisException;
@@ -67,11 +65,6 @@ public class ModifyEngineOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyEngineClause(engine, properties);
- }
-
@Override
public boolean allowOpMTMV() {
return false;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendHostNameOp.java
similarity index 56%
copy from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
copy to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendHostNameOp.java
index ad0030f52be..28e8a1011b0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/AlterSystemOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendHostNameOp.java
@@ -17,38 +17,18 @@
package org.apache.doris.nereids.trees.plans.commands.info;
-import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.common.UserException;
-import org.apache.doris.qe.ConnectContext;
-
-import java.util.Map;
-
/**
- * AlterSystemOp
+ * ModifyFrontendHostNameOp
*/
-public abstract class AlterSystemOp {
- protected AlterOpType opType;
-
- public AlterSystemOp(AlterOpType opType) {
- this.opType = opType;
+public class ModifyFrontendHostNameOp extends ModifyNodeHostNameOp {
+ public ModifyFrontendHostNameOp(String hostPort, String newHost, ModifyOpType modifyOpType) {
+ super(hostPort, newHost, modifyOpType);
}
- public AlterOpType getOpType() {
- return opType;
- }
-
- public boolean allowOpMTMV() {
- return true;
- }
-
- public boolean needChangeMTMVState() {
- return false;
- }
-
- public abstract String toSql();
-
- public abstract Map<String, String> getProperties();
-
- public void validate(ConnectContext ctx) throws UserException {
+ public ModifyFrontendHostNameOp(String hostPort, String newHost, ModifyOpType modifyOpType,
+ String host, int port) {
+ super(hostPort, newHost, modifyOpType);
+ this.host = host;
+ this.port = port;
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendOrBackendHostNameOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyNodeHostNameOp.java
similarity index 90%
rename from fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendOrBackendHostNameOp.java
rename to fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyNodeHostNameOp.java
index ed127e06c58..c29572684e5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyFrontendOrBackendHostNameOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyNodeHostNameOp.java
@@ -31,13 +31,13 @@ import java.net.UnknownHostException;
import java.util.Map;
/**
- * ModifyFrontendOrBackendHostNameOp
+ * ModifyNodeHostNameOp
*/
-public class ModifyFrontendOrBackendHostNameOp extends AlterSystemOp {
- private String hostPort;
- private String host;
- private String newHost;
- private int port;
+public class ModifyNodeHostNameOp extends AlterSystemOp {
+ protected String hostPort;
+ protected String host;
+ protected String newHost;
+ protected int port;
private ModifyOpType modifyOpType;
/**
@@ -48,8 +48,8 @@ public class ModifyFrontendOrBackendHostNameOp extends AlterSystemOp {
Backend
}
- public ModifyFrontendOrBackendHostNameOp(String hostPort, String newHost,
- ModifyOpType modifyOpType) {
+ public ModifyNodeHostNameOp(String hostPort, String newHost,
+ ModifyOpType modifyOpType) {
super(AlterOpType.ALTER_OTHER);
this.hostPort = hostPort;
this.newHost = newHost;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyPartitionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyPartitionOp.java
index 32a83d1a88d..d798de5666d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyPartitionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyPartitionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyPartitionClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.PrintableMap;
@@ -103,11 +101,6 @@ public class ModifyPartitionOp extends AlterTableOp {
checkProperties(Maps.newHashMap(properties));
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyPartitionClause(partitionNames, properties, isTempPartition, needExpand);
- }
-
// Check the following properties' legality before modifying partition.
// 1. replication_num or replication_allocation
// 2. storage_medium && storage_cooldown_time
@@ -140,6 +133,10 @@ public class ModifyPartitionOp extends AlterTableOp {
return isTempPartition;
}
+ public boolean isNeedExpand() {
+ return this.needExpand;
+ }
+
@Override
public boolean allowOpMTMV() {
return false;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTableCommentOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTableCommentOp.java
index 6e20f2b3293..2112eaa3f8b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTableCommentOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTableCommentOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyTableCommentClause;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
@@ -46,11 +44,6 @@ public class ModifyTableCommentOp extends AlterTableOp {
return Maps.newHashMap();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyTableCommentClause(comment);
- }
-
@Override
public boolean allowOpMTMV() {
return true;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
index 6376d24a46a..dc55d99d249 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ModifyTablePropertiesOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ModifyTablePropertiesClause;
import org.apache.doris.catalog.DynamicPartitionProperty;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.MTMV;
@@ -395,11 +393,6 @@ public class ModifyTablePropertiesOp extends AlterTableOp {
analyzeForMTMV();
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ModifyTablePropertiesClause(properties, storagePolicy, isBeingSynced, needTableStable, opType);
- }
-
private void analyzeForMTMV() throws AnalysisException {
if (tableName != null) {
// Skip external catalog.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameColumnOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameColumnOp.java
index 6774645795f..909d324eeda 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameColumnOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameColumnOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ColumnRenameClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.FeNameFormat;
@@ -69,11 +67,6 @@ public class RenameColumnOp extends AlterTableOp {
FeNameFormat.checkColumnName(newColName);
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ColumnRenameClause(colName, newColName);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenamePartitionOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenamePartitionOp.java
index 692d83ccf79..e8fe2399fd0 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenamePartitionOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenamePartitionOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.PartitionRenameClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.FeNameFormat;
import org.apache.doris.common.UserException;
@@ -64,11 +62,6 @@ public class RenamePartitionOp extends AlterTableOp {
FeNameFormat.checkPartitionName(newPartitionName);
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new PartitionRenameClause(partitionName, newPartitionName);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameRollupOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameRollupOp.java
index 37605f1700a..67855850bf9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameRollupOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameRollupOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.RollupRenameClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.FeNameFormat;
import org.apache.doris.common.UserException;
@@ -64,11 +62,6 @@ public class RenameRollupOp extends AlterTableOp {
FeNameFormat.checkTableName(newRollupName);
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new RollupRenameClause(rollupName, newRollupName);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameTableOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameTableOp.java
index 7cf4feae641..94f6c403fd9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameTableOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RenameTableOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.TableRenameClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.FeNameFormat;
import org.apache.doris.common.UserException;
@@ -53,11 +51,6 @@ public class RenameTableOp extends AlterTableOp {
FeNameFormat.checkTableName(newTableName);
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new TableRenameClause(newTableName);
- }
-
@Override
public Map<String, String> getProperties() {
return null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReorderColumnsOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReorderColumnsOp.java
index f674f5a3a68..9d167233986 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReorderColumnsOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReorderColumnsOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ReorderColumnsClause;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.OlapTable;
@@ -87,11 +85,6 @@ public class ReorderColumnsOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ReorderColumnsClause(columnsByPos, rollupName, properties);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOp.java
index f75a513b606..d88ac671b67 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ReplacePartitionFieldClause;
import org.apache.doris.common.UserException;
import org.apache.doris.qe.ConnectContext;
@@ -99,12 +97,6 @@ public class ReplacePartitionFieldOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ReplacePartitionFieldClause(oldPartitionFieldName, oldTransformName, oldTransformArg,
- oldColumnName, newTransformName, newTransformArg, newColumnName, newPartitionFieldName);
- }
-
@Override
public Map<String, String> getProperties() {
return Collections.emptyMap();
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 a9ae4f91805..9b9406a97d8 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
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ReplacePartitionClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.PropertyAnalyzer;
@@ -129,12 +127,6 @@ public class ReplacePartitionOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ReplacePartitionClause(partitionNames, tempPartitionNames,
- forceDropOldPartition, properties, isStrictRange, useTempPartitionName);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplaceTableOp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplaceTableOp.java
index 59f4b7be517..d02a9c67e1b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplaceTableOp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/ReplaceTableOp.java
@@ -18,8 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AlterTableClause;
-import org.apache.doris.analysis.ReplaceTableClause;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.UserException;
import org.apache.doris.common.util.PropertyAnalyzer;
@@ -72,11 +70,6 @@ public class ReplaceTableOp extends AlterTableOp {
}
}
- @Override
- public AlterTableClause translateToLegacyAlterClause() {
- return new ReplaceTableClause(tblName, properties, isForce, swapTable);
- }
-
@Override
public Map<String, String> getProperties() {
return this.properties;
@@ -92,6 +85,10 @@ public class ReplaceTableOp extends AlterTableOp {
return true;
}
+ public boolean isForce() {
+ return isForce;
+ }
+
@Override
public String toSql() {
StringBuilder sb = new StringBuilder();
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RollupDefinition.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RollupDefinition.java
index f1323cbbc8e..87053057d01 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RollupDefinition.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/RollupDefinition.java
@@ -60,6 +60,10 @@ public class RollupDefinition {
return new AddRollupClause(name, cols, dupKeys, name, properties);
}
+ public AddRollupOp translateToAddRollupOp() {
+ return new AddRollupOp(name, cols, dupKeys, name, properties);
+ }
+
public String getName() {
return name;
}
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 61c81c9eae2..bffa6a7addc 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
@@ -18,7 +18,6 @@
package org.apache.doris.service;
import org.apache.doris.analysis.AbstractBackupTableRefClause;
-import org.apache.doris.analysis.AddPartitionClause;
import org.apache.doris.analysis.PartitionExprUtil;
import org.apache.doris.analysis.SetType;
import org.apache.doris.analysis.UserIdentity;
@@ -97,6 +96,7 @@ import org.apache.doris.mysql.privilege.AccessControllerManager;
import org.apache.doris.mysql.privilege.PrivPredicate;
import org.apache.doris.nereids.trees.plans.PlanNodeAndHash;
import org.apache.doris.nereids.trees.plans.commands.RestoreCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AddPartitionOp;
import org.apache.doris.nereids.trees.plans.commands.info.LabelNameInfo;
import org.apache.doris.persist.gson.GsonUtils;
import org.apache.doris.planner.OlapTableSink;
@@ -3687,7 +3687,7 @@ public class FrontendServiceImpl implements FrontendService.Iface {
}
partitionValues.add(request.partitionValues.get(i));
}
- Map<String, AddPartitionClause> addPartitionClauseMap;
+ Map<String, AddPartitionOp> addPartitionClauseMap;
try {
addPartitionClauseMap = PartitionExprUtil.getAddPartitionClauseFromPartitionValues(olapTable,
partitionValues, partitionInfo);
@@ -3698,10 +3698,10 @@ public class FrontendServiceImpl implements FrontendService.Iface {
return result;
}
- for (AddPartitionClause addPartitionClause : addPartitionClauseMap.values()) {
+ for (AddPartitionOp addPartitionOp : addPartitionClauseMap.values()) {
try {
// here maybe check and limit created partitions num
- Env.getCurrentEnv().addPartition(db, olapTable.getName(), addPartitionClause, false, 0, true);
+ Env.getCurrentEnv().addPartition(db, olapTable.getName(), addPartitionOp, false, 0, true);
} catch (DdlException e) {
LOG.warn(e);
errorStatus.setErrorMsgs(
diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java
index b9c63f813b1..8c4a2213a92 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java
@@ -32,6 +32,7 @@ import org.apache.doris.common.UserException;
import org.apache.doris.common.io.CountingDataOutputStream;
import org.apache.doris.common.util.NetUtils;
import org.apache.doris.metric.MetricRepo;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendHostNameOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendOp;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.resource.Tag;
@@ -958,6 +959,20 @@ public class SystemInfoService {
Env.getCurrentEnv().getEditLog().logModifyBackend(be);
}
+ public void modifyBackendHost(ModifyBackendHostNameOp op) throws UserException {
+ Backend be = getBackendWithHeartbeatPort(op.getHost(), op.getPort());
+ if (be == null) {
+ throw new DdlException("backend does not exists[" + NetUtils
+ .getHostPortInAccessibleFormat(op.getHost(), op.getPort()) + "]");
+ }
+ if (be.getHost().equals(op.getNewHost())) {
+ // no need to modify
+ return;
+ }
+ be.setHost(op.getNewHost());
+ Env.getCurrentEnv().getEditLog().logModifyBackend(be);
+ }
+
public void modifyBackendHost(ModifyBackendHostNameClause clause) throws UserException {
Backend be = getBackendWithHeartbeatPort(clause.getHost(), clause.getPort());
if (be == null) {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/CloudIndexTest.java b/fe/fe-core/src/test/java/org/apache/doris/alter/CloudIndexTest.java
index 4ca115a3ca9..ac5083485df 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/CloudIndexTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/CloudIndexTest.java
@@ -17,11 +17,7 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.BuildIndexClause;
-import org.apache.doris.analysis.CreateIndexClause;
import org.apache.doris.analysis.DataSortInfo;
-import org.apache.doris.analysis.DropIndexClause;
import org.apache.doris.analysis.ResourceTypeEnum;
import org.apache.doris.analysis.UserIdentity;
import org.apache.doris.catalog.CatalogTestUtil;
@@ -47,6 +43,8 @@ import org.apache.doris.mysql.privilege.AccessControllerManager;
import org.apache.doris.mysql.privilege.Auth;
import org.apache.doris.mysql.privilege.PrivPredicate;
import org.apache.doris.nereids.trees.plans.commands.CancelBuildIndexCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.CreateIndexOp;
import org.apache.doris.nereids.trees.plans.commands.info.IndexDefinition;
import org.apache.doris.persist.EditLog;
import org.apache.doris.qe.ConnectContext;
@@ -89,9 +87,7 @@ public class CloudIndexTest {
private static Database db;
private static OlapTable olapTable;
- private static CreateIndexClause createIndexClause;
- private static BuildIndexClause buildIndexClause;
- private static DropIndexClause dropIndexClause;
+ private static CreateIndexOp createIndexOp;
private static CancelBuildIndexCommand cancelBuildIndexCommand;
private static SchemaChangeHandler schemaChangeHandler;
@@ -381,19 +377,18 @@ public class CloudIndexTest {
Map<String, String> properties = Maps.newHashMap();
properties.put("gram_size", "2");
properties.put("bf_size", "256");
-
- IndexDefinition indexDef = new IndexDefinition(indexName, false,
+ IndexDefinition indexDefinition = new IndexDefinition(indexName, false,
Lists.newArrayList(table.getBaseSchema().get(3).getName()),
"NGRAM_BF",
properties, "ngram bf index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- createIndexClause = new CreateIndexClause(tableName, indexDef, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
ctx.getSessionVariable().setEnableAddIndexForNewData(true);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(1, table.getIndexes().size());
@@ -438,13 +433,13 @@ public class CloudIndexTest {
properties, "ngram bf index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
// Set session variable to false (default)
ctx.getSessionVariable().setEnableAddIndexForNewData(false);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.SCHEMA_CHANGE, table.getState());
@@ -494,19 +489,18 @@ public class CloudIndexTest {
// Explicitly set parser="none" for raw inverted index
Map<String, String> properties = Maps.newHashMap();
properties.put("parser", "none");
-
IndexDefinition indexDefinition = new IndexDefinition(indexName, false,
Lists.newArrayList(table.getBaseSchema().get(3).getName()),
"INVERTED",
properties, "raw inverted index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
ctx.getSessionVariable().setEnableAddIndexForNewData(false);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
@@ -563,13 +557,13 @@ public class CloudIndexTest {
properties, "lightweight raw inverted index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
// Test with enable_add_index_for_new_data = true, should use lightweight mode
ctx.getSessionVariable().setEnableAddIndexForNewData(true);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
// Lightweight mode should not create any schema change jobs
Assert.assertEquals(1, indexChangeJobMap.size());
@@ -613,13 +607,13 @@ public class CloudIndexTest {
Lists.newArrayList(table.getBaseSchema().get(2).getName()),
"INVERTED",
properties, "tokenized inverted index with english parser");
- TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
+ TableNameInfo tableNameInfo = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, table);
+ createIndexOp = new CreateIndexOp(tableNameInfo, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.SCHEMA_CHANGE, table.getState());
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/IndexChangeJobTest.java b/fe/fe-core/src/test/java/org/apache/doris/alter/IndexChangeJobTest.java
index 460e4d7869b..3e037269113 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/IndexChangeJobTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/IndexChangeJobTest.java
@@ -17,10 +17,6 @@
package org.apache.doris.alter;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.BuildIndexClause;
-import org.apache.doris.analysis.CreateIndexClause;
-import org.apache.doris.analysis.DropIndexClause;
import org.apache.doris.catalog.CatalogTestUtil;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
@@ -40,6 +36,10 @@ import org.apache.doris.common.FeMetaVersion;
import org.apache.doris.common.UserException;
import org.apache.doris.info.TableNameInfo;
import org.apache.doris.nereids.trees.plans.commands.CancelAlterTableCommand;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.BuildIndexOp;
+import org.apache.doris.nereids.trees.plans.commands.info.CreateIndexOp;
+import org.apache.doris.nereids.trees.plans.commands.info.DropIndexOp;
import org.apache.doris.nereids.trees.plans.commands.info.IndexDefinition;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.task.AgentTask;
@@ -113,7 +113,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -123,10 +123,10 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ createIndexOp.validate(new ConnectContext());
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(0, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -140,27 +140,28 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
- TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
+ TableNameInfo tableNameInfo = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
olapTable.getName());
IndexDefinition indexDefinition = new IndexDefinition(indexName, false,
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexClause = new CreateIndexOp(tableNameInfo, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexClause.validate(connectContext);
+ alterOps.add(createIndexClause);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexClause = new BuildIndexOp(tableNameInfo, indexName, null, false);
+ buildIndexClause.validate(connectContext);
+ alterOps.add(buildIndexClause);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -172,7 +173,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -182,17 +183,18 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- DropIndexClause dropIndexClause = new DropIndexClause(indexName, false, tableName, false);
- dropIndexClause.analyze();
- alterClauses.add(dropIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ DropIndexOp dropIndexOp = new DropIndexOp(indexName, false, tableName, false);
+ dropIndexOp.validate(connectContext);
+ alterOps.add(dropIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -206,27 +208,28 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
- TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
+ TableNameInfo tableNameInfo = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
olapTable.getName());
IndexDefinition indexDefinition = new IndexDefinition(indexName, false,
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableNameInfo, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexOp = new BuildIndexOp(tableNameInfo, indexName, null, false);
+ buildIndexOp.validate(new ConnectContext());
+ alterOps.add(buildIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -264,7 +267,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -274,17 +277,18 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- DropIndexClause dropIndexClause = new DropIndexClause(indexName, false, tableName, false);
- dropIndexClause.analyze();
- alterClauses.add(dropIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ DropIndexOp dropIndexOp = new DropIndexOp(indexName, false, tableName, false);
+ dropIndexOp.validate(connectContext);
+ alterOps.add(dropIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -321,7 +325,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -331,17 +335,18 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexOp = new BuildIndexOp(tableName, indexName, null, false);
+ buildIndexOp.validate(connectContext);
+ alterOps.add(buildIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -368,7 +373,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -378,23 +383,24 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
olapTable.setState(OlapTableState.SCHEMA_CHANGE);
expectedEx.expect(DdlException.class);
expectedEx.expectMessage("errCode = 2, detailMessage = Table[testTable1]'s state(SCHEMA_CHANGE) is not NORMAL. Do not allow doing ALTER ops");
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
olapTable.setState(OlapTableState.NORMAL);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexOp = new BuildIndexOp(tableName, indexName, null, false);
+ buildIndexOp.validate(connectContext);
+ alterOps.add(buildIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -448,7 +454,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -458,23 +464,24 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
olapTable.setState(OlapTableState.SCHEMA_CHANGE);
expectedEx.expect(DdlException.class);
expectedEx.expectMessage("errCode = 2, detailMessage = Table[testTable1]'s state(SCHEMA_CHANGE) is not NORMAL. Do not allow doing ALTER ops");
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
olapTable.setState(OlapTableState.NORMAL);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- DropIndexClause dropIndexClause = new DropIndexClause(indexName, false, tableName, false);
- dropIndexClause.analyze();
- alterClauses.add(dropIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ DropIndexOp dropIndexOp = new DropIndexOp(indexName, false, tableName, false);
+ dropIndexOp.validate(connectContext);
+ alterOps.add(dropIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -528,7 +535,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -538,17 +545,18 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexOp = new BuildIndexOp(tableName, indexName, null, false);
+ buildIndexOp.validate(connectContext);
+ alterOps.add(buildIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -593,7 +601,7 @@ public class IndexChangeJobTest {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
String indexName = "index1";
@@ -603,17 +611,18 @@ public class IndexChangeJobTest {
Lists.newArrayList(olapTable.getBaseSchema().get(1).getName()),
"INVERTED",
Maps.newHashMap(), "balabala");
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
- alterClauses.add(createIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
+ alterOps.add(createIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertEquals(olapTable.getIndexes().size(), 1);
Assert.assertEquals(olapTable.getIndexes().get(0).getIndexName(), "index1");
- alterClauses.clear();
- BuildIndexClause buildIndexClause = new BuildIndexClause(tableName, indexName, null, false);
- buildIndexClause.analyze();
- alterClauses.add(buildIndexClause);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ alterOps.clear();
+ BuildIndexOp buildIndexOp = new BuildIndexOp(tableName, indexName, null, false);
+ buildIndexOp.validate(connectContext);
+ alterOps.add(buildIndexOp);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, IndexChangeJob> indexChangeJobMap = schemaChangeHandler.getIndexChangeJobs();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.NORMAL, olapTable.getState());
@@ -668,16 +677,17 @@ public class IndexChangeJobTest {
Maps.newHashMap(), "ngram bf index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
// Test with enable_add_index_for_new_data = true
ConnectContext context = ConnectContext.get();
context.getSessionVariable().setEnableAddIndexForNewData(true);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(1, table.getIndexes().size());
@@ -701,12 +711,11 @@ public class IndexChangeJobTest {
Lists.newArrayList(table.getBaseSchema().get(3).getName()),
"NGRAM_BF",
Maps.newHashMap(), "ngram bf index2");
-
- createIndexClause = new CreateIndexClause(tableName, indexDefinition2, false);
- createIndexClause.analyze();
- ArrayList<AlterClause> alterClauses2 = new ArrayList<>();
- alterClauses2.add(createIndexClause);
- schemaChangeHandler.process(alterClauses2, db, table);
+ createIndexOp = new CreateIndexOp(tableName, indexDefinition2, false);
+ createIndexOp.validate(connectContext);
+ ArrayList<AlterOp> alterOps2 = new ArrayList<>();
+ alterOps2.add(createIndexOp);
+ schemaChangeHandler.process(alterOps2, db, table);
indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.SCHEMA_CHANGE, table.getState());
@@ -756,15 +765,16 @@ public class IndexChangeJobTest {
Maps.newHashMap(), "ngram bf index");
TableNameInfo tableName = new TableNameInfo(masterEnv.getInternalCatalog().getName(), db.getName(),
table.getName());
- CreateIndexClause createIndexClause = new CreateIndexClause(tableName, indexDefinition, false);
- createIndexClause.analyze();
+ CreateIndexOp createIndexOp = new CreateIndexOp(tableName, indexDefinition, false);
+ ConnectContext connectContext = new ConnectContext();
+ createIndexOp.validate(connectContext);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(createIndexClause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(createIndexOp);
//cancel test can only with enable_add_index_for_new_data = false
ctx.getSessionVariable().setEnableAddIndexForNewData(false);
- schemaChangeHandler.process(alterClauses, db, table);
+ schemaChangeHandler.process(alterOps, db, table);
Map<Long, AlterJobV2> indexChangeJobMap = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, indexChangeJobMap.size());
Assert.assertEquals(OlapTableState.SCHEMA_CHANGE, table.getState());
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java b/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
index 917e2ec31e7..c60e35c87ce 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
@@ -18,8 +18,6 @@
package org.apache.doris.alter;
import org.apache.doris.alter.AlterJobV2.JobState;
-import org.apache.doris.analysis.AddRollupClause;
-import org.apache.doris.analysis.AlterClause;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.CatalogTestUtil;
import org.apache.doris.catalog.Column;
@@ -43,6 +41,9 @@ import org.apache.doris.common.FeMetaVersion;
import org.apache.doris.common.UserException;
import org.apache.doris.common.jmockit.Deencapsulation;
import org.apache.doris.meta.MetaContext;
+import org.apache.doris.nereids.trees.plans.commands.info.AddRollupOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.OriginStatement;
import org.apache.doris.task.AgentTask;
import org.apache.doris.task.AgentTaskQueue;
@@ -80,15 +81,15 @@ public class RollupJobV2Test {
private static Env slaveEnv;
private static String transactionSource = "localfe";
- private static AddRollupClause clause;
- private static AddRollupClause clause2;
+ private static AddRollupOp op;
+ private static AddRollupOp op2;
private FakeEnv fakeEnv;
private FakeEditLog fakeEditLog;
@Before
public void setUp() throws InstantiationException, IllegalAccessException, IllegalArgumentException,
- InvocationTargetException, NoSuchMethodException, SecurityException, AnalysisException {
+ InvocationTargetException, NoSuchMethodException, SecurityException, UserException {
fakeEnv = new FakeEnv();
fakeEditLog = new FakeEditLog();
fakeTransactionIDGenerator = new FakeTransactionIDGenerator();
@@ -102,13 +103,13 @@ public class RollupJobV2Test {
slaveTransMgr = slaveEnv.getGlobalTransactionMgr();
slaveTransMgr.setEditLog(slaveEnv.getEditLog());
- clause = new AddRollupClause(CatalogTestUtil.testRollupIndex2, Lists.newArrayList("k1", "v"), null,
+ op = new AddRollupOp(CatalogTestUtil.testRollupIndex2, Lists.newArrayList("k1", "v"), null,
CatalogTestUtil.testIndex1, null);
- clause.analyze();
+ op.validate(new ConnectContext());
- clause2 = new AddRollupClause(CatalogTestUtil.testRollupIndex3, Lists.newArrayList("k1", "v"), null,
+ op2 = new AddRollupOp(CatalogTestUtil.testRollupIndex3, Lists.newArrayList("k1", "v"), null,
CatalogTestUtil.testIndex1, null);
- clause2.analyze();
+ op2.validate(new ConnectContext());
FeConstants.runningUnitTest = true;
AgentTaskQueue.clearAllTasks();
@@ -133,12 +134,12 @@ public class RollupJobV2Test {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
MaterializedViewHandler materializedViewHandler = Env.getCurrentEnv().getMaterializedViewHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(clause);
- alterClauses.add(clause2);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(op);
+ alterOps.add(op2);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
- materializedViewHandler.process(alterClauses, db, olapTable);
+ materializedViewHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = materializedViewHandler.getAlterJobsV2();
materializedViewHandler.runAfterCatalogReady();
@@ -154,11 +155,11 @@ public class RollupJobV2Test {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
MaterializedViewHandler materializedViewHandler = Env.getCurrentEnv().getMaterializedViewHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(clause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(op);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
- materializedViewHandler.process(alterClauses, db, olapTable);
+ materializedViewHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = materializedViewHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
Assert.assertEquals(OlapTableState.ROLLUP, olapTable.getState());
@@ -173,12 +174,12 @@ public class RollupJobV2Test {
MaterializedViewHandler materializedViewHandler = Env.getCurrentEnv().getMaterializedViewHandler();
// add a rollup job
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(clause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(op);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
Partition testPartition = olapTable.getPartition(CatalogTestUtil.testPartitionId1);
- materializedViewHandler.process(alterClauses, db, olapTable);
+ materializedViewHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = materializedViewHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
RollupJobV2 rollupJob = (RollupJobV2) alterJobsV2.values().stream().findAny().get();
@@ -223,12 +224,12 @@ public class RollupJobV2Test {
MaterializedViewHandler materializedViewHandler = Env.getCurrentEnv().getMaterializedViewHandler();
// add a rollup job
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(clause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(op);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
Partition testPartition = olapTable.getPartition(CatalogTestUtil.testPartitionId1);
- materializedViewHandler.process(alterClauses, db, olapTable);
+ materializedViewHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = materializedViewHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
RollupJobV2 rollupJob = (RollupJobV2) alterJobsV2.values().stream().findAny().get();
@@ -343,9 +344,9 @@ public class RollupJobV2Test {
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId2);
- AddRollupClause addRollupClause = new AddRollupClause("r1", Lists.newArrayList("k1", "v1", "v2"), null, CatalogTestUtil.testIndex2, null);
+ AddRollupOp addRollupOp = new AddRollupOp("r1", Lists.newArrayList("k1", "v1", "v2"), null, CatalogTestUtil.testIndex2, null);
- List<Column> columns = materializedViewHandler.checkAndPrepareMaterializedView(addRollupClause, olapTable, CatalogTestUtil.testIndexId2, false);
+ List<Column> columns = materializedViewHandler.checkAndPrepareMaterializedView(addRollupOp, olapTable, CatalogTestUtil.testIndexId2, false);
for (Column column : columns) {
if (column.nameEquals("v1", true)) {
Assert.assertNull(column.getAggregationType());
diff --git a/fe/fe-core/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java b/fe/fe-core/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
index 6db85740185..1cd718c68a1 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
@@ -18,12 +18,7 @@
package org.apache.doris.alter;
import org.apache.doris.alter.AlterJobV2.JobState;
-import org.apache.doris.analysis.AddColumnClause;
-import org.apache.doris.analysis.AlterClause;
-import org.apache.doris.analysis.ColumnDef;
-import org.apache.doris.analysis.ColumnDef.DefaultValue;
import org.apache.doris.analysis.ColumnPosition;
-import org.apache.doris.analysis.ModifyTablePropertiesClause;
import org.apache.doris.backup.CatalogMocker;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.CatalogTestUtil;
@@ -47,7 +42,6 @@ import org.apache.doris.catalog.Replica;
import org.apache.doris.catalog.ScalarType;
import org.apache.doris.catalog.Tablet;
import org.apache.doris.catalog.Type;
-import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.DdlException;
import org.apache.doris.common.FeConstants;
import org.apache.doris.common.FeMetaVersion;
@@ -55,6 +49,13 @@ import org.apache.doris.common.SchemaVersionAndHash;
import org.apache.doris.common.UserException;
import org.apache.doris.common.jmockit.Deencapsulation;
import org.apache.doris.meta.MetaContext;
+import org.apache.doris.nereids.trees.plans.commands.info.AddColumnOp;
+import org.apache.doris.nereids.trees.plans.commands.info.AlterOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ColumnDefinition;
+import org.apache.doris.nereids.trees.plans.commands.info.DefaultValue;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyTablePropertiesOp;
+import org.apache.doris.nereids.types.DataType;
+import org.apache.doris.qe.ConnectContext;
import org.apache.doris.task.AgentTask;
import org.apache.doris.task.AgentTaskQueue;
import org.apache.doris.thrift.TStorageFormat;
@@ -83,6 +84,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
public class SchemaChangeJobV2Test {
@@ -95,10 +97,9 @@ public class SchemaChangeJobV2Test {
private static GlobalTransactionMgr slaveTransMgr;
private static Env masterEnv;
private static Env slaveEnv;
-
- private static ColumnDef newCol = new ColumnDef("add_v", ScalarType.createType(PrimitiveType.INT),
- false, AggregateType.MAX, false, new DefaultValue(true, "1"), "");
- private static AddColumnClause addColumnClause = new AddColumnClause(newCol, new ColumnPosition("v"), null, null);
+ private static ColumnDefinition newCol = new ColumnDefinition("add_v", DataType.fromCatalogType(ScalarType.createType(PrimitiveType.INT)),
+ false, AggregateType.MAX, false, Optional.of(new DefaultValue("1")), "");
+ private static AddColumnOp addColumnOp = new AddColumnOp(newCol, new ColumnPosition("v"), null, null);
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@@ -106,7 +107,7 @@ public class SchemaChangeJobV2Test {
@Before
public void setUp()
throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
- NoSuchMethodException, SecurityException, AnalysisException, DdlException {
+ NoSuchMethodException, SecurityException, UserException {
FakeEnv.setMetaVersion(FeMetaVersion.VERSION_CURRENT);
fakeEditLog = new FakeEditLog();
fakeEnv = new FakeEnv();
@@ -117,7 +118,7 @@ public class SchemaChangeJobV2Test {
masterTransMgr.setEditLog(masterEnv.getEditLog());
slaveTransMgr = (GlobalTransactionMgr) slaveEnv.getGlobalTransactionMgr();
slaveTransMgr.setEditLog(slaveEnv.getEditLog());
- addColumnClause.analyze();
+ addColumnOp.validate(new ConnectContext());
FeConstants.runningUnitTest = true;
AgentTaskQueue.clearAllTasks();
@@ -129,11 +130,11 @@ public class SchemaChangeJobV2Test {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(addColumnClause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(addColumnOp);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
Assert.assertEquals(OlapTableState.SCHEMA_CHANGE, olapTable.getState());
@@ -148,12 +149,12 @@ public class SchemaChangeJobV2Test {
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
// add a schema change job
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(addColumnClause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(addColumnOp);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
Partition testPartition = olapTable.getPartition(CatalogTestUtil.testPartitionId1);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
SchemaChangeJobV2 schemaChangeJob = (SchemaChangeJobV2) alterJobsV2.values().stream().findAny().get();
@@ -224,12 +225,12 @@ public class SchemaChangeJobV2Test {
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
// add a schema change job
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
- alterClauses.add(addColumnClause);
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
+ alterOps.add(addColumnOp);
Database db = masterEnv.getInternalCatalog().getDbOrDdlException(CatalogTestUtil.testDbId1);
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogTestUtil.testTableId1);
Partition testPartition = olapTable.getPartition(CatalogTestUtil.testPartitionId1);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Map<Long, AlterJobV2> alterJobsV2 = schemaChangeHandler.getAlterJobsV2();
Assert.assertEquals(1, alterJobsV2.size());
SchemaChangeJobV2 schemaChangeJob = (SchemaChangeJobV2) alterJobsV2.values().stream().findAny().get();
@@ -304,17 +305,17 @@ public class SchemaChangeJobV2Test {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Map<String, String> properties = new HashMap<>();
properties.put(DynamicPartitionProperty.ENABLE, "true");
properties.put(DynamicPartitionProperty.TIME_UNIT, "day");
properties.put(DynamicPartitionProperty.END, "3");
properties.put(DynamicPartitionProperty.PREFIX, "p");
properties.put(DynamicPartitionProperty.BUCKETS, "30");
- alterClauses.add(new ModifyTablePropertiesClause(properties));
+ alterOps.add(new ModifyTablePropertiesOp(properties));
Database db = CatalogMocker.mockDb();
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogMocker.TEST_TBL2_ID);
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
Assert.assertTrue(olapTable.getTableProperty().getDynamicPartitionProperty().isExist());
Assert.assertTrue(olapTable.getTableProperty().getDynamicPartitionProperty().getEnable());
Assert.assertEquals("day", olapTable.getTableProperty().getDynamicPartitionProperty().getTimeUnit());
@@ -324,34 +325,34 @@ public class SchemaChangeJobV2Test {
// set dynamic_partition.enable = false
- ArrayList<AlterClause> tmpAlterClauses = new ArrayList<>();
+ ArrayList<AlterOp> tmpAlterOps = new ArrayList<>();
properties.put(DynamicPartitionProperty.ENABLE, "false");
- tmpAlterClauses.add(new ModifyTablePropertiesClause(properties));
- schemaChangeHandler.process(tmpAlterClauses, db, olapTable);
+ tmpAlterOps.add(new ModifyTablePropertiesOp(properties));
+ schemaChangeHandler.process(tmpAlterOps, db, olapTable);
Assert.assertFalse(olapTable.getTableProperty().getDynamicPartitionProperty().getEnable());
// set dynamic_partition.time_unit = week
- tmpAlterClauses = new ArrayList<>();
+ tmpAlterOps = new ArrayList<>();
properties.put(DynamicPartitionProperty.TIME_UNIT, "week");
- tmpAlterClauses.add(new ModifyTablePropertiesClause(properties));
- schemaChangeHandler.process(tmpAlterClauses, db, olapTable);
+ tmpAlterOps.add(new ModifyTablePropertiesOp(properties));
+ schemaChangeHandler.process(tmpAlterOps, db, olapTable);
Assert.assertEquals("week", olapTable.getTableProperty().getDynamicPartitionProperty().getTimeUnit());
// set dynamic_partition.end = 10
- tmpAlterClauses = new ArrayList<>();
+ tmpAlterOps = new ArrayList<>();
properties.put(DynamicPartitionProperty.END, "10");
- tmpAlterClauses.add(new ModifyTablePropertiesClause(properties));
- schemaChangeHandler.process(tmpAlterClauses, db, olapTable);
+ tmpAlterOps.add(new ModifyTablePropertiesOp(properties));
+ schemaChangeHandler.process(tmpAlterOps, db, olapTable);
Assert.assertEquals(10, olapTable.getTableProperty().getDynamicPartitionProperty().getEnd());
// set dynamic_partition.prefix = p1
- tmpAlterClauses = new ArrayList<>();
+ tmpAlterOps = new ArrayList<>();
properties.put(DynamicPartitionProperty.PREFIX, "p1");
- tmpAlterClauses.add(new ModifyTablePropertiesClause(properties));
- schemaChangeHandler.process(tmpAlterClauses, db, olapTable);
+ tmpAlterOps.add(new ModifyTablePropertiesOp(properties));
+ schemaChangeHandler.process(tmpAlterOps, db, olapTable);
Assert.assertEquals("p1", olapTable.getTableProperty().getDynamicPartitionProperty().getPrefix());
// set dynamic_partition.buckets = 3
- tmpAlterClauses = new ArrayList<>();
+ tmpAlterOps = new ArrayList<>();
properties.put(DynamicPartitionProperty.BUCKETS, "3");
- tmpAlterClauses.add(new ModifyTablePropertiesClause(properties));
- schemaChangeHandler.process(tmpAlterClauses, db, olapTable);
+ tmpAlterOps.add(new ModifyTablePropertiesOp(properties));
+ schemaChangeHandler.process(tmpAlterOps, db, olapTable);
Assert.assertEquals(3, olapTable.getTableProperty().getDynamicPartitionProperty().getBuckets());
}
@@ -360,10 +361,10 @@ public class SchemaChangeJobV2Test {
fakeEnv = new FakeEnv();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Map<String, String> properties = new HashMap<>();
properties.put(propertyKey, propertyValue);
- alterClauses.add(new ModifyTablePropertiesClause(properties));
+ alterOps.add(new ModifyTablePropertiesOp(properties));
Database db = CatalogMocker.mockDb();
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogMocker.TEST_TBL2_ID);
@@ -372,7 +373,7 @@ public class SchemaChangeJobV2Test {
expectedEx.expectMessage("errCode = 2,"
+ " detailMessage = Table test_db.test_tbl2 is not a dynamic partition table. "
+ "Use command `HELP ALTER TABLE` to see how to change a normal table to a dynamic partition table.");
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
}
@Test
@@ -390,7 +391,7 @@ public class SchemaChangeJobV2Test {
fakeEditLog = new FakeEditLog();
FakeEnv.setEnv(masterEnv);
SchemaChangeHandler schemaChangeHandler = Env.getCurrentEnv().getSchemaChangeHandler();
- ArrayList<AlterClause> alterClauses = new ArrayList<>();
+ ArrayList<AlterOp> alterOps = new ArrayList<>();
Map<String, String> properties = new HashMap<>();
properties.put(DynamicPartitionProperty.ENABLE, "true");
properties.put(DynamicPartitionProperty.DYNAMIC_PARTITION_PROPERTY_PREFIX + "time_uint", "day");
@@ -398,14 +399,14 @@ public class SchemaChangeJobV2Test {
properties.put(DynamicPartitionProperty.PREFIX, "p");
properties.put(DynamicPartitionProperty.BUCKETS, "30");
properties.put("invalid_property", "invalid_value");
- alterClauses.add(new ModifyTablePropertiesClause(properties));
+ alterOps.add(new ModifyTablePropertiesOp(properties));
Database db = CatalogMocker.mockDb();
OlapTable olapTable = (OlapTable) db.getTableOrDdlException(CatalogMocker.TEST_TBL2_ID);
expectedEx.expect(DdlException.class);
expectedEx.expectMessage("errCode = 2,"
+ " detailMessage = Invalid dynamic partition properties: dynamic_partition.time_uint, dynamic_partition.edn");
- schemaChangeHandler.process(alterClauses, db, olapTable);
+ schemaChangeHandler.process(alterOps, db, olapTable);
}
@Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommandTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommandTest.java
index 77af57e9b1a..2d7471ca093 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommandTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/AlterSystemCommandTest.java
@@ -33,7 +33,7 @@ import org.apache.doris.nereids.trees.plans.commands.info.DropBrokerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropFollowerOp;
import org.apache.doris.nereids.trees.plans.commands.info.DropObserverOp;
import org.apache.doris.nereids.trees.plans.commands.info.ModifyBackendOp;
-import org.apache.doris.nereids.trees.plans.commands.info.ModifyFrontendOrBackendHostNameOp;
+import org.apache.doris.nereids.trees.plans.commands.info.ModifyNodeHostNameOp;
import org.apache.doris.qe.ConnectContext;
import com.google.common.collect.ImmutableList;
@@ -148,16 +148,16 @@ public class AlterSystemCommandTest {
Assertions.assertDoesNotThrow(() -> modifyBackend.validate(connectContext));
// test modifyFrontendOrBackendHostName
- for (ModifyFrontendOrBackendHostNameOp.ModifyOpType type : ModifyFrontendOrBackendHostNameOp.ModifyOpType.values()) {
+ for (ModifyNodeHostNameOp.ModifyOpType type : ModifyNodeHostNameOp.ModifyOpType.values()) {
for (String newHost : Arrays.asList("localhost", "192.168.10.10")) {
AlterSystemCommand command = new AlterSystemCommand(
- new ModifyFrontendOrBackendHostNameOp(hostPorts.get(0), newHost, type),
+ new ModifyNodeHostNameOp(hostPorts.get(0), newHost, type),
PlanType.ALTER_SYSTEM_MODIFY_FRONTEND_OR_BACKEND_HOSTNAME);
Assertions.assertDoesNotThrow(() -> command.validate(connectContext));
}
for (String newHost : Arrays.asList("localhost2", "192.168.10.300")) {
AlterSystemCommand command = new AlterSystemCommand(
- new ModifyFrontendOrBackendHostNameOp(hostPorts.get(0), newHost, type),
+ new ModifyNodeHostNameOp(hostPorts.get(0), newHost, type),
PlanType.ALTER_SYSTEM_MODIFY_FRONTEND_OR_BACKEND_HOSTNAME);
Assertions.assertThrows(AnalysisException.class, () -> command.validate(connectContext),
"Unknown hostname: " + newHost + ": Name or service not known");
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOpTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOpTest.java
index 56d3a4f813b..c802d1d389a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOpTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/AddPartitionFieldOpTest.java
@@ -18,7 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.AddPartitionFieldClause;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -36,13 +35,6 @@ public class AddPartitionFieldOpTest {
Assertions.assertEquals("category", op.getColumnName());
Assertions.assertNull(op.getPartitionFieldName());
Assertions.assertEquals("ADD PARTITION KEY category", op.toSql());
-
- AddPartitionFieldClause clause = (AddPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNotNull(clause);
- Assertions.assertNull(clause.getTransformName());
- Assertions.assertNull(clause.getTransformArg());
- Assertions.assertEquals("category", clause.getColumnName());
- Assertions.assertNull(clause.getPartitionFieldName());
}
@Test
@@ -51,13 +43,6 @@ public class AddPartitionFieldOpTest {
Assertions.assertEquals("category", op.getColumnName());
Assertions.assertEquals("category_partition", op.getPartitionFieldName());
Assertions.assertEquals("ADD PARTITION KEY category AS category_partition", op.toSql());
-
- AddPartitionFieldClause clause = (AddPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNotNull(clause);
- Assertions.assertNull(clause.getTransformName());
- Assertions.assertNull(clause.getTransformArg());
- Assertions.assertEquals("category", clause.getColumnName());
- Assertions.assertEquals("category_partition", clause.getPartitionFieldName());
}
@Test
@@ -76,12 +61,6 @@ public class AddPartitionFieldOpTest {
Assertions.assertEquals("ts", op.getColumnName());
Assertions.assertEquals("ts_year", op.getPartitionFieldName());
Assertions.assertEquals("ADD PARTITION KEY year(ts) AS ts_year", op.toSql());
-
- AddPartitionFieldClause clause = (AddPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertEquals("year", clause.getTransformName());
- Assertions.assertNull(clause.getTransformArg());
- Assertions.assertEquals("ts", clause.getColumnName());
- Assertions.assertEquals("ts_year", clause.getPartitionFieldName());
}
@Test
@@ -101,12 +80,6 @@ public class AddPartitionFieldOpTest {
Assertions.assertEquals("id", op.getColumnName());
Assertions.assertEquals("id_bucket_16", op.getPartitionFieldName());
Assertions.assertEquals("ADD PARTITION KEY bucket(16, id) AS id_bucket_16", op.toSql());
-
- AddPartitionFieldClause clause = (AddPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertEquals("bucket", clause.getTransformName());
- Assertions.assertEquals(16, clause.getTransformArg());
- Assertions.assertEquals("id", clause.getColumnName());
- Assertions.assertEquals("id_bucket_16", clause.getPartitionFieldName());
}
@Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOpTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOpTest.java
index 9b387afcc5b..1739620b6f8 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOpTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/DropPartitionFieldOpTest.java
@@ -18,7 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.DropPartitionFieldClause;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -34,11 +33,6 @@ public class DropPartitionFieldOpTest {
Assertions.assertEquals("ts_year", op.getPartitionFieldName());
Assertions.assertNull(op.getTransformName());
Assertions.assertEquals("DROP PARTITION KEY ts_year", op.toSql());
-
- DropPartitionFieldClause clause = (DropPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNotNull(clause);
- Assertions.assertEquals("ts_year", clause.getPartitionFieldName());
- Assertions.assertNull(clause.getTransformName());
}
@Test
@@ -50,13 +44,6 @@ public class DropPartitionFieldOpTest {
Assertions.assertEquals(16, op.getTransformArg());
Assertions.assertEquals("id", op.getColumnName());
Assertions.assertEquals("DROP PARTITION KEY bucket(16, id)", op.toSql());
-
- DropPartitionFieldClause clause = (DropPartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNotNull(clause);
- Assertions.assertNull(clause.getPartitionFieldName());
- Assertions.assertEquals("bucket", clause.getTransformName());
- Assertions.assertEquals(16, clause.getTransformArg());
- Assertions.assertEquals("id", clause.getColumnName());
}
@Test
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOpTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOpTest.java
index d7ca738fb83..bec89ff8196 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOpTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/commands/info/ReplacePartitionFieldOpTest.java
@@ -18,7 +18,6 @@
package org.apache.doris.nereids.trees.plans.commands.info;
import org.apache.doris.alter.AlterOpType;
-import org.apache.doris.analysis.ReplacePartitionFieldClause;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -48,12 +47,6 @@ public class ReplacePartitionFieldOpTest {
Assertions.assertEquals("ts", op.getNewColumnName());
Assertions.assertEquals("ts_month", op.getNewPartitionFieldName());
Assertions.assertEquals("REPLACE PARTITION KEY ts_year WITH month(ts) AS ts_month", op.toSql());
-
- ReplacePartitionFieldClause clause = (ReplacePartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNotNull(clause);
- Assertions.assertEquals("ts_year", clause.getOldPartitionFieldName());
- Assertions.assertNull(clause.getOldTransformName());
- Assertions.assertEquals("month", clause.getNewTransformName());
}
@Test
@@ -123,12 +116,6 @@ public class ReplacePartitionFieldOpTest {
Assertions.assertEquals(16, op.getOldTransformArg());
Assertions.assertEquals("id", op.getOldColumnName());
Assertions.assertEquals("REPLACE PARTITION KEY bucket(16, id) WITH truncate(5, code) AS code_trunc", op.toSql());
-
- ReplacePartitionFieldClause clause = (ReplacePartitionFieldClause) op.translateToLegacyAlterClause();
- Assertions.assertNull(clause.getOldPartitionFieldName());
- Assertions.assertEquals("bucket", clause.getOldTransformName());
- Assertions.assertEquals(16, clause.getOldTransformArg());
- Assertions.assertEquals("id", clause.getOldColumnName());
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org