tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

SQLite3 – Row count is not available for unbuffered queries

před 8 lety

Chbox
Člen | 125
$data = $this->connection->query('
    SELECT *
    FROM [table]
');
  • sqlite3.php Line: 334 Row count is not available for unbuffered queries

co je špatně?
ještě nastavení v config.neon

driver: sqlite3
database: %appDir%/db/database.sqlite
lazy: true
    profiler: true
    result:
        detectTypes: TRUE
        formatDateTime: TRUE

před 8 lety

Chbox
Člen | 125

…tak problém, dělá profiler: TRUE, pokud ho zakomentuji, tak je to v pořádku a dotaz proběhne..

před 8 lety

Chbox
Člen | 125

Jedná se o chybu SQLite3 driveru?

před 8 lety

Milo
Nette Core | 1119

To není chyba driveru, ale vlastnost SQLite3. Používá pouze nebuferované selecty, tj. nelze po selectu spočítat počet řádků, ale pouze seekovat dopředu, dokud jsou nějaké k dispozici. Driver pouze vyhodí NotSupportedException.

Řeší se to jako:

$cnt = dibi::query('SELECT COUNT(*) FROM (SELECT x,y,z FROM table)')->fetchSingle();

Nicméně profiler by s tím měl počítat a bug to tedy je.

Editoval Milo (1. 6. 2011 9:00)

před 8 lety

Milo
Nette Core | 1119

Kouknul jsem zběžně do zdrojáků a tam to ošetřené je. Jakou verzi dibi používáš?

před 8 lety

Chbox
Člen | 125

1.5rc z 21.4.11

před 8 lety

Milo
Nette Core | 1119

A jaký je backtrace?

před 8 lety

Chbox
Člen | 125

ehm, s debug_backtrace() nemám zkušenosti, tak snad jsem správně pochopil.
Hodil jsem backtrace před tu Exception sqlite3.php Line: 334: http://server.czskcup.info/backtrace.zip
Laděnka s chybou tady: http://server.czskcup.info/error.htm

Editoval Chbox (2. 6. 2011 11:20)

před 8 lety

Milo
Nette Core | 1119

Tahle chyba je ale způsobena tím, že neexistuje třída NotSupportedException. Kompatibilita dibi s namespacovaným Nette asi není úplně odladěná. Zkus tady odstranit podmínku, aby se ty třídy vyjímek nadefinovali vždy.

Dám pak issue na GitHub.

EDIT: Jo a k tomu backtrace stačí většinou laděnka, resp. kudy ta vyjímka protekla. 70 tis. řádků je moc ;) Ale měl jsem to popsat líp…

Editoval Milo (2. 6. 2011 15:16)

před 8 lety

Chbox
Člen | 125

pomohlo to, díky.