Po změně php 7.4 na 8.2 mi to hlásí, že není aktivní transakce

Rndoom04
Člen | 72
+
0
-

Ahoj všem,
postupně se snažím upgradnout větší projekt, který aktuálně běží na php 7.4.33. Migraci dělám postupnou, tzn. nejprve upgrade verze php, opravit bugy, chyby, nedostatky a potom upgrade Nette jádra vč. composeru a dalších částí.

Nicméně ihned po změně php verze mi laděnka hlásí chybu, že není aktivní transakce, přitom je. Chybu mi to na verzi 7.4.33 nehlásilo a nyní v 8.2 ano. Postupným komentování jsem zjistil, že transakci vadí truncate. Resp. cílem je:

  • Otevření transakce
  • Výmaz tabulky
  • Inserty, update v jiných tabulkách
  • Commit nebo rollback

Script běží v cronu, ale to je v tuto chvíli jedno.

Tzn. zkoušel jsem holé:

$this->database->beginTransaction();
$this->database->query("TRUNCATE TABLE nazev_tabulky;");
$this->database->commit();

Vyskočí chyba, že není aktivní transakce. Pokud zkusím:

$this->database->beginTransaction();
$this->database->query("UPDATE nazev_tabulky...;");
$this->database->commit();

Tak to projde v pohodě.

Očekávám, že to bude nějaká maličkost. Nevěděl by někdo, prosím? :)

Edit: Samozřejmě jsem zkoušel použít i:

$this->database->transaction(function ($database) {
    $database->query("TRUNCATE TABLE nazev_tabulky;");
    return true;
});

ale tam jsem také nepochodil. :)

Editoval Rndoom04 (11. 5. 2023 18:08)

mystik
Člen | 292
+
+2
-

Co pouzivas za databazi? Nektere databaze (MySQL) delaji u urcitych dotazu autocommmit. Tj. je mozne ze spusteni truncate ti udela autocommit a ukonci transakci. Kdyz pak zkusis udelat commit transakce uz neni aktivni. Podobne chyby se driv ignorovaly, ale ted dostanes upozorneni.

Marek Bartoš
Nette Blogger | 1177
+
+1
-

První aktualizuj knihovny (alespoň bugfix verze), ne php. Můžeš řešit problém co v knihovně vznikl kvůli změně v php a který už může být opravený.

Též jak píše mystik – mysql u změn schematu databáze transakce vůbec nepodporuje (nelze udělat rollback) a ukončuje je autocommitem. https://dev.mysql.com/…-commit.html

Editoval Marek Bartoš (11. 5. 2023 22:05)

Rndoom04
Člen | 72
+
0
-

Moc díky za feedback. Nějak jsem to potom asi vytušil, protože jsem to zkoušel obejít přes DELETE FROM a následným ALTER TABLE. DELETE FROM to pustilo ještě, ale ALTER TABLE už ne – také auto commit.

Naštěstí mám takový hrozný kód jen jeden, takže ho ještě fixnu.

Díky moc chlapi.