diff --git a/go/test/endtoend/vtgate/queries/dml/dml_test.go b/go/test/endtoend/vtgate/queries/dml/dml_test.go index 061cc4b9b36..f6f4986f6f7 100644 --- a/go/test/endtoend/vtgate/queries/dml/dml_test.go +++ b/go/test/endtoend/vtgate/queries/dml/dml_test.go @@ -80,18 +80,18 @@ 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`, @@ -99,15 +99,15 @@ func TestDeleteWithLimit(t *testing.T) { `[[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)]]`) @@ -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`) @@ -133,18 +133,18 @@ 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`, @@ -152,15 +152,15 @@ func TestUpdateWithLimit(t *testing.T) { `[[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`, @@ -168,14 +168,14 @@ func TestUpdateWithLimit(t *testing.T) { `[[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`) @@ -218,7 +218,7 @@ 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 @@ -226,17 +226,17 @@ func TestDeleteWithSubquery(t *testing.T) { 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)]]`) @@ -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)]]`) diff --git a/go/test/endtoend/vtgate/queries/dml/main_test.go b/go/test/endtoend/vtgate/queries/dml/main_test.go index bc72acc1159..3c8aa6f30a8 100644 --- a/go/test/endtoend/vtgate/queries/dml/main_test.go +++ b/go/test/endtoend/vtgate/queries/dml/main_test.go @@ -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 { diff --git a/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql b/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql index cd129bd779a..64f2ded75fe 100644 --- a/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql +++ b/go/test/endtoend/vtgate/queries/dml/sharded_schema.sql @@ -2,6 +2,8 @@ create table s_tbl ( id bigint, num bigint, + col bigint, + unique key (num), primary key (id) ) Engine = InnoDB; @@ -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, diff --git a/go/test/endtoend/vtgate/queries/dml/vschema.json b/go/test/endtoend/vtgate/queries/dml/vschema.json index 72a949a49e4..9ba4ce9ebfb 100644 --- a/go/test/endtoend/vtgate/queries/dml/vschema.json +++ b/go/test/endtoend/vtgate/queries/dml/vschema.json @@ -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" }, @@ -63,6 +74,10 @@ { "column": "num", "name": "num_vdx" + }, + { + "columns": ["col", "id"], + "name": "col_vdx" } ] }, @@ -74,6 +89,14 @@ } ] }, + "col_vdx_tbl": { + "column_vindexes": [ + { + "column": "col", + "name": "hash" + } + ] + }, "user_tbl": { "auto_increment": { "column": "id",