MCPcopy Create free account
hub / github.com/apecloud/myduckserver / TestForeignKeyChecks

Function TestForeignKeyChecks

binlogreplication/binlog_replication_test.go:432–488  ·  view source on GitHub ↗

TestForeignKeyChecks tests that foreign key constraints replicate correctly when foreign key checks are enabled and disabled.

(t *testing.T)

Source from the content-addressed store, hash-verified

430// TestForeignKeyChecks tests that foreign key constraints replicate correctly when foreign key checks are
431// enabled and disabled.
432func TestForeignKeyChecks(t *testing.T) {
433 t.SkipNow()
434
435 defer teardown(t)
436 startSqlServersWithSystemVars(t, duckReplicaSystemVars)
437 startReplicationAndCreateTestDb(t, mySqlPort)
438
439 // Test that we can execute statement-based replication that requires foreign_key_checks
440 // being turned off (referenced table doesn't exist yet).
441 primaryDatabase.MustExec("SET foreign_key_checks = 0;")
442 primaryDatabase.MustExec("CREATE TABLE t1 (pk int primary key, color varchar(100), FOREIGN KEY (color) REFERENCES colors(name));")
443 primaryDatabase.MustExec("CREATE TABLE colors (name varchar(100) primary key);")
444 primaryDatabase.MustExec("SET foreign_key_checks = 1;")
445
446 // Insert a record with foreign key checks enabled
447 primaryDatabase.MustExec("START TRANSACTION;")
448 primaryDatabase.MustExec("INSERT INTO colors VALUES ('green'), ('red'), ('blue');")
449 primaryDatabase.MustExec("INSERT INTO t1 VALUES (1, 'red'), (2, 'green');")
450 primaryDatabase.MustExec("COMMIT;")
451
452 // Test the Insert path with foreign key checks turned off
453 primaryDatabase.MustExec("START TRANSACTION;")
454 primaryDatabase.MustExec("SET foreign_key_checks = 0;")
455 primaryDatabase.MustExec("INSERT INTO t1 VALUES (3, 'not-a-color');")
456 primaryDatabase.MustExec("COMMIT;")
457
458 // Test the Update and Delete paths with foreign key checks turned off
459 primaryDatabase.MustExec("START TRANSACTION;")
460 primaryDatabase.MustExec("DELETE FROM colors WHERE name='red';")
461 primaryDatabase.MustExec("UPDATE t1 SET color='still-not-a-color' WHERE pk=2;")
462 primaryDatabase.MustExec("COMMIT;")
463
464 // Verify the changes on the replica
465 waitForReplicaToCatchUp(t)
466 rows, err := replicaDatabase.Queryx("select * from db01.t1 order by pk;")
467 require.NoError(t, err)
468 row := convertMapScanResultToStrings(readNextRow(t, rows))
469 require.Equal(t, "1", row["pk"])
470 require.Equal(t, "red", row["color"])
471 row = convertMapScanResultToStrings(readNextRow(t, rows))
472 require.Equal(t, "2", row["pk"])
473 require.Equal(t, "still-not-a-color", row["color"])
474 row = convertMapScanResultToStrings(readNextRow(t, rows))
475 require.Equal(t, "3", row["pk"])
476 require.Equal(t, "not-a-color", row["color"])
477 require.False(t, rows.Next())
478 require.NoError(t, rows.Close())
479
480 rows, err = replicaDatabase.Queryx("select * from db01.colors order by name;")
481 require.NoError(t, err)
482 row = convertMapScanResultToStrings(readNextRow(t, rows))
483 require.Equal(t, "blue", row["name"])
484 row = convertMapScanResultToStrings(readNextRow(t, rows))
485 require.Equal(t, "green", row["name"])
486 require.False(t, rows.Next())
487 require.NoError(t, rows.Close())
488}
489

Callers

nothing calls this directly

Calls 8

teardownFunction · 0.85
waitForReplicaToCatchUpFunction · 0.85
readNextRowFunction · 0.85
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected