Autocomplete pro SQL
Našeptávače ve webových editorech kódu jsou převážně tupé. Mají seznam klíčových slov, která jednoduše doplňují podle toho, co začnete psát. V SQL jim můžete dát ještě seznam tabulek a jejich sloupců a doplňují pak i ty. Ale když napíšete třeba SELECT * FROM tabulka WHERE | tak netuší, že mají doplňovat sloupce jen z tabulky tabulka. Třeba v CodeMirror musíte napsat WHERE tabulka.|, aby se zobrazily sloupce jen z dané tabulky.
Rozhodl jsem se to vzít za jiný konec. Místo, aby se za všech okolností napovídalo všechno, tak se napovídá jen to, co v daném kontextu dává smysl. Takže třeba:
- Za
SELECTse napovídají sloupce ze všech tabulek. Pokud jich je moc, tak se napovídátabulka.pro všechny tabulky. Když to vyberete, ukážou se sloupce jen z dané tabulky. - Pokud ale někde vpravo už máte
FROM tab1 JOIN tab2, tak se napovídají jen sloupce z tabulektab1atab2. - U dotazu
SELECT * FROM tab ORDER BY idse nenapovídáWHERE, protože to patří předORDER BY. Napovídá se aleLIMIT. - U
CREATE TABLEse nenapovídá nic, název tabulky bude určitě jiný. - Když necháte doplnit
INSERT, tak se rovnou doplníINSERT INTO, protože to je nejčastější varianta. Můžete se ale vrátit a nechat si dopnitIGNORE. - Když máte někde v dotazu identifikátor uzavřený do
`idf`(v MySQL), tak se tabulky a sloupce defaultně nabízí taky takto uzavřené.
phpMyAdmin má plnohodnotný parser SQL, ale pro autocomplete ho nepoužívá. Navíc parser běží na serveru, takže se s každým napsaným písmenkem musí odesílat požadavek a čekat na odpověď. Já jsem si napsal pár regulárních výrazu v JavaScriptu, které nakonec udělají mnohem víc muziky. Když jsem to dokončil, tak jsem nemohl uvěřit vlastním očím: Je to v podstatě SQL wizard, ve kterém celý dotaz sestavíte skoro jen pomocí šipky dolů a Enteru. Ale když chcete něco speciálního, tak se snaží nepřekážet.

Živá ukázka
Jistě sami přijdete na to, jaké tabulky a sloupce jsou definované. Začněte psát SQL dotaz:
Diskuse
Aleš:
Zkusil jsem políčko v článku na iPhone a script posouvá kurzor vždy na začátek. Takže když napíšu SE, v poli se objeví ES. Jinak díky za super feature!
Jakub Vrána
:
Díky za upozornění, opravil jsem. Ale hlavní problém je, že iOS nepodporuje <select size>, takže to ještě budu muset předělat.
Diskuse je zrušena z důvodu spamu.

