diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java index cb2a3298a4c70a..2433aaedcdf435 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java @@ -204,9 +204,10 @@ public AbstractInsertExecutor initPlan(ConnectContext ctx, StmtExecutor executor // TODO: support other table types throw new AnalysisException("insert into command only support [olap, hive, iceberg] table"); } - - insertExecutor.beginTransaction(); - insertExecutor.finalizeSink(planner.getFragments().get(0), sink, physicalSink); + if (!insertExecutor.isEmptyInsert()) { + insertExecutor.beginTransaction(); + insertExecutor.finalizeSink(planner.getFragments().get(0), sink, physicalSink); + } targetTableIf.readUnlock(); } catch (Throwable e) { targetTableIf.readUnlock(); diff --git a/regression-test/suites/schema_change_p0/test_alter_table_after_empty_insert.groovy b/regression-test/suites/schema_change_p0/test_alter_table_after_empty_insert.groovy new file mode 100644 index 00000000000000..d96729b877933f --- /dev/null +++ b/regression-test/suites/schema_change_p0/test_alter_table_after_empty_insert.groovy @@ -0,0 +1,37 @@ +// 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. + +suite("test_alter_table_after_empty_insert") { + def tableName = "test_alter_table_after_empty_insert" + sql """ DROP TABLE IF EXISTS ${tableName} """ + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + k BIGINT, + v SMALLINT NOT NULL, + t TEXT NOT NULL + ) + DUPLICATE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 4 + PROPERTIES("replication_num" = "1") + """ + sql """ INSERT INTO ${tableName} SELECT * FROM ${tableName} """ + sql """ ALTER TABLE ${tableName} MODIFY COLUMN v BIGINT AFTER t """ + waitForSchemaChangeDone { + sql """ SHOW ALTER TABLE COLUMN WHERE IndexName='${tableName}' ORDER BY createtime DESC LIMIT 1 """ + time 60 + } +} \ No newline at end of file