@@ -238,6 +238,16 @@ const (
238238 id2 bigint not null,
239239 primary key (id)
240240 ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci;
241+ create table ref3 (
242+ id bigint not null,
243+ id2 bigint not null,
244+ primary key (id)
245+ ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci;
246+ create table ref4 (
247+ id bigint not null,
248+ id2 bigint not null,
249+ primary key (id)
250+ ) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_unicode_ci;
241251`
242252 refSourceVSchema = `
243253{
@@ -246,6 +256,12 @@ const (
246256 "type": "reference"
247257 },
248258 "ref2": {
259+ "type": "reference"
260+ },
261+ "ref3": {
262+ "type": "reference"
263+ },
264+ "ref4": {
249265 "type": "reference"
250266 }
251267 }
@@ -261,12 +277,22 @@ const (
261277 "ref2": {
262278 "type": "reference",
263279 "source": "ks1.ref2"
280+ },
281+ "ref3": {
282+ "type": "reference",
283+ "source": "ks1.ref3"
284+ },
285+ "ref4": {
286+ "type": "reference",
287+ "source": "ks1.ref4"
264288 }
265289 }
266290}
267291`
268292 initRef1DataQuery = `insert into ks1.ref1(id, val) values (1, 'abc'), (2, 'def'), (3, 'ghi')`
269293 initRef2DataQuery = `insert into ks1.ref2(id, id2) values (1, 1), (2, 2), (3, 3)`
294+ initRef3DataQuery = `insert into ks1.ref3(id, id2) values (1, 1), (2, 2), (3, 3), (4, 4)`
295+ initRef4DataQuery = `insert into ks1.ref4(id, id2) values (1, 1), (2, 2), (3, 3)`
270296)
271297
272298// TestReferenceTableMaterialize tests materializing reference tables.
@@ -287,6 +313,10 @@ func TestReferenceTableMaterialize(t *testing.T) {
287313 require .NoError (t , err )
288314 _ , err = vtgateConn .ExecuteFetch (initRef2DataQuery , 0 , false )
289315 require .NoError (t , err )
316+ _ , err = vtgateConn .ExecuteFetch (initRef3DataQuery , 0 , false )
317+ require .NoError (t , err )
318+ _ , err = vtgateConn .ExecuteFetch (initRef4DataQuery , 0 , false )
319+ require .NoError (t , err )
290320
291321 err = vc .VtctldClient .ExecuteCommand ("Materialize" , "--target-keyspace" , "ks2" , "--workflow" , "wf1" , "create" ,
292322 "--source-keyspace" , "ks1" , "--reference-tables" , "ref1,ref2" )
@@ -322,4 +352,41 @@ func TestReferenceTableMaterialize(t *testing.T) {
322352 waitForRowCount (t , vtgateConn , "ks2:" + shard , "ref2" , 4 )
323353 }
324354 vdiff (t , "ks2" , "wf1" , defaultCellName , nil )
355+
356+ // Testing update with --add-reference-tables.
357+ err = vc .VtctldClient .ExecuteCommand ("Materialize" , "--target-keyspace" , "ks2" , "--workflow" , "wf1" , "update" ,
358+ "--add-reference-tables" , "ref3,ref4" )
359+ require .NoError (t , err , "MaterializeAddTables" )
360+
361+ for _ , shard := range shards {
362+ tab := vc .getPrimaryTablet (t , "ks2" , shard )
363+ catchup (t , tab , "wf1" , "Materialize" )
364+ }
365+
366+ for _ , shard := range shards {
367+ waitForRowCount (t , vtgateConn , "ks2:" + shard , "ref3" , 4 )
368+ waitForQueryResult (t , vtgateConn , "ks2:" + shard , "select id, id2 from ref3" ,
369+ `[[INT64(1) INT64(1)] [INT64(2) INT64(2)] [INT64(3) INT64(3)] [INT64(4) INT64(4)]]` )
370+ waitForRowCount (t , vtgateConn , "ks2:" + shard , "ref4" , 3 )
371+ waitForQueryResult (t , vtgateConn , "ks2:" + shard , "select id, id2 from ref4" ,
372+ `[[INT64(1) INT64(1)] [INT64(2) INT64(2)] [INT64(3) INT64(3)]]` )
373+ }
374+ vdiff (t , "ks2" , "wf1" , defaultCellName , nil )
375+
376+ queries = []string {
377+ "update ks1.ref3 set id2=3 where id=2" ,
378+ "update ks1.ref4 set id2=3 where id=2" ,
379+ "delete from ks1.ref3 where id2=3" ,
380+ "delete from ks1.ref4 where id2=3" ,
381+ "insert into ks1.ref3(id, id2) values (3, 3)" ,
382+ "insert into ks1.ref4(id, id2) values (3, 3), (4, 4)" ,
383+ }
384+ for _ , query := range queries {
385+ execVtgateQuery (t , vtgateConn , "ks1" , query )
386+ }
387+ for _ , shard := range shards {
388+ waitForRowCount (t , vtgateConn , "ks2:" + shard , "ref3" , 3 )
389+ waitForRowCount (t , vtgateConn , "ks2:" + shard , "ref4" , 3 )
390+ }
391+ vdiff (t , "ks2" , "wf1" , defaultCellName , nil )
325392}
0 commit comments