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
SELECT
se 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 tabulektab1
atab2
. - U dotazu
SELECT * FROM tab ORDER BY id
se nenapovídáWHERE
, protože to patří předORDER BY
. Napovídá se aleLIMIT
. - U
CREATE TABLE
se 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.


Vložit komentář

