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 c33eba2e57c4d8..717726148c04ac 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 @@ -1326,6 +1326,9 @@ private void trySetPartialUpdate() throws UserException { && partialUpdateCols.contains(olapTable.getSequenceMapCol())) { partialUpdateCols.add(Column.SEQUENCE_COL); } + + partialUpdateCols.add(Column.DELETE_SIGN); + // we should re-generate olapTuple DescriptorTable descTable = analyzer.getDescTbl(); olapTuple = descTable.createTupleDescriptor(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java index 3184937e2e051d..c7d1eefcd5d51c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/glue/translator/PhysicalPlanTranslator.java @@ -407,6 +407,11 @@ public PlanFragment visitPhysicalOlapTableSink(PhysicalOlapTableSink targetTableColumns = olapTableSink.getTargetTable().getFullSchema(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java index 2400337d50e61b..d8977882a7b8dc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java @@ -321,6 +321,13 @@ private static Map getColumnToOutput( new ExpressionRewriteContext(ctx.cascadesContext)); columnToOutput.put(column.getName(), new Alias(defualtValueExpression, column.getName())); + } else if (table instanceof OlapTable && ((OlapTable) table).hasDeleteSign() + && column.getName().equals(Column.DELETE_SIGN) + && column.getDefaultValue() != null) { + columnToOutput.put(column.getName(), + new Alias(Literal.of(column.getDefaultValue()) + .checkedCastTo(DataType.fromCatalogType(column.getType())), + column.getName())); } else { continue; } diff --git a/regression-test/data/nereids_p0/insert_into_table/partial_update.out b/regression-test/data/nereids_p0/insert_into_table/partial_update.out index 50e7f37251ed7f..5e200fca060fce 100644 --- a/regression-test/data/nereids_p0/insert_into_table/partial_update.out +++ b/regression-test/data/nereids_p0/insert_into_table/partial_update.out @@ -1,4 +1,5 @@ -- This file is automatically generated. You should know what you did if you want to edit this + -- !1 -- 1 doris 1000 123 1 2 doris2 2000 223 1 @@ -82,6 +83,12 @@ 3 300 2 3 4 400 1 2 +-- !11 -- +1 100 + +-- !12 -- +2 200 + -- !1 -- 1 doris 1000 123 1 2 doris2 2000 223 1 @@ -165,3 +172,9 @@ 3 300 2 3 4 400 1 2 +-- !11 -- +1 100 + +-- !12 -- +2 200 + diff --git a/regression-test/suites/nereids_p0/insert_into_table/partial_update.groovy b/regression-test/suites/nereids_p0/insert_into_table/partial_update.groovy index fd2145a71ed7b2..199d7f6bd787f9 100644 --- a/regression-test/suites/nereids_p0/insert_into_table/partial_update.groovy +++ b/regression-test/suites/nereids_p0/insert_into_table/partial_update.groovy @@ -283,6 +283,47 @@ suite("nereids_partial_update_native_insert_stmt", "p0") { sql "set enable_insert_strict = false;" sql "set enable_fallback_to_original_planner=true;" sql "sync;" + + // test native paitial update insert after delete + // in nereids + sql "set enable_unique_key_partial_update=true;" + sql "set enable_insert_strict = false;" + sql "set enable_fallback_to_original_planner=false;" + sql "set experimental_enable_nereids_planner=true;" + sql "sync;" + def tableName10 = "nereids_partial_update_native_insert_stmt10" + sql """ DROP TABLE IF EXISTS ${tableName10} """ + sql """create table ${tableName10} ( + k int null, + v int null + ) unique key (k) distributed by hash(k) buckets 1 + properties("replication_num" = "1", + "enable_unique_key_merge_on_write"="true", + "disable_auto_compaction"="true", + "store_row_column" = "${use_row_store}"); """ + + sql "insert into ${tableName10}(k,v) values(1,100);" + sql "delete from ${tableName10} where k like '%%';" + sql "insert into ${tableName10}(k,v) values(1,100);" + qt_11 "select * from ${tableName10} order by k;" + sql "delete from ${tableName10} where k=1;" + + // in origin planner + sql "set experimental_enable_nereids_planner = false;" + sql "sync;" + sql "insert into ${tableName10}(k,v) values(2,200);" + sql "delete from ${tableName10} where k like '%%';" + sql "insert into ${tableName10}(k,v) values(2,200);" + qt_12 "select * from ${tableName10} order by k;" + + sql "set enable_unique_key_partial_update=false;" + sql "set enable_insert_strict = true;" + sql "set enable_nereids_dml=true;" + sql "set experimental_enable_nereids_planner=true;" + sql "set enable_fallback_to_original_planner=false;" + sql "sync;" + sql """ DROP TABLE IF EXISTS ${tableName10}; """ + } } }