…tu mám ještě několik novinek. Především, nyní je možné do řetězce zapsat více modifikátorů najednou a teprve poté uvést jejich hodnoty:
dibi::query('
SELECT * FROM [table]
WHERE id = %i AND added > %d', $id, $time
);
Tímto se z modifikátorů stávají takové chytré „placeholders“. Už ani nemusí být umístěny zcela na konci řetězce.
Zároveň zavádím několik nových modifikátorů:
%ex
pro expanzi pole do argumentů (Rubysté znají jako*[1,2,3]
)%or
a%and
před polem spojí jeho prvky s oddělovačem ‚AND‘ nebo ‚OR‘%lmt
a%ofs
pro přenositelné a možná snadnější nastaveníLIMIT
aOFFSET
Příklady použití:
$where[] = '[age] > 20';
$where[] = '[email] IS NOT NULL';
dibi::query('SELECT * FROM [table] WHERE %and', $where);
// SELECT * FROM [table] WHERE [age] > 20 AND [email] IS NOT NULL
nebo také
$where['age'] = 20;
$where['email'] = 'franta@example.com';
dibi::query('SELECT * FROM [table] WHERE %and', $where);
// SELECT * FROM [table] WHERE [age]=20 AND [email]='franta@example.com'
Limity a ofsety:
// with limit = 30, offset = 90
dibi::query('SELECT * FROM [products] %lmt %ofs', 30, 90);
// SELECT * FROM [products] LIMIT 30 OFFSET 90
// with offset = 100
dibi::query('SELECT * FROM [products] %ofs', 100);
// pro SQLite:
// SELECT * FROM [products] LIMIT -1 OFFSET 100
// pro MySQL:
// SELECT * FROM [products] LIMIT 18446744073709551615 OFFSET 100
// pro PostgreSQL:
// SELECT * FROM [products] OFFSET 100
Funkčnost modifikátorů %and
& %or
považujte
za experimentální. Očekávám vaše připomínky a podle nich ji případně
upravím. Jinak změny si vyžádaly větší zásah do zdrojového kódu
dibi-překladače a ačkoliv jsem všechno velmi důkladně
otestoval, buďte při nasazování pozorní.
Komentáře
Milan Svoboda #1
Zajímalo by mne, zda je možno kombinovat zadání where podmínek takto
a ještě jedna věc jak by se kombinovalo ve where podmínce AND a OR, když potřebuju trochu složitější podmínky
Taurus #2
V prvním větě posledního odstavce máš "promile"or místo "procento"or…
Jinak pěkný, zvlášť query ve stylu printf 🙂
Šmoula #3
Šikla by se mi v dibi funkce, která takto hezky poskládaný řetězec dotazu vrátí jako string, nic víc, nic miň.
Stalker #4
#1 Milane Svobodo, Tiež by ma zaujímali tie zložitejšie podmienky. Že by nejaké vnorené polia?
PS: Ten faraón sa podaril ;)
Damien #5
Mě tak napadá, co takhle pro dibi udělat Wiki? ;)
Arcao #6
#5 Damiene, Souhlas, přeci jenom je lepší se hrabat ve Wiki, než hledat to v nějakých zalezlých spotech.
papi #7
Ta wiki by určitě bodla. Bylo by to přehlednější. Nicméně bych občas uvítal i trochu složitější příklady dotazů. Přeji hodně zdarů, jde to dobrým směrem.
Damien #8
Na googlecode ta WiKi k projektu je, stačí ji rozchodit ;)
Techi #9
Mě prostě připadá dibi jako takový pseudoframework, kde se autor potřebuje pochlubit (nic ve zlém), co se mu povedlo vymyslet a napodobit z jiných frameworků
A hromada začínajících programátorů jenom hltá a uznale kývá hlavou. Ale proč ne, aspoň se něco naučí.
Co mi chybí je vývoj více lidí a nějaký viditelný progress.
Zkrátka se mi zdá zbytečné vytvářet další framework, když jich je několik velmi známých a prověřených jako symfony, cake a kralující Zend.
(Autor komentáře je členem ZF komunity :o] )
Jan Škrášek #10
#9 Techi,
nic ve zlom ;)
al #11
#9 Techi, Nevim jestli a jak moc pozorne sledujete vyvoj Nette, ale ja osobne jsem si zadneho chlubeni nevsiml. Ceho jsem si ale vsiml hned, je kvalita kodu a hlavne kvalita myslenky se kterou to dgx pise. Pokud by tedy chtel, tak se rozhodne cim chlubit ma a my ostatni mu muzeme byt vdecni, ze se s nami o tyto veci podeli (rozdeli).
Whitek #12
diky za or a and (ja si je v nouzi napsal do verze 0.6e sam, ale mam to radeji z „vyssi moci“ 🙂 ).
David Grudl #13
#9 Techi, výborně, hledám nějakého zastánce, který žije a dýchá jen pro ten jediný Zend Framework, a se kterým bych si to mohl „rozdat“. Úkolem by bylo napsat jednoduchou totožnou aplikaci, každý v tom svém prostředí. Hned bude jasno, kdo drží trumfy a má setsakramentsky navrch 🙂
Tomik #14
#13 Davide Grudle, To vůbec není špatný nápad. Už jsi něco naznačil na první PHP konferenci, že bys chtěl něco podobného udělat. Jsem pro! Určitě by to bylo mnohem relevantnější měřítko něž nějaký „progress“. 🙂
P.S.: Abych nebyl špatně pochopen, neovládám Zend natolik, abych se Ti s ním stavil do cesty, ale pokud by se někdo rozhodl si to s Tebou a nette rozdat, určitě bych tu akci podporoval! 🙂
CZNeo #15
#14 Tomiku, doba pokročila, nyní si samci budou přeměřovat dobu zpracování a délku skriptů
marek #16
#3 Šmoulo, mno tak poslední koment mi tu byl smazán, ale našel jsem to jako dibi::test()
David Grudl #17
#16 marku, houby smazán, první odeslání je jenom náhled. Kolik lidí si pak myslí, že jim mažu komentáře, když je ve skutečnosti vůbec neodeslali…
marek #18
#17 Davide Grudle, já vím, ale asi jsem tupec :) omlouvám se…
David Grudl #19
#18 marku, mně se to už stalo taky. To nebyla výtka, jen zamyšlení.
veena #20
#13 Davide Grudle,
chlapi pozor dáváte mi námět na téma další php konference 😉
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.