# # Simple foreign keys setup # --source have_engine.inc --source have_default_index.inc --disable_warnings DROP TABLE IF EXISTS t1, t2; let $create_definition = a $int_indexed_col, b $char_col, $default_index (a) ; --source create_table.inc if ($mysql_errname) { --source unexpected_result.inc } if (!$mysql_errname) { let $create_definition = a $int_indexed_col, b $char_col, FOREIGN KEY (a) REFERENCES t1(a) ; --let $table_name = t2 --source create_table.inc if ($mysql_errname) { --let $functionality = Foreign keys --source unexpected_result.inc } if (!$mysql_errname) { --source mask_engine.inc SHOW CREATE TABLE t2; --let $error_codes = ER_NO_REFERENCED_ROW_2 INSERT INTO t2 (a,b) VALUES (1,'a'),(2,'b'); --source check_errors.inc if ($mysql_errname != ER_NO_REFERENCED_ROW_2) { --let $functionality = Foreign keys --source unexpected_result.inc } INSERT INTO t1 (a,b) VALUES (1,'c'),(2,'d'); INSERT INTO t2 (a,b) VALUES (1,'a'),(2,'b'); --let $error_codes = ER_NO_REFERENCED_ROW_2 UPDATE t2 SET a=a+1; --source check_errors.inc if ($mysql_errname != ER_NO_REFERENCED_ROW_2) { --let $functionality = Foreign keys --source unexpected_result.inc } --let $error_codes = ER_ROW_IS_REFERENCED_2 UPDATE t1 SET a=3 WHERE a=2; --source check_errors.inc --let $error_codes = ER_ROW_IS_REFERENCED_2 DELETE FROM t1 WHERE a=2; --source check_errors.inc if ($mysql_errname != ER_ROW_IS_REFERENCED_2) { --let $functionality = Foreign keys --source unexpected_result.inc } DELETE FROM t2 WHERE a=2; --sorted_result SELECT a,b FROM t1; --sorted_result SELECT a,b FROM t2; --let $error_codes = ER_ROW_IS_REFERENCED_2 DROP TABLE t1; --source check_errors.inc if ($mysql_errname != ER_ROW_IS_REFERENCED_2) { --let $functionality = Foreign keys --source unexpected_result.inc } DROP TABLE t2; } let $create_definition = a $int_indexed_col, b $char_col, FOREIGN KEY (a) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE ; --let $table_name = t2 --source create_table.inc if ($mysql_errname) { --let $functionality = Foreign keys or ON DELETE|UPDATE CASCADE --source unexpected_result.inc } if (!$mysql_errname) { --source mask_engine.inc SHOW CREATE TABLE t2; --let $error_codes = ER_NO_REFERENCED_ROW_2 INSERT INTO t2 (a,b) VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d'); --source check_errors.inc INSERT INTO t1 (a,b) VALUES (3,'a'),(4,'a'); INSERT INTO t2 (a,b) VALUES (1,'a'),(2,'b'),(3,'c'),(4,'d'),(4,'e'),(3,'a'); UPDATE t1 SET a=a+1; if ($mysql_errname) { --let $functionality = UPDATE --source unexpected_result.inc } --sorted_result SELECT a,b FROM t2; DELETE FROM t1 WHERE b='a' LIMIT 2; if ($mysql_errname) { --let $functionality = DELETE --source unexpected_result.inc } --sorted_result SELECT a,b FROM t2; --let $error_codes = ER_TRUNCATE_ILLEGAL_FK TRUNCATE TABLE t1; --source check_errors.inc if ($mysql_errname != ER_TRUNCATE_ILLEGAL_FK) { --let $functionality = Foreign keys --source unexpected_result.inc } DROP TABLE t2; } DROP TABLE t1; } --source cleanup_engine.inc