PDO v testu ignoruje foreign key constraint
- redhead
- Člen | 1313
Nesetkal se někdo s tím, že PDO ignoruje foreign key constraints v MySQL?
Mám tabulku s dvěma foreign ID sloupci (typická M:N asociační tabulka).
Pak mám test přes Nette\Database, který kontroluje, zda-li lze vložit
záznam s neexistujícím foreign ID (např. že nelze asociovat knihu
s neexistujícím autorem) a světe div se i s foreign key constraints to
prošlo. Když stejný insert provedu v Admineru, tak mi to hodí správně
„Cannot add or update a child row: a foreign key constraint fails“. Query je
opravdu opravdu stejné, zkopírované z onQuery
callbacku a
i databáze je opravdu opravdu ta samá ;)
Nejlepší na tom je, že se to stane pouze v unit testu s testovací databází. Když stejný scénář vyvolám na mojí vývojové DB skrze URL (kde jsou uvedená ID), tak PDO správně vyvolá výjimku. Databáze jsou na chlup stejné, zkontrolováno – oboje InnoDB, oboje mají stejné foreign constraints.
Zkusil jsem i přehodit vývojovou DB za testovací a opět vyvolat přes URL, to opět správně vyvolalo výjimku. A pouze přes ten unit test to záznam normálně vloží.
Vtipné je, že i po tom, co tento záznam v Admineru ručně odstraním a přidám ho ručně znova, tak na mě Adminer zařve, že to nelze. PDO to ale nějakým způsobem obchčije.
Neví někdo, co je tohle za černou magii?
EDIT: jediný rozdíl v query vidím v použití uvozovek, neboť skrz URL se IDčka vloží do query jako stringy, v testu jako integery. Ale když obě varianty zkusím v Admineru, tak ani jeden neprojde.
EDIT 2: vím, že se to jaksi netýká úplně Nette, původně jsem totiž podezříval Nette\Database, ale ono to dělá samo PDO.
Editoval redhead (9. 5. 2013 19:04)