Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
40 changes: 20 additions & 20 deletions go/test/endtoend/vtgate/queries/dml/dml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,34 +80,34 @@ func TestDeleteWithLimit(t *testing.T) {
defer closer()

// initial rows
mcmp.Exec("insert into s_tbl(id, num) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into s_tbl(id, col) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into order_tbl(region_id, oid, cust_no) values (1,1,4), (1,2,2), (2,3,5), (2,4,55)")

// delete with limit
qr := mcmp.Exec(`delete from s_tbl order by num, id limit 3`)
qr := mcmp.Exec(`delete from s_tbl order by col, id limit 3`)
require.EqualValues(t, 3, qr.RowsAffected)

qr = mcmp.Exec(`delete from order_tbl where region_id = 1 limit 1`)
require.EqualValues(t, 1, qr.RowsAffected)

// check rows
mcmp.AssertMatches(`select id, num from s_tbl order by id`,
mcmp.AssertMatches(`select id, col from s_tbl order by id`,
`[[INT64(3) INT64(10)] [INT64(4) INT64(20)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`)
// 2 rows matches but limit is 1, so any one of the row can remain in table.
mcmp.AssertMatchesAnyNoCompare(`select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(2) INT64(2)] [INT64(2) INT64(3) INT64(5)] [INT64(2) INT64(4) INT64(55)]]`,
`[[INT64(1) INT64(1) INT64(4)] [INT64(2) INT64(3) INT64(5)] [INT64(2) INT64(4) INT64(55)]]`)

// delete with limit
qr = mcmp.Exec(`delete from s_tbl where num < 20 limit 2`)
qr = mcmp.Exec(`delete from s_tbl where col < 20 limit 2`)
require.EqualValues(t, 2, qr.RowsAffected)

qr = mcmp.Exec(`delete from order_tbl limit 5`)
require.EqualValues(t, 3, qr.RowsAffected)

// check rows
// 3 rows matches `num < 20` but limit is 2 so any one of them can remain in the table.
mcmp.AssertMatchesAnyNoCompare(`select id, num from s_tbl order by id`,
// 3 rows matches `col < 20` but limit is 2 so any one of them can remain in the table.
mcmp.AssertMatchesAnyNoCompare(`select id, col from s_tbl order by id`,
`[[INT64(4) INT64(20)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`,
`[[INT64(3) INT64(10)] [INT64(4) INT64(20)] [INT64(8) INT64(80)]]`,
`[[INT64(4) INT64(20)] [INT64(6) INT64(15)] [INT64(8) INT64(80)]]`)
Expand All @@ -119,7 +119,7 @@ func TestDeleteWithLimit(t *testing.T) {
mcmp.Exec(`delete from order_tbl limit 5`)

// try with limit again on empty table.
qr = mcmp.Exec(`delete from s_tbl where num < 20 limit 2`)
qr = mcmp.Exec(`delete from s_tbl where col < 20 limit 2`)
require.EqualValues(t, 0, qr.RowsAffected)

qr = mcmp.Exec(`delete from order_tbl limit 5`)
Expand All @@ -133,49 +133,49 @@ func TestUpdateWithLimit(t *testing.T) {
defer closer()

// initial rows
mcmp.Exec("insert into s_tbl(id, num) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into s_tbl(id, col) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into order_tbl(region_id, oid, cust_no) values (1,1,4), (1,2,2), (2,3,5), (2,4,55)")

// update with limit
qr := mcmp.Exec(`update s_tbl set num = 12 order by num, id limit 3`)
qr := mcmp.Exec(`update s_tbl set col = 12 order by col, id limit 3`)
require.EqualValues(t, 3, qr.RowsAffected)

qr = mcmp.Exec(`update order_tbl set cust_no = 12 where region_id = 1 limit 1`)
require.EqualValues(t, 1, qr.RowsAffected)

// check rows
mcmp.AssertMatches(`select id, num from s_tbl order by id`,
mcmp.AssertMatches(`select id, col from s_tbl order by id`,
`[[INT64(1) INT64(12)] [INT64(2) INT64(12)] [INT64(3) INT64(10)] [INT64(4) INT64(20)] [INT64(5) INT64(12)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`)
// 2 rows matches but limit is 1, so any one of the row can be modified in the table.
mcmp.AssertMatchesAnyNoCompare(`select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(1) INT64(12)] [INT64(1) INT64(2) INT64(2)] [INT64(2) INT64(3) INT64(5)] [INT64(2) INT64(4) INT64(55)]]`,
`[[INT64(1) INT64(1) INT64(4)] [INT64(1) INT64(2) INT64(12)] [INT64(2) INT64(3) INT64(5)] [INT64(2) INT64(4) INT64(55)]]`)

// update with limit
qr = mcmp.Exec(`update s_tbl set num = 32 where num > 17 limit 1`)
qr = mcmp.Exec(`update s_tbl set col = 32 where col > 17 limit 1`)
require.EqualValues(t, 1, qr.RowsAffected)

qr = mcmp.Exec(`update order_tbl set cust_no = cust_no + 10 limit 5`)
require.EqualValues(t, 4, qr.RowsAffected)

// check rows
// 2 rows matches `num > 17` but limit is 1 so any one of them will be updated.
mcmp.AssertMatchesAnyNoCompare(`select id, num from s_tbl order by id`,
// 2 rows matches `col > 17` but limit is 1 so any one of them will be updated.
mcmp.AssertMatchesAnyNoCompare(`select id, col from s_tbl order by id`,
`[[INT64(1) INT64(12)] [INT64(2) INT64(12)] [INT64(3) INT64(10)] [INT64(4) INT64(32)] [INT64(5) INT64(12)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`,
`[[INT64(1) INT64(12)] [INT64(2) INT64(12)] [INT64(3) INT64(10)] [INT64(4) INT64(20)] [INT64(5) INT64(12)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(32)]]`)
mcmp.AssertMatchesAnyNoCompare(`select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(1) INT64(22)] [INT64(1) INT64(2) INT64(12)] [INT64(2) INT64(3) INT64(15)] [INT64(2) INT64(4) INT64(65)]]`,
`[[INT64(1) INT64(1) INT64(14)] [INT64(1) INT64(2) INT64(22)] [INT64(2) INT64(3) INT64(15)] [INT64(2) INT64(4) INT64(65)]]`)

// trying with zero limit.
qr = mcmp.Exec(`update s_tbl set num = 44 limit 0`)
qr = mcmp.Exec(`update s_tbl set col = 44 limit 0`)
require.EqualValues(t, 0, qr.RowsAffected)

qr = mcmp.Exec(`update order_tbl set oid = 44 limit 0`)
require.EqualValues(t, 0, qr.RowsAffected)

// trying with limit with no-matching row.
qr = mcmp.Exec(`update s_tbl set num = 44 where id > 100 limit 2`)
qr = mcmp.Exec(`update s_tbl set col = 44 where id > 100 limit 2`)
require.EqualValues(t, 0, qr.RowsAffected)

qr = mcmp.Exec(`update order_tbl set oid = 44 where region_id > 100 limit 2`)
Expand Down Expand Up @@ -218,25 +218,25 @@ func TestDeleteWithSubquery(t *testing.T) {
defer closer()

// initial rows
mcmp.Exec("insert into s_tbl(id, num) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into s_tbl(id, col) values (1,10), (2,10), (3,10), (4,20), (5,5), (6,15), (7,17), (8,80)")
mcmp.Exec("insert into order_tbl(region_id, oid, cust_no) values (1,1,4), (1,2,2), (2,3,5), (2,4,55)")

// delete with subquery on s_tbl
qr := mcmp.Exec(`delete from s_tbl where id in (select oid from order_tbl)`)
require.EqualValues(t, 4, qr.RowsAffected)

// check rows
mcmp.AssertMatches(`select id, num from s_tbl order by id`,
mcmp.AssertMatches(`select id, col from s_tbl order by id`,
`[[INT64(5) INT64(5)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`)
mcmp.AssertMatches(`select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(1) INT64(4)] [INT64(1) INT64(2) INT64(2)] [INT64(2) INT64(3) INT64(5)] [INT64(2) INT64(4) INT64(55)]]`)

// delete with subquery on order_tbl
qr = mcmp.Exec(`delete from order_tbl where cust_no > (select num from s_tbl where id = 7)`)
qr = mcmp.Exec(`delete from order_tbl where cust_no > (select col from s_tbl where id = 7)`)
require.EqualValues(t, 1, qr.RowsAffected)

// check rows
mcmp.AssertMatches(`select id, num from s_tbl order by id`,
mcmp.AssertMatches(`select id, col from s_tbl order by id`,
`[[INT64(5) INT64(5)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`)
mcmp.AssertMatches(`select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(1) INT64(4)] [INT64(1) INT64(2) INT64(2)] [INT64(2) INT64(3) INT64(5)]]`)
Expand All @@ -250,7 +250,7 @@ func TestDeleteWithSubquery(t *testing.T) {
require.EqualValues(t, 1, qr.RowsAffected)

// check rows
utils.AssertMatches(t, mcmp.VtConn, `select id, num from s_tbl order by id`,
utils.AssertMatches(t, mcmp.VtConn, `select id, col from s_tbl order by id`,
`[[INT64(5) INT64(5)] [INT64(6) INT64(15)] [INT64(7) INT64(17)] [INT64(8) INT64(80)]]`)
utils.AssertMatches(t, mcmp.VtConn, `select region_id, oid, cust_no from order_tbl order by oid`,
`[[INT64(1) INT64(1) INT64(4)] [INT64(1) INT64(2) INT64(2)]]`)
Expand Down
2 changes: 1 addition & 1 deletion go/test/endtoend/vtgate/queries/dml/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func start(t *testing.T) (utils.MySQLCompare, func()) {
_, _ = utils.ExecAllowError(t, mcmp.VtConn, "set workload = oltp")

tables := []string{
"s_tbl", "num_vdx_tbl", "user_tbl", "order_tbl", "oevent_tbl", "oextra_tbl",
"s_tbl", "num_vdx_tbl", "col_vdx_tbl", "user_tbl", "order_tbl", "oevent_tbl", "oextra_tbl",
"auto_tbl", "oid_vdx_tbl", "unq_idx", "nonunq_idx", "u_tbl", "mixed_tbl", "lkp_map_idx", "j_tbl", "j_utbl",
}
for _, table := range tables {
Expand Down
10 changes: 10 additions & 0 deletions go/test/endtoend/vtgate/queries/dml/sharded_schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ create table s_tbl
(
id bigint,
num bigint,
col bigint,
unique key (num),
primary key (id)
) Engine = InnoDB;

Expand All @@ -12,6 +14,14 @@ create table num_vdx_tbl
primary key (num)
) Engine = InnoDB;

create table col_vdx_tbl
(
col bigint,
id bigint,
keyspace_id varbinary(20),
primary key (col, id)
) Engine = InnoDB;

create table user_tbl
(
id bigint,
Expand Down
25 changes: 24 additions & 1 deletion go/test/endtoend/vtgate/queries/dml/vschema.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,18 @@
"params": {
"table": "num_vdx_tbl",
"from": "num",
"to": "keyspace_id"
"to": "keyspace_id",
"ignore_nulls": "true"
},
"owner": "s_tbl"
},
"col_vdx": {
"type": "consistent_lookup",
"params": {
"table": "col_vdx_tbl",
"from": "col,id",
"to": "keyspace_id",
"ignore_nulls": "true"
},
"owner": "s_tbl"
},
Expand Down Expand Up @@ -63,6 +74,10 @@
{
"column": "num",
"name": "num_vdx"
},
{
"columns": ["col", "id"],
"name": "col_vdx"
}
]
},
Expand All @@ -74,6 +89,14 @@
}
]
},
"col_vdx_tbl": {
"column_vindexes": [
{
"column": "col",
"name": "hash"
}
]
},
"user_tbl": {
"auto_increment": {
"column": "id",
Expand Down
Loading