New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Connection: alternative order of statement and arguments #381
Comments
teď jsem zjistil, že před PDO ještě argumenty zpracovává SqlPreprocesor a tohle by byla práce pro něj. jenže v některých věcech opravdu není ideální: např. nelze mu předat pole argumentů pro WHERE a na INSERT ON DUPLICATE KEY UPDATE úplně selže, protože obě pole považuje za VALUES. dál třeba neošetřu typ (int) před LIMIT a OFFSET pokud by ses k tomu Davide nějak vyjádřil, začal bych na tom dělat. stávající stav mi velmi nevyhovuje. nebo mám napsat RFC? :P víc tady: http://forum.nette.org/cs/8866-novy-sqlpreprocessor-pro-nette-database |
Vypadá to zajímavě, nějaké návraty k Dibi rozhodně budou. Ale už bych to nezařazoval do verze 2.0, do nějaké další. |
je to zpětně kompatibilní, takže by to doufám nic rozbít nemělo (to je třeba otestovat). ale předpokládam, že do verze 2.0 už to nestihnu ;-] souviselo by to s refaktoringem Selection::where() - aby si nemusela skládat podmínky sama. zkusím vyrobit patch až bude čas |
Super. |
první část tady: https://github.com/paranoiq/nette/commit/0dd2e7556473234d0a311575f999d90582387337 narazil jsem problém, který asi nelze vyřešit jinak než BC breakem - v původním PDO::query je volitelný druhý parametr volba FETCH_XYZ. v NDB je odsunuta parametry dotazu na poslední místo. s novou syntaxí ale počet parametrů není znám (nejsou placeholdery) a zpracovávají se všechny parametry. tudíž nelze FETCH_XYZ předávat tímhle způsobem. řešením, pokud má vůbec smysl to řešit, by asi bylo přidat Connection::setFetchMode()... co ty na to? |
Podle mě to nemá smysl řešit. |
ping @hrach - co si o tom myslíš? |
Tezko se mi orientuje, jestli odkazovany paranoiq@0dd2e75 je presnou implementaci RFC. Budu spis reagovat na RFC.
Konkretne bych tedy postupoval ve vice krocich:
|
Implementoval jsem to ve stylu dibi, tj, počet otazníků ve výrazu určuje, kolik následujících hodnot jsou parametry. |
…10, 'WHERE id = ?', 20) [Closes nette/nette#381]
v PDO / NotORM / Nette\Database\Connection je u metod query(), exec(), fetch...() pořadí takové: nejdřív statement, potom všechny argumenty. ve statementu se pozice argumentů označuje otazníkem
při složitějších dotazech s mnoha argumenty z toho vzniká naprosto nečitelný kód, kde se na konci kupí hromada proměnných a není na první pohled jasné, který argument kam patří
líbila se mi syntaxe dibi, kde byly útržky statementu prokládány argumenty samými. lze to velmi snadno docílit i v N\D\C. zatím používám takovéhle rozšíření: https://gist.github.com/1277781
detekce staré/nové syntaxe je podle toho, že v nové nejsou otazníky
The text was updated successfully, but these errors were encountered: