PDO v testu ignoruje foreign key constraint

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
redhead
Člen | 1313
+
0
-

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)

duke
Člen | 650
+
0
-

A nemáš někde v tom unit testu v SQL příkaz SET FOREIGN_KEY_CHECKS = 0?

redhead
Člen | 1313
+
0
-

Uf, je to tak. Díky moc!

Nevšiml jsem si, že to tam dává Adminer při exportu databáze. Moc hezké ale je, že to nenastaví na konci exportu zpátky na 1.

Editoval redhead (9. 5. 2013 23:38)