Oznámení
DibiConnection::inTransaction();
před 11 lety
- edke
- Člen | 198
Ahoj David.
Je v dibi implentovany sposob, ako by som mohol overit, ci som/nie som v transakcii ? Private premenna existuje, ale nenasiel som metodu, ktorou by sa dala overit. Zislo by sa nieco taketo:
/**
* Is in transaction ? (if supported).
* @return boolean
*/
public function inTransaction()
{
return $this->inTxn;
}
Aj ked je pravda, ze v mojej aktualnej situacii si vystacim s tymto:
final public function disconnect()
{
if ($this->connected) {
if ($this->inTxn) {
$this->rollback();
}
$this->driver->disconnect();
$this->connected = FALSE;
}
}
před 11 lety
- phx
- Člen | 652
Ja to osetruji pres vyjimku. Dam dibi::begin() a but to projde nebo vyjimka mi rekne ze mam smulu. Bohuzel pak zase musim rucne osetrovat zda skoncit kdyz jsem zacal nebo neskoncit kdyz jsem nezacal (nepovedlo se zacit).
Proc to potrebuji. Mam na praci s DB napsane ruzne metody a nektere pouzivaji trancakci, ale problem (u MYSQL) je kdyz metoda s transakci pouziva metodu s transakci. Osobne bych spise uvital aby si dibi pamatovalo kolikrat jsem volal dibi::begin() a kdyz zavolam dibi::commit() tak aby to commitlo pouze kdyz pocet begin a commit bude stejny. (jakoby vnozovani a vynorovani). Rollback by to cele zabil at jsem vnoren jakkoliv hluboko. I kdyz to je otazka co by mel delat rollback.
Hm?
před 11 lety
- edke
- Člen | 198
phx wrote:
Ja to osetruji pres vyjimku. Dam dibi::begin() a but to projde nebo vyjimka mi rekne ze mam smulu. Bohuzel pak zase musim rucne osetrovat zda skoncit kdyz jsem zacal nebo neskoncit kdyz jsem nezacal (nepovedlo se zacit).
Hej, to ma napadlo, ale potom som prisiel nato, ze disconnect riesi rollback() a to mi v tejto situacii staci, teda som sa k takejto malej „prasarne“ zatial vyhol :)
před 11 lety
- paranoiq
- Člen | 388
phx napsal(a):
Osobne bych spise uvital aby si dibi pamatovalo kolikrat jsem volal dibi::begin() a kdyz zavolam dibi::commit() tak aby to commitlo pouze kdyz pocet begin a commit bude stejny. (jakoby vnozovani a vynorovani).
jen takový nápad:
vnořování transakcí by se dalo implementovat pomocí savepointů (alespoň
v mysql a pg určitě). dibi by si muselo pamatovat v jaké úrovni zanoření
právě je a podle toho potvrzovat a stornovat savepointy.
před 11 lety
- phx
- Člen | 652
Savepointy? to si budu muset nastudovat;) Diky za tip.
před 11 lety
- David Grudl
- Nette Core | 6806
Přidal jsem podporu pro savepointy (a metodu inTransaction). Snad
to bude fungovat. Používají se existující metody begin(), commit() a
rollback(), které mají nyní jako volitelný parametr název savepoint.
před 11 lety
- edke
- Člen | 198
Paraaada, velka vdaka, idem skusat savepointy :)