dg / dibi

Dibi - smart database abstraction layer
https://dibiphp.com
Other
487 stars 136 forks source link

Komentáře v SQL dotazu #42

Closed jkufner closed 12 years ago

jkufner commented 13 years ago
$result = dibi::query("-- ".__FILE__.":".__LINE__.": Hello world
                    SELECT 'hello world'
            ")->fetchSingle();

Výsledný SQL dotaz:

-- /var/www/index.php':83:' Hello world
SELECT 'hello world'

Ve výsledku jsou navíc apostrofy u dvojteček.

Přidáme-li otazník:

$result = dibi::query("-- ".__FILE__.":".__LINE__.": Hello world ?
                    SELECT 'hello world'
            ")->fetchSingle();

Výsledek: SQL translate error

-- /var/www/index.php':83:' Hello world **Extra
placeholder**
SELECT 'hello world'

Trošku větší SQL dotazy pak dokážou generovat i chyby jako "DateTime::__construct(): Failed to parse time string (AND start_time <= %d) at position 0 (A): The timezone could not be found in the database". Samozřejmě, SQL dotaz je zcela správně a po odstranění komentáře na prvním řádku funguje.

Ten komentář na začátku měl sloužit k identifikaci dotazu v logu a chybových hlášeních.

Navíc v tom ladicím toolbaru od Nette chybí "explain" u takto okomentovaného dotazu a komentáře nejsou správně zvýrazněny.

milo commented 13 years ago

To by dibi muselo parsovat celý SQL dotaz, což nedělá. Komentář lze vložit přes %SQL modifikátor a bude to bez problému. <?php $comment = '-- ' . FILE . ':' . LINE . ': Hello world'; dibi::query("%SQL\nSELECT 'hello_world'", $comment); ?> Detekce SELECTu a explain by byla fajn.

jkufner commented 13 years ago

Díky, tohle funguje tak jak má.

milo commented 13 years ago

Jen pozor na to, aby v komentu nebyl nový řádek. Pak je chyba na světě.

jkufner commented 13 years ago

Tak to jasně :)

Spíš uvažuju, jak moc by bylo těžké zařídit, aby takový řádek přidávalo dibi samo a nemusel jsem ho tam pořád dávat ručně.

milo commented 13 years ago

Pokud vím, tak to profiler do svého logu přidává. https://github.com/dg/dibi/commit/8a899c7ddb7b5e661c93f6eea1b9b3bc5b30aff7

Můžem to probrat na http://forum.dibiphp.com/ ať to tu nezasviňujem.