Cannot execute queries while other unbuffered queries are active po instalaci Kdyby\Events

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

Zdravím,

nevím si rady s jednou věcí – nainstaloval jsem Kdyby\Events 2.1.1 na Nette 2.1.* a funguje výborně. :)

Bohužel, na stránkách byl kód, který umožňoval instalaci databáze (pomocí Nette\Database), který nyní padá na výjimce
Cannot execute queries while other unbuffered queries are active.

Html z laděnky.

Stává se to jen u této instalace databáze, pravděpodobně proto, že využívá transakce, takže se tam děje něco jako:

beginTransaction
delete/insert/update
endTransaction.

Ostatní dotazy na stránkách fungují bez problémů (a bez transakcí).

Podle tohoto příspěvku jsem zkusil fetchnout data, která se mi vrátí z query, ale skončí to na General Erroru.

Co mi nejde do hlavy je to, jaktože to před instalací Kdyby\Events (pomocí composeru) fungovalo.

Patrně to souvisí s tou transakcí, ale neznám Events dost na to, abych dokázal určit, čím by to mohlo být.

Můžete mi prosím dát nějakou radu? :)

Filip Procházka
Moderator | 4668
+
0
-

Events rozhodně na databázi nesahají, to děláš ty. Neaktualizovalo se ti náhodou i Nette, když jsi instaloval Kdyby/Events?

Někde jsi začal unbuffered query, načetl z ní pár řádků (jestli vůbec) a pak jsi chtěl vykonávat jinou. Pořádně si to debugni, podle té laděnky se to k vyvolání toho eventu ani nedostane a vsadím se, že to umře hned při druhé query z toho batche.

Jan Kotalík
Člen | 16
+
0
-

Tak jsem to zkusil nainstalovat úplně znova na nové větvi. Instaloval jsem pomocí composeru a ta chyba se začala stávat hned potom, co jsem udělal registraci do bootstrapu. Všiml jsem si, že záleží na tom, kam v bootstrap.php dám registraci Extension:

když je to takhle:

$container = $configurator->createContainer();
Kdyby\Events\DI\EventsExtension::register($configurator);

tak nefungují Events (ani se nenačtou ty systémové v debug baru), ale fungují mi dlouhé skripty.

Oproti tomu,

Kdyby\Events\DI\EventsExtension::register($configurator);
$container = $configurator->createContainer();

způsobí, že to vyhazuje výše zmíněnou chybu, ale eventy fungují.

Na config.neon přitom vůbec nezáleží.

Filip Procházka
Moderator | 4668
+
0
-

Tak samozřejmě, nemůžeš registrovat Events až potom, co se zkompiluje container, to pak nemá vůbec na nic vliv. Opravil jsem dokumentaci