diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java index 2cdec74cd9..1b0d8e59dd 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java @@ -550,7 +550,6 @@ public class NativeInsertStmt extends InsertStmt { private void analyzeSubquery(Analyzer analyzer, boolean skipCheck) throws UserException { // Analyze columns mentioned in the statement. Set mentionedColumns = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); - List realTargetColumnNames; if (targetColumnNames == null) { hasEmptyTargetColumns = true; // the mentioned columns are columns which are visible to user, so here we use @@ -600,35 +599,38 @@ public class NativeInsertStmt extends InsertStmt { * will be used in as a mapping from queryStmt.getResultExprs() to targetColumns define expr */ List> origColIdxsForExtendCols = Lists.newArrayList(); - for (Column column : targetTable.getFullSchema()) { - if (column.isNameWithPrefix(SchemaChangeHandler.SHADOW_NAME_PREFIX)) { - String origName = Column.removeNamePrefix(column.getName()); - for (int i = 0; i < targetColumns.size(); i++) { - if (targetColumns.get(i).nameEquals(origName, false)) { - // Rule A - origColIdxsForExtendCols.add(Pair.of(i, null)); - targetColumns.add(column); - break; - } - } - } - if (column.isNameWithPrefix(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX) - || column.isNameWithPrefix(CreateMaterializedViewStmt.MATERIALIZED_VIEW_AGGREGATE_NAME_PREFIX)) { - List refColumns = column.getRefColumns(); - if (refColumns == null) { - ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_FIELD_ERROR, - column.getName(), targetTable.getName()); - } - for (SlotRef refColumn : refColumns) { - String origName = refColumn.getColumnName(); - for (int originColumnIdx = 0; originColumnIdx < targetColumns.size(); originColumnIdx++) { - if (targetColumns.get(originColumnIdx).nameEquals(origName, false)) { - origColIdxsForExtendCols.add(Pair.of(originColumnIdx, column)); + if (!ConnectContext.get().isTxnModel()) { + for (Column column : targetTable.getFullSchema()) { + if (column.isNameWithPrefix(SchemaChangeHandler.SHADOW_NAME_PREFIX)) { + String origName = Column.removeNamePrefix(column.getName()); + for (int i = 0; i < targetColumns.size(); i++) { + if (targetColumns.get(i).nameEquals(origName, false)) { + // Rule A + origColIdxsForExtendCols.add(Pair.of(i, null)); targetColumns.add(column); break; } } } + if (column.isNameWithPrefix(CreateMaterializedViewStmt.MATERIALIZED_VIEW_NAME_PREFIX) + || column.isNameWithPrefix( + CreateMaterializedViewStmt.MATERIALIZED_VIEW_AGGREGATE_NAME_PREFIX)) { + List refColumns = column.getRefColumns(); + if (refColumns == null) { + ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_FIELD_ERROR, + column.getName(), targetTable.getName()); + } + for (SlotRef refColumn : refColumns) { + String origName = refColumn.getColumnName(); + for (int originColumnIdx = 0; originColumnIdx < targetColumns.size(); originColumnIdx++) { + if (targetColumns.get(originColumnIdx).nameEquals(origName, false)) { + origColIdxsForExtendCols.add(Pair.of(originColumnIdx, column)); + targetColumns.add(column); + break; + } + } + } + } } } @@ -669,7 +671,7 @@ public class NativeInsertStmt extends InsertStmt { checkColumnCoverage(mentionedColumns, targetTable.getBaseSchema()); } - realTargetColumnNames = targetColumns.stream().map(Column::getName).collect(Collectors.toList()); + List realTargetColumnNames = targetColumns.stream().map(Column::getName).collect(Collectors.toList()); // handle VALUES() or SELECT constant list if (isValuesOrConstantSelect) { diff --git a/regression-test/data/insert_p0/txn_insert.out b/regression-test/data/insert_p0/txn_insert.out index 41992dcd3c..f4947a2ac6 100644 --- a/regression-test/data/insert_p0/txn_insert.out +++ b/regression-test/data/insert_p0/txn_insert.out @@ -27,3 +27,15 @@ 2 3.3 xyz [1] [1, 0] 2 3.3 xyz [1] [1, 0] +-- !select5 -- +1 2 +3 4 +5 6 +7 8 + +-- !select6 -- +2 +4 +6 +8 + diff --git a/regression-test/suites/insert_p0/txn_insert.groovy b/regression-test/suites/insert_p0/txn_insert.groovy index 64477ee8c3..6e745073b1 100644 --- a/regression-test/suites/insert_p0/txn_insert.groovy +++ b/regression-test/suites/insert_p0/txn_insert.groovy @@ -1,4 +1,3 @@ - // 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 @@ -72,4 +71,24 @@ suite("txn_insert") { sql "rollback" sql "sync" order_qt_select4 """select * from $table""" + + // write to table with mv + table = table + "_mv" + sql """ DROP TABLE IF EXISTS $table """ + sql """ + create table $table ( + id int default '10', + c1 int default '10' + ) distributed by hash(id, c1) + properties('replication_num'="1"); + """ + createMV """ create materialized view mv_${table} as select c1 from $table; """ + sql "begin" + sql """insert into $table values(1, 2), (3, 4)""" + sql """insert into $table values(5, 6)""" + sql """insert into $table values(7, 8)""" + sql "commit" + sql "sync" + order_qt_select5 """select * from $table""" + order_qt_select6 """select c1 from $table""" }