This is an automated email from the ASF dual-hosted git repository. shuwenwei pushed a commit to branch sync-generic-changes in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 0bcc2135bb3715e509db431eb05c852f6f4417f8 Author: shuwenwei <[email protected]> AuthorDate: Fri Sep 18 08:38:08 2026 +0800 set table column properties --- .../consensus/request/ConfigPhysicalPlan.java | 4 + .../consensus/request/ConfigPhysicalPlanType.java | 1 + .../request/ConfigPhysicalPlanVisitor.java | 8 + .../write/table/SetTableColumnPropertiesPlan.java | 80 ++++++++ .../iotdb/confignode/manager/ConfigManager.java | 2 + .../iotdb/confignode/manager/ProcedureManager.java | 21 ++ .../receiver/protocol/IoTDBConfigNodeReceiver.java | 19 ++ .../PipeConfigPhysicalPlanTSStatusVisitor.java | 7 + .../pipe/source/ConfigRegionListeningFilter.java | 2 + .../manager/schema/ClusterSchemaManager.java | 55 ++++++ .../persistence/executor/ConfigPlanExecutor.java | 4 + .../persistence/schema/ClusterSchemaInfo.java | 11 ++ .../confignode/persistence/schema/ConfigMTree.java | 22 +++ ...re.java => AbstractSetPropertiesProcedure.java} | 71 +++---- .../table/SetTableColumnPropertiesProcedure.java | 107 ++++++++++ .../schema/table/SetTablePropertiesProcedure.java | 218 ++------------------- .../procedure/store/ProcedureFactory.java | 9 + .../table/AlterOrDropTableOperationType.java | 5 +- 18 files changed, 398 insertions(+), 248 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java index 0d9ca912571..c70b8c12fcf 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java @@ -118,6 +118,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan import org.apache.iotdb.confignode.consensus.request.write.table.RollbackCreateTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.RollbackPreDeleteTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.AddTableViewColumnPlan; @@ -430,6 +431,9 @@ public abstract class ConfigPhysicalPlan implements IConsensusRequest { case SetTableProperties: plan = new SetTablePropertiesPlan(configPhysicalPlanType); break; + case SetTableColumnProperties: + plan = new SetTableColumnPropertiesPlan(configPhysicalPlanType); + break; case SetViewProperties: plan = new SetViewPropertiesPlan(); break; diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java index 1be95181414..dbc6988ba87 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java @@ -233,6 +233,7 @@ public enum ConfigPhysicalPlanType { AlterColumnDataType((short) 878), PreAlterColumnDataType((short) 879), RollbackPreDeleteTable((short) 880), + SetTableColumnProperties((short) 881), /** Deprecated types for sync, restored them for upgrade. */ @Deprecated diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java index 53e3c4cd37d..283aee3ae58 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanVisitor.java @@ -39,6 +39,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTab import org.apache.iotdb.confignode.consensus.request.write.table.RenameTableColumnPlan; import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.AddTableViewColumnPlan; @@ -174,6 +175,8 @@ public abstract class ConfigPhysicalPlanVisitor<R, C> { return visitAddTableViewColumn((AddTableViewColumnPlan) plan, context); case SetTableProperties: return visitSetTableProperties((SetTablePropertiesPlan) plan, context); + case SetTableColumnProperties: + return visitSetTableColumnProperties((SetTableColumnPropertiesPlan) plan, context); case SetViewProperties: return visitSetViewProperties((SetViewPropertiesPlan) plan, context); case RenameTableColumn: @@ -462,6 +465,11 @@ public abstract class ConfigPhysicalPlanVisitor<R, C> { return visitPlan(setTablePropertiesPlan, context); } + public R visitSetTableColumnProperties( + final SetTableColumnPropertiesPlan setTableColumnPropertiesPlan, final C context) { + return visitPlan(setTableColumnPropertiesPlan, context); + } + // Use set table properties by default public R visitSetViewProperties( final SetViewPropertiesPlan setViewPropertiesPlan, final C context) { diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/SetTableColumnPropertiesPlan.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/SetTableColumnPropertiesPlan.java new file mode 100644 index 00000000000..89b18cafc84 --- /dev/null +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/SetTableColumnPropertiesPlan.java @@ -0,0 +1,80 @@ +/* + * 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.iotdb.confignode.consensus.request.write.table; + +import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType; + +import org.apache.tsfile.utils.ReadWriteIOUtils; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Map; + +public class SetTableColumnPropertiesPlan extends AbstractTablePlan { + + private String columnName; + private Map<String, String> properties; + private boolean isRollback; + + public SetTableColumnPropertiesPlan(final ConfigPhysicalPlanType type) { + super(type); + } + + public SetTableColumnPropertiesPlan( + final String database, + final String tableName, + final String columnName, + final Map<String, String> properties, + final boolean isRollback) { + super(ConfigPhysicalPlanType.SetTableColumnProperties, database, tableName); + this.columnName = columnName; + this.properties = properties; + this.isRollback = isRollback; + } + + public String getColumnName() { + return columnName; + } + + public Map<String, String> getProperties() { + return properties; + } + + public boolean isRollback() { + return isRollback; + } + + @Override + protected void serializeImpl(final DataOutputStream stream) throws IOException { + super.serializeImpl(stream); + ReadWriteIOUtils.write(columnName, stream); + ReadWriteIOUtils.write(properties, stream); + ReadWriteIOUtils.write(isRollback, stream); + } + + @Override + protected void deserializeImpl(final ByteBuffer buffer) throws IOException { + super.deserializeImpl(buffer); + this.columnName = ReadWriteIOUtils.readString(buffer); + this.properties = ReadWriteIOUtils.readMap(buffer); + this.isRollback = ReadWriteIOUtils.readBool(buffer); + } +} diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java index 1c41618d90a..9b5e80a3e86 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java @@ -3314,6 +3314,8 @@ public class ConfigManager implements IManager { return procedureManager.alterTableAddColumn(req); case SET_PROPERTIES: return procedureManager.alterTableSetProperties(req); + case SET_COLUMN_PROPERTIES: + return procedureManager.alterTableSetColumnProperties(req); case RENAME_COLUMN: return procedureManager.alterTableRenameColumn(req); case DROP_COLUMN: diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java index 50b003d0494..056c756f683 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java @@ -113,6 +113,7 @@ import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableColumnPr import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableProcedure; +import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTableColumnPropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTablePropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.AddViewColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.CreateTableViewProcedure; @@ -2401,6 +2402,25 @@ public class ProcedureManager { false)); } + public TSStatus alterTableSetColumnProperties(final TAlterOrDropTableReq req) { + final String columnName = ReadWriteIOUtils.readString(req.updateInfo); + final SetTableColumnPropertiesProcedure procedure = + new SetTableColumnPropertiesProcedure( + req.database, + req.tableName, + columnName, + req.queryId, + ReadWriteIOUtils.readMap(req.updateInfo), + false); + return executeWithoutDuplicate( + req.database, + null, + req.tableName, + req.queryId, + ProcedureType.SET_TABLE_COLUMN_PROPERTIES_PROCEDURE, + procedure); + } + public TSStatus alterTableRenameColumn(final TAlterOrDropTableReq req) { final boolean isView = req.isSetIsView() && req.isIsView(); return executeWithoutDuplicate( @@ -2652,6 +2672,7 @@ public class ProcedureManager { case ADD_VIEW_COLUMN_PROCEDURE: case SET_TABLE_PROPERTIES_PROCEDURE: case SET_VIEW_PROPERTIES_PROCEDURE: + case SET_TABLE_COLUMN_PROPERTIES_PROCEDURE: case RENAME_TABLE_COLUMN_PROCEDURE: case RENAME_VIEW_COLUMN_PROCEDURE: case DROP_TABLE_COLUMN_PROCEDURE: diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java index 86f2320b344..936e54e00db 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java @@ -79,6 +79,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTab import org.apache.iotdb.confignode.consensus.request.write.table.RenameTableColumnPlan; import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.AddTableViewColumnPlan; @@ -116,6 +117,7 @@ import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableColumnPr import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableProcedure; +import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTableColumnPropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTablePropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.AddViewColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.CreateTableViewProcedure; @@ -572,6 +574,7 @@ public class IoTDBConfigNodeReceiver extends IoTDBFileReceiver { case AddTableColumn: case AddViewColumn: case SetTableProperties: + case SetTableColumnProperties: case SetViewProperties: case CommitDeleteColumn: case CommitDeleteViewColumn: @@ -1034,6 +1037,22 @@ public class IoTDBConfigNodeReceiver extends IoTDBFileReceiver { queryId, ((SetTablePropertiesPlan) plan).getProperties(), shouldMarkAsPipeRequest.get())); + case SetTableColumnProperties: + return configManager + .getProcedureManager() + .executeWithoutDuplicate( + ((SetTableColumnPropertiesPlan) plan).getDatabase(), + null, + ((SetTableColumnPropertiesPlan) plan).getTableName(), + queryId, + ProcedureType.SET_TABLE_COLUMN_PROPERTIES_PROCEDURE, + new SetTableColumnPropertiesProcedure( + ((SetTableColumnPropertiesPlan) plan).getDatabase(), + ((SetTableColumnPropertiesPlan) plan).getTableName(), + ((SetTableColumnPropertiesPlan) plan).getColumnName(), + queryId, + ((SetTableColumnPropertiesPlan) plan).getProperties(), + shouldMarkAsPipeRequest.get())); case SetViewProperties: return configManager .getProcedureManager() diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java index b8607126e99..3b315b7ba3e 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/visitor/PipeConfigPhysicalPlanTSStatusVisitor.java @@ -42,6 +42,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTab import org.apache.iotdb.confignode.consensus.request.write.table.RenameTableColumnPlan; import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.template.CommitSetSchemaTemplatePlan; @@ -536,6 +537,12 @@ public class PipeConfigPhysicalPlanTSStatusVisitor return visitCommonTablePlan(setTablePropertiesPlan, context); } + @Override + public TSStatus visitSetTableColumnProperties( + final SetTableColumnPropertiesPlan setTableColumnPropertiesPlan, final TSStatus context) { + return visitCommonTablePlan(setTableColumnPropertiesPlan, context); + } + @Override public TSStatus visitCommitDeleteColumn( final CommitDeleteColumnPlan commitDeleteColumnPlan, final TSStatus context) { diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/ConfigRegionListeningFilter.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/ConfigRegionListeningFilter.java index ff2cdd5649f..30daf6c9a88 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/ConfigRegionListeningFilter.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/source/ConfigRegionListeningFilter.java @@ -124,6 +124,7 @@ public class ConfigRegionListeningFilter { Collections.unmodifiableList( Arrays.asList( ConfigPhysicalPlanType.SetTableProperties, + ConfigPhysicalPlanType.SetTableColumnProperties, ConfigPhysicalPlanType.SetViewProperties, ConfigPhysicalPlanType.SetTableComment, ConfigPhysicalPlanType.SetViewComment, @@ -287,6 +288,7 @@ public class ConfigRegionListeningFilter { case AddTableColumn: case AddViewColumn: case SetTableProperties: + case SetTableColumnProperties: case SetViewProperties: case SetTableComment: case SetViewComment: diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java index 840be42d48c..0e88a2712b9 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java @@ -1837,6 +1837,61 @@ public class ClusterSchemaManager { return new Pair<>(RpcUtils.SUCCESS_STATUS, updatedTable); } + public synchronized Pair<TSStatus, TsTable> updateTableColumnProperties( + final String database, + final String tableName, + final String columnName, + final Map<String, String> originalProperties, + final Map<String, String> updatedProperties) + throws MetadataException { + final TsTable originalTable = getTableIfExists(database, tableName).orElse(null); + + if (Objects.isNull(originalTable)) { + return new Pair<>( + RpcUtils.getStatus( + TSStatusCode.TABLE_NOT_EXISTS, + String.format("Table '%s.%s' does not exist", database, tableName)), + null); + } + + final Optional<Pair<TSStatus, TsTable>> result = + checkTable4View(database, originalTable, false); + if (result.isPresent()) { + return result.get(); + } + + if (Objects.isNull(originalTable.getColumnSchema(columnName))) { + return new Pair<>( + RpcUtils.getStatus( + TSStatusCode.COLUMN_NOT_EXISTS, + String.format("Column '%s' does not exist", columnName)), + null); + } + + final TsTable updatedTable = new TsTable(originalTable); + final TsTableColumnSchema updatedColumn = updatedTable.getColumnSchema(columnName); + updatedProperties + .keySet() + .removeIf( + key -> Objects.equals(updatedProperties.get(key), updatedColumn.getProps().get(key))); + if (updatedProperties.isEmpty()) { + return new Pair<>(RpcUtils.SUCCESS_STATUS, null); + } + + for (final Map.Entry<String, String> entry : updatedProperties.entrySet()) { + final String key = entry.getKey(); + final String value = entry.getValue(); + originalProperties.put(key, updatedColumn.getProps().get(key)); + if (Objects.nonNull(value)) { + updatedColumn.getProps().put(key, value); + } else { + updatedColumn.getProps().remove(key); + } + } + + return new Pair<>(RpcUtils.SUCCESS_STATUS, updatedTable); + } + private void invalidateLastCache(final String database) { final Map<Integer, TDataNodeLocation> dataNodeLocationMap = getNodeManager().getRegisteredDataNodeLocations(); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java index 58bf86d6858..a09c283a48d 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java @@ -136,6 +136,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan import org.apache.iotdb.confignode.consensus.request.write.table.RollbackCreateTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.RollbackPreDeleteTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.PreCreateTableViewPlan; @@ -588,6 +589,9 @@ public class ConfigPlanExecutor { case SetTableProperties: case SetViewProperties: return clusterSchemaInfo.setTableProperties((SetTablePropertiesPlan) physicalPlan); + case SetTableColumnProperties: + return clusterSchemaInfo.setTableColumnProperties( + (SetTableColumnPropertiesPlan) physicalPlan); case PreDeleteColumn: case PreDeleteViewColumn: return clusterSchemaInfo.preDeleteColumn((PreDeleteColumnPlan) physicalPlan); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java index 1b9c880cd6a..3e900eca55c 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java @@ -69,6 +69,7 @@ import org.apache.iotdb.confignode.consensus.request.write.table.RenameTablePlan import org.apache.iotdb.confignode.consensus.request.write.table.RollbackCreateTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.RollbackPreDeleteTablePlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.PreCreateTableViewPlan; @@ -1593,6 +1594,16 @@ public class ClusterSchemaInfo implements SnapshotProcessor { plan.getProperties())); } + public TSStatus setTableColumnProperties(final SetTableColumnPropertiesPlan plan) { + return executeWithLock( + () -> + tableModelMTree.setTableColumnProperties( + getQualifiedDatabasePartialPath(plan.getDatabase()), + plan.getTableName(), + plan.getColumnName(), + plan.getProperties())); + } + public TSStatus preDeleteColumn(final PreDeleteColumnPlan plan) { databaseReadWriteLock.writeLock().lock(); try { diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java index 12f6a2baaa1..53536aa361c 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ConfigMTree.java @@ -980,6 +980,28 @@ public class ConfigMTree { }); } + public void setTableColumnProperties( + final PartialPath database, + final String tableName, + final String columnName, + final Map<String, String> properties) + throws MetadataException { + final TsTable table = getTableNode(database, tableName).getTable(); + final TsTableColumnSchema columnSchema = table.getColumnSchema(columnName); + if (Objects.isNull(columnSchema)) { + throw new ColumnNotExistsException( + PathUtils.unQualifyDatabaseName(database.getFullPath()), tableName, columnName); + } + properties.forEach( + (key, value) -> { + if (Objects.nonNull(value)) { + columnSchema.getProps().put(key, value); + } else { + columnSchema.getProps().remove(key); + } + }); + } + // Return true if removed column is an attribute column // false if measurement column public boolean preDeleteColumn( diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AbstractSetPropertiesProcedure.java similarity index 76% copy from iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java copy to iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AbstractSetPropertiesProcedure.java index 27e75e6c28c..be6f67007a3 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AbstractSetPropertiesProcedure.java @@ -23,14 +23,11 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.exception.IoTDBException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.table.TsTable; -import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; -import org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewPropertiesPlan; +import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan; import org.apache.iotdb.confignode.i18n.ProcedureMessages; import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; import org.apache.iotdb.confignode.procedure.exception.ProcedureException; -import org.apache.iotdb.confignode.procedure.impl.schema.table.view.SetViewPropertiesProcedure; import org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState; -import org.apache.iotdb.confignode.procedure.store.ProcedureType; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.utils.Pair; @@ -50,19 +47,20 @@ import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropert import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.SET_PROPERTIES; import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.VALIDATE_TABLE; -public class SetTablePropertiesProcedure +public abstract class AbstractSetPropertiesProcedure extends AbstractAlterOrDropTableProcedure<SetTablePropertiesState> { - private static final Logger LOGGER = LoggerFactory.getLogger(SetTablePropertiesProcedure.class); + private static final Logger LOGGER = + LoggerFactory.getLogger(AbstractSetPropertiesProcedure.class); - private Map<String, String> originalProperties = new HashMap<>(); - private Map<String, String> updatedProperties; + protected Map<String, String> originalProperties = new HashMap<>(); + protected Map<String, String> updatedProperties; - public SetTablePropertiesProcedure(final boolean isGeneratedByPipe) { + protected AbstractSetPropertiesProcedure(final boolean isGeneratedByPipe) { super(isGeneratedByPipe); } - public SetTablePropertiesProcedure( + protected AbstractSetPropertiesProcedure( final String database, final String tableName, final String queryId, @@ -125,17 +123,9 @@ public class SetTablePropertiesProcedure } } - private void validateTable(final ConfigNodeProcedureEnv env) { + public void validateTable(final ConfigNodeProcedureEnv env) { try { - final Pair<TSStatus, TsTable> result = - env.getConfigManager() - .getClusterSchemaManager() - .updateTableProperties( - database, - tableName, - originalProperties, - updatedProperties, - this instanceof SetViewPropertiesProcedure); + final Pair<TSStatus, TsTable> result = updateProperties(env); final TSStatus status = result.getLeft(); if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { setFailure(new ProcedureException(new IoTDBException(status))); @@ -148,6 +138,9 @@ public class SetTablePropertiesProcedure } } + protected abstract Pair<TSStatus, TsTable> updateProperties(ConfigNodeProcedureEnv env) + throws MetadataException; + @Override protected void preRelease(final ConfigNodeProcedureEnv env) { super.preRelease(env); @@ -158,11 +151,7 @@ public class SetTablePropertiesProcedure final TSStatus status = env.getConfigManager() .getClusterSchemaManager() - .executePlan( - this instanceof SetViewPropertiesProcedure - ? new SetViewPropertiesPlan(database, tableName, updatedProperties) - : new SetTablePropertiesPlan(database, tableName, updatedProperties), - isGeneratedByPipe); + .executePlan(createSetPropertiesPlan(updatedProperties, false), isGeneratedByPipe); if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { setFailure(new ProcedureException(new IoTDBException(status))); } else { @@ -170,10 +159,8 @@ public class SetTablePropertiesProcedure } } - @Override - protected String getActionMessage() { - return "set table properties"; - } + protected abstract ConfigPhysicalPlan createSetPropertiesPlan( + Map<String, String> properties, boolean isRollback); @Override protected void rollbackState( @@ -212,11 +199,7 @@ public class SetTablePropertiesProcedure final TSStatus status = env.getConfigManager() .getClusterSchemaManager() - .executePlan( - this instanceof SetViewPropertiesProcedure - ? new SetViewPropertiesPlan(database, tableName, originalProperties) - : new SetTablePropertiesPlan(database, tableName, originalProperties), - isGeneratedByPipe); + .executePlan(createSetPropertiesPlan(originalProperties, true), isGeneratedByPipe); if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { setFailure(new ProcedureException(new IoTDBException(status))); } @@ -237,26 +220,17 @@ public class SetTablePropertiesProcedure return VALIDATE_TABLE; } - @Override - public void serialize(final DataOutputStream stream) throws IOException { - stream.writeShort( - isGeneratedByPipe - ? ProcedureType.PIPE_ENRICHED_SET_TABLE_PROPERTIES_PROCEDURE.getTypeCode() - : ProcedureType.SET_TABLE_PROPERTIES_PROCEDURE.getTypeCode()); - innerSerialize(stream); - } - protected void innerSerialize(final DataOutputStream stream) throws IOException { super.serialize(stream); + serializeProperties(stream); + } + protected void serializeProperties(final DataOutputStream stream) throws IOException { ReadWriteIOUtils.write(originalProperties, stream); ReadWriteIOUtils.write(updatedProperties, stream); } - @Override - public void deserialize(final ByteBuffer byteBuffer) { - super.deserialize(byteBuffer); - + protected void deserializeProperties(final ByteBuffer byteBuffer) { this.originalProperties = ReadWriteIOUtils.readMap(byteBuffer); this.updatedProperties = ReadWriteIOUtils.readMap(byteBuffer); } @@ -264,7 +238,8 @@ public class SetTablePropertiesProcedure @Override public boolean equals(final Object o) { return super.equals(o) - && Objects.equals(updatedProperties, ((SetTablePropertiesProcedure) o).updatedProperties); + && Objects.equals( + updatedProperties, ((AbstractSetPropertiesProcedure) o).updatedProperties); } @Override diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTableColumnPropertiesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTableColumnPropertiesProcedure.java new file mode 100644 index 00000000000..996b192e343 --- /dev/null +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTableColumnPropertiesProcedure.java @@ -0,0 +1,107 @@ +/* + * 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.iotdb.confignode.procedure.impl.schema.table; + +import org.apache.iotdb.common.rpc.thrift.TSStatus; +import org.apache.iotdb.commons.exception.MetadataException; +import org.apache.iotdb.commons.schema.table.TsTable; +import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan; +import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnPropertiesPlan; +import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; +import org.apache.iotdb.confignode.procedure.store.ProcedureType; + +import org.apache.tsfile.utils.Pair; +import org.apache.tsfile.utils.ReadWriteIOUtils; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Map; +import java.util.Objects; + +public class SetTableColumnPropertiesProcedure extends AbstractSetPropertiesProcedure { + + private String columnName; + + public SetTableColumnPropertiesProcedure(final boolean isGeneratedByPipe) { + super(isGeneratedByPipe); + } + + public SetTableColumnPropertiesProcedure( + final String database, + final String tableName, + final String columnName, + final String queryId, + final Map<String, String> properties, + final boolean isGeneratedByPipe) { + super(database, tableName, queryId, properties, isGeneratedByPipe); + this.columnName = columnName; + } + + @Override + protected Pair<TSStatus, TsTable> updateProperties(final ConfigNodeProcedureEnv env) + throws MetadataException { + return env.getConfigManager() + .getClusterSchemaManager() + .updateTableColumnProperties( + database, tableName, columnName, originalProperties, updatedProperties); + } + + @Override + protected ConfigPhysicalPlan createSetPropertiesPlan( + final Map<String, String> properties, final boolean isRollback) { + return new SetTableColumnPropertiesPlan( + database, tableName, columnName, properties, isRollback); + } + + @Override + protected String getActionMessage() { + return "set table column properties"; + } + + @Override + public void serialize(final DataOutputStream stream) throws IOException { + stream.writeShort( + isGeneratedByPipe + ? ProcedureType.PIPE_ENRICHED_SET_TABLE_COLUMN_PROPERTIES_PROCEDURE.getTypeCode() + : ProcedureType.SET_TABLE_COLUMN_PROPERTIES_PROCEDURE.getTypeCode()); + super.serialize(stream); + ReadWriteIOUtils.write(columnName, stream); + serializeProperties(stream); + } + + @Override + public void deserialize(final ByteBuffer byteBuffer) { + super.deserialize(byteBuffer); + this.columnName = ReadWriteIOUtils.readString(byteBuffer); + deserializeProperties(byteBuffer); + } + + @Override + public boolean equals(final Object o) { + return super.equals(o) + && Objects.equals(columnName, ((SetTableColumnPropertiesProcedure) o).columnName); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), columnName); + } +} diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java index 27e75e6c28c..8cf3026d043 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java @@ -20,43 +20,23 @@ package org.apache.iotdb.confignode.procedure.impl.schema.table; import org.apache.iotdb.common.rpc.thrift.TSStatus; -import org.apache.iotdb.commons.exception.IoTDBException; import org.apache.iotdb.commons.exception.MetadataException; import org.apache.iotdb.commons.schema.table.TsTable; +import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan; import org.apache.iotdb.confignode.consensus.request.write.table.SetTablePropertiesPlan; import org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewPropertiesPlan; -import org.apache.iotdb.confignode.i18n.ProcedureMessages; import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; -import org.apache.iotdb.confignode.procedure.exception.ProcedureException; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.SetViewPropertiesProcedure; -import org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState; import org.apache.iotdb.confignode.procedure.store.ProcedureType; -import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.utils.Pair; -import org.apache.tsfile.utils.ReadWriteIOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.HashMap; import java.util.Map; -import java.util.Objects; -import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.COMMIT_RELEASE; -import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.PRE_RELEASE; -import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.SET_PROPERTIES; -import static org.apache.iotdb.confignode.procedure.state.schema.SetTablePropertiesState.VALIDATE_TABLE; - -public class SetTablePropertiesProcedure - extends AbstractAlterOrDropTableProcedure<SetTablePropertiesState> { - - private static final Logger LOGGER = LoggerFactory.getLogger(SetTablePropertiesProcedure.class); - - private Map<String, String> originalProperties = new HashMap<>(); - private Map<String, String> updatedProperties; +public class SetTablePropertiesProcedure extends AbstractSetPropertiesProcedure { public SetTablePropertiesProcedure(final boolean isGeneratedByPipe) { super(isGeneratedByPipe); @@ -68,106 +48,28 @@ public class SetTablePropertiesProcedure final String queryId, final Map<String, String> properties, final boolean isGeneratedByPipe) { - super(database, tableName, queryId, isGeneratedByPipe); - this.updatedProperties = properties; + super(database, tableName, queryId, properties, isGeneratedByPipe); } @Override - protected Flow executeFromState( - final ConfigNodeProcedureEnv env, final SetTablePropertiesState state) - throws InterruptedException { - final long startTime = System.currentTimeMillis(); - try { - switch (state) { - case VALIDATE_TABLE: - validateTable(env); - LOGGER.info( - ProcedureMessages.VALIDATE_TABLE_FOR_TABLE_WHEN_SETTING_PROPERTIES, - database, - tableName); - if (!isFailed() && Objects.isNull(table)) { - LOGGER.info( - ProcedureMessages.THE_UPDATED_TABLE_HAS_THE_SAME_PROPERTIES_WITH_THE_ORIGINAL); - return Flow.NO_MORE_STATE; - } - break; - case PRE_RELEASE: - preRelease(env); - LOGGER.info( - ProcedureMessages.PRE_RELEASE_INFO_FOR_TABLE_WHEN_SETTING_PROPERTIES, - database, - tableName); - break; - case SET_PROPERTIES: - setProperties(env); - LOGGER.info(ProcedureMessages.SET_PROPERTIES_TO_TABLE, database, tableName); - break; - case COMMIT_RELEASE: - commitRelease(env); - LOGGER.info( - ProcedureMessages.COMMIT_RELEASE_INFO_OF_TABLE_WHEN_SETTING_PROPERTIES, - database, - tableName); - return Flow.NO_MORE_STATE; - default: - setFailure( - new ProcedureException(ProcedureMessages.UNRECOGNIZED_ADDTABLECOLUMNSTATE + state)); - return Flow.NO_MORE_STATE; - } - return Flow.HAS_MORE_STATE; - } finally { - LOGGER.info( - ProcedureMessages.SETTABLEPROPERTIES_COSTS_MS, - database, - tableName, - state, - (System.currentTimeMillis() - startTime)); - } - } - - private void validateTable(final ConfigNodeProcedureEnv env) { - try { - final Pair<TSStatus, TsTable> result = - env.getConfigManager() - .getClusterSchemaManager() - .updateTableProperties( - database, - tableName, - originalProperties, - updatedProperties, - this instanceof SetViewPropertiesProcedure); - final TSStatus status = result.getLeft(); - if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - setFailure(new ProcedureException(new IoTDBException(status))); - return; - } - table = result.getRight(); - setNextState(PRE_RELEASE); - } catch (final MetadataException e) { - setFailure(new ProcedureException(e)); - } + protected Pair<TSStatus, TsTable> updateProperties(final ConfigNodeProcedureEnv env) + throws MetadataException { + return env.getConfigManager() + .getClusterSchemaManager() + .updateTableProperties( + database, + tableName, + originalProperties, + updatedProperties, + this instanceof SetViewPropertiesProcedure); } @Override - protected void preRelease(final ConfigNodeProcedureEnv env) { - super.preRelease(env); - setNextState(SET_PROPERTIES); - } - - private void setProperties(final ConfigNodeProcedureEnv env) { - final TSStatus status = - env.getConfigManager() - .getClusterSchemaManager() - .executePlan( - this instanceof SetViewPropertiesProcedure - ? new SetViewPropertiesPlan(database, tableName, updatedProperties) - : new SetTablePropertiesPlan(database, tableName, updatedProperties), - isGeneratedByPipe); - if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - setFailure(new ProcedureException(new IoTDBException(status))); - } else { - setNextState(COMMIT_RELEASE); - } + protected ConfigPhysicalPlan createSetPropertiesPlan( + final Map<String, String> properties, final boolean isRollback) { + return this instanceof SetViewPropertiesProcedure + ? new SetViewPropertiesPlan(database, tableName, properties) + : new SetTablePropertiesPlan(database, tableName, properties); } @Override @@ -175,68 +77,6 @@ public class SetTablePropertiesProcedure return "set table properties"; } - @Override - protected void rollbackState( - final ConfigNodeProcedureEnv env, final SetTablePropertiesState state) - throws IOException, InterruptedException, ProcedureException { - final long startTime = System.currentTimeMillis(); - try { - switch (state) { - case PRE_RELEASE: - LOGGER.info( - ProcedureMessages.START_ROLLBACK_PRE_RELEASE_INFO_FOR_TABLE_WHEN_SETTING_PROPERTIES, - database, - table.getTableName()); - rollbackPreRelease(env); - break; - case SET_PROPERTIES: - LOGGER.info( - ProcedureMessages.START_ROLLBACK_SET_PROPERTIES_TO_TABLE, - database, - table.getTableName()); - rollbackSetProperties(env); - break; - } - } finally { - LOGGER.info( - ProcedureMessages.ROLLBACK_SETTABLEPROPERTIES_COSTS_MS, - state, - (System.currentTimeMillis() - startTime)); - } - } - - private void rollbackSetProperties(final ConfigNodeProcedureEnv env) { - if (table == null) { - return; - } - final TSStatus status = - env.getConfigManager() - .getClusterSchemaManager() - .executePlan( - this instanceof SetViewPropertiesProcedure - ? new SetViewPropertiesPlan(database, tableName, originalProperties) - : new SetTablePropertiesPlan(database, tableName, originalProperties), - isGeneratedByPipe); - if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - setFailure(new ProcedureException(new IoTDBException(status))); - } - } - - @Override - protected SetTablePropertiesState getState(final int stateId) { - return SetTablePropertiesState.values()[stateId]; - } - - @Override - protected int getStateId(final SetTablePropertiesState state) { - return state.ordinal(); - } - - @Override - protected SetTablePropertiesState getInitialState() { - return VALIDATE_TABLE; - } - @Override public void serialize(final DataOutputStream stream) throws IOException { stream.writeShort( @@ -246,29 +86,9 @@ public class SetTablePropertiesProcedure innerSerialize(stream); } - protected void innerSerialize(final DataOutputStream stream) throws IOException { - super.serialize(stream); - - ReadWriteIOUtils.write(originalProperties, stream); - ReadWriteIOUtils.write(updatedProperties, stream); - } - @Override public void deserialize(final ByteBuffer byteBuffer) { super.deserialize(byteBuffer); - - this.originalProperties = ReadWriteIOUtils.readMap(byteBuffer); - this.updatedProperties = ReadWriteIOUtils.readMap(byteBuffer); - } - - @Override - public boolean equals(final Object o) { - return super.equals(o) - && Objects.equals(updatedProperties, ((SetTablePropertiesProcedure) o).updatedProperties); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), updatedProperties); + deserializeProperties(byteBuffer); } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java index 165b048b636..0f6b2fa75e1 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java @@ -62,6 +62,7 @@ import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableColumnPr import org.apache.iotdb.confignode.procedure.impl.schema.table.DropTableProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.RenameTableProcedure; +import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTableColumnPropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.SetTablePropertiesProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.AddViewColumnProcedure; import org.apache.iotdb.confignode.procedure.impl.schema.table.view.CreateTableViewProcedure; @@ -237,6 +238,9 @@ public class ProcedureFactory implements IProcedureFactory { case SET_VIEW_PROPERTIES_PROCEDURE: procedure = new SetViewPropertiesProcedure(false); break; + case SET_TABLE_COLUMN_PROPERTIES_PROCEDURE: + procedure = new SetTableColumnPropertiesProcedure(false); + break; case RENAME_TABLE_COLUMN_PROCEDURE: procedure = new RenameTableColumnProcedure(false); break; @@ -318,6 +322,9 @@ public class ProcedureFactory implements IProcedureFactory { case PIPE_ENRICHED_SET_TABLE_PROPERTIES_PROCEDURE: procedure = new SetTablePropertiesProcedure(true); break; + case PIPE_ENRICHED_SET_TABLE_COLUMN_PROPERTIES_PROCEDURE: + procedure = new SetTableColumnPropertiesProcedure(true); + break; case PIPE_ENRICHED_RENAME_TABLE_COLUMN_PROCEDURE: procedure = new RenameTableColumnProcedure(true); break; @@ -498,6 +505,8 @@ public class ProcedureFactory implements IProcedureFactory { return ProcedureType.SET_VIEW_PROPERTIES_PROCEDURE; } else if (procedure instanceof SetTablePropertiesProcedure) { return ProcedureType.SET_TABLE_PROPERTIES_PROCEDURE; + } else if (procedure instanceof SetTableColumnPropertiesProcedure) { + return ProcedureType.SET_TABLE_COLUMN_PROPERTIES_PROCEDURE; } else if (procedure instanceof RenameViewColumnProcedure) { return ProcedureType.RENAME_VIEW_COLUMN_PROCEDURE; } else if (procedure instanceof RenameTableColumnProcedure) { diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/AlterOrDropTableOperationType.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/AlterOrDropTableOperationType.java index 46a8d5ddf3e..13f9d51798d 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/AlterOrDropTableOperationType.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/table/AlterOrDropTableOperationType.java @@ -28,7 +28,8 @@ public enum AlterOrDropTableOperationType { DROP_TABLE((byte) 5), COMMENT_TABLE((byte) 6), COMMENT_COLUMN((byte) 7), - ALTER_COLUMN_DATA_TYPE((byte) 8); + ALTER_COLUMN_DATA_TYPE((byte) 8), + SET_COLUMN_PROPERTIES((byte) 9); private final byte type; @@ -60,6 +61,8 @@ public enum AlterOrDropTableOperationType { return COMMENT_COLUMN; case 8: return ALTER_COLUMN_DATA_TYPE; + case 9: + return SET_COLUMN_PROPERTIES; default: throw new IllegalArgumentException(); }
