Na navigaci | Klávesové zkratky

Závěrem dibitýdne...

…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í LIMITOFFSET

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í.

před 17 lety v rubrice dibi | blog píše David Grudl | nahoru

Mohlo by vás zajímat

Komentáře

  1. Milan Svoboda #1

    avatar

    Zajímalo by mne, zda je možno kombinovat zadání where podmínek takto

    $where[] = '[age] > 20';
    $where['email'] = 'franta@example.com';

    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

    před 17 lety | reagoval [4] Stalker
  2. 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 🙂

    před 17 lety
  3. Š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ň.

    před 17 lety | reagoval [16] marek
  4. 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 ;)

    před 17 lety
  5. Damien #5

    Mě tak napadá, co takhle pro dibi udělat Wiki? ;)

    před 17 lety | reagoval [6] Arcao
  6. Arcao #6

    avatar

    #5 Damiene, Souhlas, přeci jenom je lepší se hrabat ve Wiki, než hledat to v nějakých zalezlých spotech.

    před 17 lety
  7. papi #7

    avatar

    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.

    před 17 lety
  8. Damien #8

    Na googlecode ta WiKi k projektu je, stačí ji rozchodit ;)

    před 17 lety
  9. Techi #9

    avatar

    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] )

    před 17 lety | reagoval [10] Jan Škrášek [11] al [13] David Grudl
  10. Jan Škrášek #10

    avatar

    #9 Techi,

    • heh, tak dibi rozhodně není framework, to už spíš nette, ne?
    • progress? podle toho ty poznáváš, že je něco kvalitní
    • kdo tu kývá?
    • zbytečné? to je spíš asi napsaní tvého komentáře :D

    nic ve zlom ;)

    před 17 lety
  11. 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).

    před 17 lety
  12. Whitek #12

    avatar

    diky za or a and (ja si je v nouzi napsal do verze 0.6e sam, ale mam to radeji z „vyssi moci“ 🙂 ).

    před 17 lety
  13. David Grudl #13

    avatar

    #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 🙂

    před 17 lety | reagoval [14] Tomik [20] veena
  14. Tomik #14

    avatar

    #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! 🙂

    před 17 lety | reagoval [15] CZNeo
  15. CZNeo #15

    avatar

    #14 Tomiku, doba pokročila, nyní si samci budou přeměřovat dobu zpracování a délku skriptů

    před 17 lety
  16. marek #16

    avatar

    #3 Šmoulo, mno tak poslední koment mi tu byl smazán, ale našel jsem to jako dibi::test()

    před 17 lety | reagoval [17] David Grudl
  17. David Grudl #17

    avatar

    #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…

    před 17 lety | reagoval [18] marek
  18. marek #18

    avatar

    #17 Davide Grudle, já vím, ale asi jsem tupec :) omlouvám se…

    před 17 lety | reagoval [19] David Grudl
  19. David Grudl #19

    avatar

    #18 marku, mně se to už stalo taky. To nebyla výtka, jen zamyšlení.

    před 17 lety
  20. veena #20

    #13 Davide Grudle,
    chlapi pozor dáváte mi námět na téma další php konference 😉

    před 17 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.


phpFashion © 2004, 2024 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.