MySQL, vnořené transakce a inTransaction()

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

Ahoj, používám transakce a MySQL (InnoDB). V aplikaci mám několik modelů a v jejich funkcích volám beginTransaction(), commit() atp. Všechno je to v pořádku, dokud z modelu nevolám funkci modelu jiného, kde už spuštění transakce je. MySQL vnořené transakce neumí a zde je problém.

V nějakých starších verzích byla (tuším v Contextu) funkce inTransaction(), kterou se dalo zjisti, že jsem v transakci a další transakci už jsem nespouštěl. Nová verze nette ale žádnou takovou funkci nemá. Jak bych to měl řešit nyní? Nerad bych ty transakce odstraňoval…

Díky moc

Majkl578
Moderator | 1364
+
0
-

Standardně se to „emuluje“ aplikačně pomocí transaction nesting levelu, např. zde v Doctrine. Jestli to Nette\Database neumí, asi by bylo vhodné to implementovat.

h4kuna
Backer | 740
+
0
-

Metody které popisuješ jsou v PDO a to je dostupné v Connection Možná by se ti hodilo něco v tomto duchu pokud transakce neexistuje tak založit jinak se vyrobí savepoint.

Editoval h4kuna (24. 1. 2014 10:27)

lumen
Člen | 32
+
0
-

@Majkl578: Díky, to jsem nevěděl, že to Doctrine má. Bohužel jsem před dokončením aplikace a na přechod na Doctrine z Nette\Database už nemám dostatek času. A na dodělání do Nette\Database také ne :)

@h4kuna: Díky, nicméně v tom Connection už to není – i v tom odkazu co posíláš je to „@deprecated". O něco podobného co posíláš (v druhém odkazu) jsem se už snažil na základě tady tohoto příspěvku . Tam jsem narazil na to, že už neexistuje inTransaction(). V tom tvém zasílaném odkazu se používá něco jako "nestable()“. Což nevím jestli v nette něco takového je?

h4kuna
Backer | 740
+
0
-

Odkaz míří na to jak se dostat k instanci PDO, kde pak voláš zmiňované metody. beginTransaction, commit, rollBack

Metoda nestable() když se koukneš tak jen ověřuje zda driver použitý v PDO obsahuje pgsql nebo mysql. Pro jinou databázi to autor nedělal. V jeho případě $this = instance PDO.

Editoval h4kuna (24. 1. 2014 15:48)