Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
08d2806
test: cover sql task literals and user lock
Ariznawlll May 27, 2026
d24d20a
rm tag 17598
Ariznawlll May 27, 2026
1fb74fe
test: fix query result expectations
Ariznawlll May 28, 2026
cc5eda9
test: wait for sql task status update
Ariznawlll May 28, 2026
4f70caf
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 28, 2026
63d0ae4
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 28, 2026
db22efe
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 28, 2026
fb05563
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 29, 2026
21450be
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 29, 2026
76c4c7e
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 29, 2026
5cfa460
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 29, 2026
9b90736
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll May 29, 2026
df75414
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll Jun 1, 2026
7e6db79
test: cover hive partition column auto inference
Ariznawlll Jun 1, 2026
686b3c0
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll Jun 1, 2026
88516ee
test: add data branch feature coverage
Ariznawlll Jun 4, 2026
0e348ab
Merge branch 'main' into test/issues-24122-21685-main
mergify[bot] Jun 4, 2026
e73890e
test: skip data branch privilege repro in bvt
Ariznawlll Jun 4, 2026
578dc49
test: keep data branch privilege controls in bvt
Ariznawlll Jun 4, 2026
9130df1
test: allow optimistic txn error for data branch pick
Ariznawlll Jun 4, 2026
46488f1
test: regex data branch unique index errors
Ariznawlll Jun 5, 2026
749fdda
Merge branch 'main' into test/issues-24122-21685-main
Ariznawlll Jun 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions test/distributed/cases/git4data/branch/edge/branch_edge_cases.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
drop database if exists br_index;
create database br_index;
use br_index;
create table base(
id int primary key,
u int,
k int,
v varchar(20),
unique key uk_u(u),
key idx_k(k)
);
insert into base values
(1, 101, 10, 'one'),
(2, 102, 20, 'two'),
(3, 103, 30, 'three');
data branch create table dst from base;
data branch create table src from base;
insert into src values (4, 104, 20, 'four');
update src set k = 40, v = 'two-src' where id = 2;
data branch pick src into dst keys(2, 4) when conflict accept;
select id, u, k, v from dst where k = 20 order by id;
id u k v
4 104 20 four
select id, u, k, v from dst where k = 40 order by id;
id u k v
2 102 40 two-src
insert into dst values (5, 104, 50, 'dup-u');
-- @regex("Duplicate entry '104' for key '(u|__mo_index_idx_col)'(\[[0-9,]+\])?", true)
Duplicate entry '104' for key 'u'
data branch create table merge_dst from base;
data branch create table merge_src from base;
insert into merge_src values (4, 104, 40, 'four');
data branch merge merge_src into merge_dst;
select id, u, k, v from merge_dst where u = 104;
id u k v
4 104 40 four
data branch create table conflict_dst from base;
data branch create table conflict_src from base;
insert into conflict_dst values (4, 104, 40, 'dst-four');
insert into conflict_src values (5, 104, 50, 'src-five');
data branch merge conflict_src into conflict_dst when conflict accept;
-- @regex("Duplicate entry '104' for key '(u|__mo_index_idx_col)'(\[[0-9,]+\])?", true)
Duplicate entry '104' for key 'u'
select id, u, k, v from conflict_dst order by id;
id u k v
1 101 10 one
2 102 20 two
3 103 30 three
4 104 40 dst-four
drop database br_index;
drop database if exists br_schema_drift;
create database br_schema_drift;
use br_schema_drift;
create table base(a int primary key, b int);
insert into base values (1, 10), (2, 20), (3, 30);
data branch create table left_add from base;
data branch create table right_add from base;
alter table left_add add column c varchar(20) default 'left-only';
update left_add set b = 11, c = 'changed' where a = 1;
insert into right_add values (4, 40);
data branch diff left_add against right_add columns (a, b) output summary;
internal error: the target table schema is not equivalent to the base table.
data branch create table both_add_left from base;
data branch create table both_add_right from base;
alter table both_add_left add column c varchar(20) default 'same';
alter table both_add_right add column c varchar(20) default 'same';
update both_add_left set c = 'left' where a = 2;
update both_add_right set c = 'right' where a = 3;
data branch diff both_add_left against both_add_right columns (a, c);
diff both_add_left against both_add_right flag a c
both_add_left INSERT 2 left
both_add_right INSERT 2 same
both_add_left INSERT 3 same
both_add_right INSERT 3 right
data branch create table drop_left from base;
data branch create table drop_right from base;
alter table drop_left drop column b;
data branch diff drop_left against drop_right;
internal error: the target table schema is not equivalent to the base table.
data branch create table rename_left from base;
data branch create table rename_right from base;
alter table rename_left rename column b to bb;
data branch diff rename_left against rename_right;
diff rename_left against rename_right flag a bb
drop database br_schema_drift;
drop database if exists br_txn_src;
drop database if exists br_txn_dst;
create database br_txn_src;
use br_txn_src;
create table base(a int primary key, b varchar(20));
insert into base values (1, 'one'), (2, 'two');
begin;
data branch create table br_commit from base;
commit;
select count(*) as br_commit_rows from br_commit;
br_commit_rows
2
begin;
data branch create table br_rollback from base;
rollback;
select count(*) as br_rollback_tables
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_rollback';
br_rollback_tables
0
begin;
data branch delete table br_txn_src.br_commit;
rollback;
select count(*) as br_commit_after_rollback
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_commit';
br_commit_after_rollback
1
begin;
data branch delete table br_txn_src.br_commit;
commit;
select count(*) as br_commit_after_commit
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_commit';
br_commit_after_commit
0
data branch create table pick_dst from base;
data branch create table pick_src from base;
insert into pick_src values (3, 'three');
begin;
data branch pick pick_src into pick_dst keys(3) when conflict accept;
-- @regex("(DATA BRANCH PICK is not supported in explicit transactions|Write conflicts detected|txn need retry|deadlock detected)", true)
internal error: DATA BRANCH PICK is not supported in explicit transactions
rollback;
select count(*) as pick_dst_rows from pick_dst;
pick_dst_rows
2
data branch create database br_txn_dst from br_txn_src;
select count(*) as dst_tables
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst'
and relname in ('base', 'pick_dst', 'pick_src');
dst_tables
3
begin;
data branch delete database br_txn_dst;
rollback;
select count(*) as dst_tables_after_rollback
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst'
and relname in ('base', 'pick_dst', 'pick_src');
dst_tables_after_rollback
3
begin;
data branch delete database br_txn_dst;
commit;
select count(*) as dst_tables_after_commit
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst';
dst_tables_after_commit
0
drop database if exists br_txn_dst;
drop database br_txn_src;
156 changes: 156 additions & 0 deletions test/distributed/cases/git4data/branch/edge/branch_edge_cases.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
-- Data branch edge cases that are not covered by basic diff/merge/pick flows.

-- Case 1: secondary/unique indexes remain valid after PICK/MERGE.
drop database if exists br_index;
create database br_index;
use br_index;

create table base(
id int primary key,
u int,
k int,
v varchar(20),
unique key uk_u(u),
key idx_k(k)
);
insert into base values
(1, 101, 10, 'one'),
(2, 102, 20, 'two'),
(3, 103, 30, 'three');

data branch create table dst from base;
data branch create table src from base;

insert into src values (4, 104, 20, 'four');
update src set k = 40, v = 'two-src' where id = 2;
data branch pick src into dst keys(2, 4) when conflict accept;

select id, u, k, v from dst where k = 20 order by id;
select id, u, k, v from dst where k = 40 order by id;

-- Ordinary unique-index enforcement still rejects duplicates after PICK.
-- @regex("Duplicate entry '104' for key '(u|__mo_index_idx_col)'(\[[0-9,]+\])?",true)
insert into dst values (5, 104, 50, 'dup-u');

data branch create table merge_dst from base;
data branch create table merge_src from base;
insert into merge_src values (4, 104, 40, 'four');
data branch merge merge_src into merge_dst;
select id, u, k, v from merge_dst where u = 104;

data branch create table conflict_dst from base;
data branch create table conflict_src from base;
insert into conflict_dst values (4, 104, 40, 'dst-four');
insert into conflict_src values (5, 104, 50, 'src-five');
-- MERGE must not bypass unique-index validation.
-- @regex("Duplicate entry '104' for key '(u|__mo_index_idx_col)'(\[[0-9,]+\])?",true)
data branch merge conflict_src into conflict_dst when conflict accept;
select id, u, k, v from conflict_dst order by id;

drop database br_index;

-- Case 2: schema drift after branching.
drop database if exists br_schema_drift;
create database br_schema_drift;
use br_schema_drift;

create table base(a int primary key, b int);
insert into base values (1, 10), (2, 20), (3, 30);

data branch create table left_add from base;
data branch create table right_add from base;
alter table left_add add column c varchar(20) default 'left-only';
update left_add set b = 11, c = 'changed' where a = 1;
insert into right_add values (4, 40);
data branch diff left_add against right_add columns (a, b) output summary;

data branch create table both_add_left from base;
data branch create table both_add_right from base;
alter table both_add_left add column c varchar(20) default 'same';
alter table both_add_right add column c varchar(20) default 'same';
update both_add_left set c = 'left' where a = 2;
update both_add_right set c = 'right' where a = 3;
data branch diff both_add_left against both_add_right columns (a, c);

data branch create table drop_left from base;
data branch create table drop_right from base;
alter table drop_left drop column b;
-- Divergent schemas are rejected with a schema-equivalence error.
data branch diff drop_left against drop_right;

data branch create table rename_left from base;
data branch create table rename_right from base;
alter table rename_left rename column b to bb;
-- A rename on one branch keeps the renamed table queryable for diff.
data branch diff rename_left against rename_right;

drop database br_schema_drift;

-- Case 3: transaction behavior.
drop database if exists br_txn_src;
drop database if exists br_txn_dst;
create database br_txn_src;
use br_txn_src;

create table base(a int primary key, b varchar(20));
insert into base values (1, 'one'), (2, 'two');

begin;
data branch create table br_commit from base;
commit;
select count(*) as br_commit_rows from br_commit;

begin;
data branch create table br_rollback from base;
rollback;
select count(*) as br_rollback_tables
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_rollback';

begin;
data branch delete table br_txn_src.br_commit;
rollback;
select count(*) as br_commit_after_rollback
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_commit';

begin;
data branch delete table br_txn_src.br_commit;
commit;
select count(*) as br_commit_after_commit
from mo_catalog.mo_tables
where reldatabase = 'br_txn_src' and relname = 'br_commit';

data branch create table pick_dst from base;
data branch create table pick_src from base;
insert into pick_src values (3, 'three');

begin;
-- @regex("(DATA BRANCH PICK is not supported in explicit transactions|Write conflicts detected|txn need retry|deadlock detected)",true)
data branch pick pick_src into pick_dst keys(3) when conflict accept;
rollback;
select count(*) as pick_dst_rows from pick_dst;

data branch create database br_txn_dst from br_txn_src;
select count(*) as dst_tables
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst'
and relname in ('base', 'pick_dst', 'pick_src');

begin;
data branch delete database br_txn_dst;
rollback;
select count(*) as dst_tables_after_rollback
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst'
and relname in ('base', 'pick_dst', 'pick_src');

begin;
data branch delete database br_txn_dst;
commit;
select count(*) as dst_tables_after_commit
from mo_catalog.mo_tables
where reldatabase = 'br_txn_dst';

drop database if exists br_txn_dst;
drop database br_txn_src;
Loading
Loading