[BugFix] Fix dcg meta inconsistency when partial update with auto increment column in column upsert mode. (backport #63370) (#63423)
Signed-off-by: srlch <linzichao@starrocks.com> Co-authored-by: srlch <111035020+srlch@users.noreply.github.com>
This commit is contained in:
parent
f3c0f6898b
commit
a12237e952
|
|
@ -699,8 +699,8 @@ Status RowsetColumnUpdateState::finalize(Tablet* tablet, Rowset* rowset, uint32_
|
|||
* used and we need to discard the column for the keys which have already existed in the tablet.
|
||||
*/
|
||||
for (ColumnId cid : txn_meta.partial_update_column_ids()) {
|
||||
if (txn_meta.has_auto_increment_partial_update_column_id() &&
|
||||
cid == txn_meta.auto_increment_partial_update_column_id()) {
|
||||
DCHECK(cid < tschema->columns().size());
|
||||
if (txn_meta.has_auto_increment_partial_update_column_id() && tschema->column(cid).is_auto_increment()) {
|
||||
// skip auto increment column if it is being used for partial update
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -833,4 +833,64 @@ SELECT * FROM t_alter_auto_increment_counter ORDER BY k;
|
|||
-- !result
|
||||
DROP TABLE t_alter_auto_increment_counter;
|
||||
-- result:
|
||||
-- !result
|
||||
-- name: test_auto_increment_partial_update_column_upsert_2 @sequential
|
||||
CREATE DATABASE test_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
-- !result
|
||||
ADMIN SET FRONTEND CONFIG ("auto_increment_cache_size" = "0");
|
||||
USE test_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
-- !result
|
||||
CREATE TABLE `t_auto_increment_partial_update_column_upsert_2` (
|
||||
`k` BIGINT NOT NULL COMMENT "",
|
||||
`v1` BIGINT,
|
||||
`v2` BIGINT,
|
||||
`v3` BIGINT AUTO_INCREMENT,
|
||||
`v4` BIGINT
|
||||
) ENGINE=OLAP
|
||||
PRIMARY KEY(`k`)
|
||||
DISTRIBUTED BY HASH(`k`) BUCKETS 1
|
||||
PROPERTIES (
|
||||
"replicated_storage" = "true",
|
||||
"replication_num" = "1"
|
||||
);
|
||||
-- result:
|
||||
-- !result
|
||||
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 2, 3, DEFAULT, 4);
|
||||
-- result:
|
||||
-- !result
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
1 2 3 1 4
|
||||
-- !result
|
||||
shell: curl --location-trusted -u root: -T ${root_path}/lib/../common/data/stream_load/sr_auto_increment_partial_update_only.csv -XPUT -H partial_update:true -H partial_update_mode:column -H label:test_auto_increment_partial_update_column_upsert_12345 -H column_separator:, -H columns:k,v2,xx ${url}/api/test_auto_increment_partial_update_column_upsert_2/t_auto_increment_partial_update_column_upsert_2/_stream_load
|
||||
-- result:
|
||||
0
|
||||
{
|
||||
"Status": "Success",
|
||||
"Message": "OK"
|
||||
}
|
||||
-- !result
|
||||
sync;
|
||||
-- result:
|
||||
-- !result
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
1 2 20 1 4
|
||||
2 None 40 2 None
|
||||
-- !result
|
||||
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 300, 20, DEFAULT, 30), (2, 301, 40, DEFAULT, 50);
|
||||
-- result:
|
||||
-- !result
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
1 300 20 3 30
|
||||
2 301 40 4 50
|
||||
-- !result
|
||||
DROP TABLE t_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
-- !result
|
||||
DROP DATABASE test_auto_increment_partial_update_column_upsert_2;
|
||||
-- result:
|
||||
-- !result
|
||||
|
|
@ -373,3 +373,34 @@ ALTER TABLE t_alter_auto_increment_counter AUTO_INCREMENT = 300;
|
|||
INSERT INTO t_alter_auto_increment_counter VALUES (3, DEFAULT);
|
||||
SELECT * FROM t_alter_auto_increment_counter ORDER BY k;
|
||||
DROP TABLE t_alter_auto_increment_counter;
|
||||
|
||||
-- name: test_auto_increment_partial_update_column_upsert_2 @sequential
|
||||
CREATE DATABASE test_auto_increment_partial_update_column_upsert_2;
|
||||
ADMIN SET FRONTEND CONFIG ("auto_increment_cache_size" = "0");
|
||||
USE test_auto_increment_partial_update_column_upsert_2;
|
||||
CREATE TABLE `t_auto_increment_partial_update_column_upsert_2` (
|
||||
`k` BIGINT NOT NULL COMMENT "",
|
||||
`v1` BIGINT,
|
||||
`v2` BIGINT,
|
||||
`v3` BIGINT AUTO_INCREMENT,
|
||||
`v4` BIGINT
|
||||
) ENGINE=OLAP
|
||||
PRIMARY KEY(`k`)
|
||||
DISTRIBUTED BY HASH(`k`) BUCKETS 1
|
||||
PROPERTIES (
|
||||
"replicated_storage" = "true",
|
||||
"replication_num" = "1"
|
||||
);
|
||||
|
||||
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 2, 3, DEFAULT, 4);
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
|
||||
shell: curl --location-trusted -u root: -T ${root_path}/lib/../common/data/stream_load/sr_auto_increment_partial_update_only.csv -XPUT -H partial_update:true -H partial_update_mode:column -H label:test_auto_increment_partial_update_column_upsert_12345 -H column_separator:, -H columns:k,v2,xx ${url}/api/test_auto_increment_partial_update_column_upsert_2/t_auto_increment_partial_update_column_upsert_2/_stream_load
|
||||
sync;
|
||||
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
INSERT INTO t_auto_increment_partial_update_column_upsert_2 VALUES (1, 300, 20, DEFAULT, 30), (2, 301, 40, DEFAULT, 50);
|
||||
SELECT * FROM t_auto_increment_partial_update_column_upsert_2;
|
||||
|
||||
DROP TABLE t_auto_increment_partial_update_column_upsert_2;
|
||||
DROP DATABASE test_auto_increment_partial_update_column_upsert_2;
|
||||
Loading…
Reference in New Issue