Adminer 3.4.0
Školení, která pořádám
Hlavní novinkou v této verzi Admineru mělo být zvýrazňování syntaxe SQL příkazů pomocí CodeMirror, ale znovu jsem s tím nebyl zcela spokojen, tak jsem již podruhé funkční implementaci opět vyřadil. Co od této funkce očekávám:
- Zvýrazňování syntaxe pokud možno ve všech podporovaných databázových systémech (přijatelné).
- Zvýraznění řádku, na kterém došlo k chybě (bylo funkční).
- Doplňování klíčových slov a identifikátorů (částečně připraveno v minulém pokusu).
- Stejné barvy jako používá zvýrazňování syntaxe provedených příkazů, ideálně využitím stejného nástroje pro obě věci.
- Využití na všech stránkách, kde se zadává SQL příkaz (tedy např. i v editaci triggerů).
- Obvyklá funkčnost klávesových zkratek pro přesun kurzoru (např. Ctrl+Left funguje jinak).
- Neblokující nahrávání.
Asi mám moc velké nároky, ale bez všech těchto funkcí mi samotné zvýrazňování syntaxe spíš překáží.
Už jsme se seznámili s tím, co se v Admineru nezměnilo. Co zmizelo?
- Odstranil jsem nahrávání stránek a odesílání formulářů pomocí AJAXu. Vedly mě k tomu dvě věci: Jednak se zlepšily prohlížeče a nahrání celé stránky už není o tolik pomalejší a jednak Google Chrome změnil implementaci práce s historií, takže to začalo zlobit.
A teď konečně k novým funkcím:
- Do záhlaví tabulek jsem přidal odkaz pro sestupné třídění. Zvažoval jsem i to, že by se tabulky automaticky třídily sestupně podle primárního klíče, ale zdá se mi to příliš magické. Na takovéto chování je podle mě prostor v Adminer Editoru, který data třídí podle prvního indexu – pokud je řetězcový, tak vzestupně, jinak sestupně.
- Dobrovolník mi poslal funkci pro označení rozsahu řádek pomocí Shift+click. Chvíli jsem se zařazením této funkce váhal, ale když jsem potřeboval označit 10 databází (jejichž výpis nejde filtrovat), tak jsem ji přidal. O této funkci se uživatelé nedozví nijak jinak, než že ji zkusí. Patří tedy mezi vlastnosti, které zůstanou většině uživatelů utajeny.
- U provedených příkazů se nově zobrazuje čas, kdy doběhly. Zvažoval jsem i přidání času, jak dlouho běžely, to ale ve většině případů není tak užitečné. Hodně tuto funkci oceňuji u příkazu Uložit a pokračovat v editaci, který po druhém použití stránku nijak nezměnil – hláška „Položka byla aktualizována“ je zobrazená už od prvního použití. Dalo by se to vyřešit i jejím skrytím nebo vyblednutím po nějakém čase, osobně tohle chování ale nemám moc rád.
- Při práci s velkými tabulkami potřebuji vědět, jestli se dotaz vykoná s indexem nebo bez něj. Dotazy bez indexu totiž obvykle ani nemá smysl pokládat. Zvažoval jsem, že bych seznam indexů zobrazil i na stránce s výpisem dat, ale nakonec jsem doplnil jednoduchou heuristiku, která u velkých tabulek vyhledávání a řazení porovná se seznamem indexů a pokud žádný vyhovující nenajde, tak vedle tlačítka Vypsat zobrazí vykřičník. Tohle tlačítko jsem se totiž dřív úplně bál zmáčknout. Zatím to nefunguje při použití agregační funkce v seznamu sloupců, ale i tak mi tato funkce přijde užitečná.
- Do přihlašovacího formuláře jsem přidal políčko pro zadání názvu databáze. Nikdy v něm schválně nebylo, protože ve většině případů uživatele jen zdržuje – místo psaní názvu databáze si na ni mohou o krok později jen kliknout, takže neriskují překlep. A i když jsou ve formuláři všechna políčka nepovinná (včetně serveru), tak se to uživatelům těžko vysvětluje. Políčko jsem nakonec přidal především proto, že v PostgreSQL se musím vždy připojit k nějaké databázi, zároveň ale neexistuje databáze, na jejíž existenci by se dalo spolehnout. V SQLite se seznam databází defaultně nezobrazuje, takže tam to jeden krok ušetří.
- U každého výpisu dat v SQL příkazu se zobrazuje také jeho
EXPLAIN
. Ten oproti jeho ručními vykonání zobrazuje také odkazy na tabulku a její indexy. To dříve nefungovalo u aliasů (SELECT * FROM tab t
), teď už to funguje i s nimi.
- Především u velkých tabulek byl počet řádků špatně čitelný, tak jsem doplnil formátování čísel.
- U událostí v MySQL se nově zobrazuje, pokud je zakázáno jejich spouštění.
- V seznamu tabulek PostgreSQL se nově zobrazuje přibližný počet řádek, obdobně jako v MySQL.
- V Oracle je nově k dispozici schéma, seznam procesů a čísla v přehledu tabulek.
- V přizpůsobení lze ovlivnit formát názvu souboru exportu. Pár lidí totiž požádalo o přidání data a času, což by mi ale osobně spíš překáželo. Vyřešit by se to dalo i tím, že by se formát zadával ve formuláři, to ale není styl, který by byl Admineru blízký. Jeho pojetí je: žádná konfigurace, jednoduché uživatelské rozhraní, smysluplné výchozí chování, změny pomocí přizpůsobení a rozšíření. Datum a čas by se dal sice snadno doplnit, ale co až by si někdo vzpomněl, že chce přidat doménu serveru, na kterém Adminer běží? Nebo třeba náhodné číslo? Budu snad kvůli tomu měnit kód, vymýšlet složité formátovací znaky a psát dokumentaci? Tohle pojetí mají jiné nástroje. Adminer raději umožní pomocí přizpůsobení udělat cokoliv a když to považujete za užitečné, tak můžete zveřejnit rozšíření.
- Vyměnil jsem minimalizátor JavaScriptu, o čemž jsem obšírně pojednával.
- Přibyl indonéský, ukrajinský a bengálský překlad. Poslední jmenovaný jsem dostal dokonce dvakrát, ale i s mými chabými znalostmi bengálštiny jsem poznal, že jedna verze za moc nestojí, tak jsem zařadil jen tu druhou.
I z delších časů mezi novými verzemi je poznat, že už Admineru nevěnuji tolik energie jako dříve. Budu proto rád, pokud byste mi s projektem pomohli. Nejlepší formy pomoci jsou tyto:
- Zodpovídání dotazů na fórech: českém i anglických.
- Procházení chyb a požadavků, především označování duplicit.
- Vylepšování ovladačů – především Oracle a MS SQL, ale jistou péči by snesl i PostgreSQL.
Diskuse
Opět chválím za skvělou aplikaci.
A opět tu mám pár postřehů:
Nejvíce ze všeho postrádám možnost zvolit spojovač (AND/OR) ve funkci vyhledat. Mohu si sice upravit sql výraz, ale tím přijdu o možnost dodatečného naklikání řazení a už musím všechno psát. Dále mi zmizí odkaz editovat u jednotlivých řádků.
Dále je zvláštní, že když vyhledám nějaký text (např. jméno uživatele) a sloupec = (kdekoliv), tak mi to zobrazí i uživatele, kteří tento řetězec ve svém řádku nemají, ale obsahují b'1' ve sloupci typu bit(1).
Nový odkaz na řazení v záhlaví je sice pěkný, ale domnívám se že v tomto UI patternu se řazení po kliknutí, když už je nastaveno, změní na opačný způsob řazení (viz téměř libovolný souborový manažer).
A v rychlé editaci mi nejde vložit NULL. U textových sloupců se sice nedá určit, jestli uživatel nehodlá vložit 'NULL', ale v číselných by nejspíš šlo.
A pak by se možná u sloupců typu enum nechal zobrazovat select namísto textového pole. Zkoušel jsem to uskutečnit pomocí rozšíření, ale bohužel se mi to nepodařilo.
A ještě bych chtěl dodat, že jsem vytvořil plugin pro automatické aktualizace Admineru. Výchozí interval je kontrola jednou týdně.
Struktura souborů:
index.php (plugin loader)
adminer.php (práva pro zápis)
plugins/plugins-auto-update.php (práva pro zápis)
Download: https://dl.dropbox.com/u/1189439/stable/pl…-update.php
Rád bych to zveřejnil, ale uvedená adresa vrací 404. Bylo by možné to dát někam trvaleji, např. na GitHub?
Lenka:
ceskem i anglick_em__ ;)
Lenka:
Jakubovi clanky se skvele ctou mimo jine proto, ze v nich ma temer vzdy temer nulovy pocet preklepu i jakychkoliv jinych chyb ;) +1
Matúš Jančík:
Ďakujem za update Jakub. Teším sa najmä z toho, že už to ide svižne a bez problémov v Chrome.
Jenda:
Po upgradu mi nefunguje přihlášení. Je to globální problém, nebo to dělá jenom mně. Prostě napíšu do přihlašovacího formuláře svoje údaje a odešlu, tak se nestane nic. žádná chyba, jenom se refreshne stránka a to je vše. Po downgradu zase vše funguje správně.
Dělá to ještě někomu?
Jakub Vrána :
Změnil jsem název políček, ve kterých se údaje posílají. Pokud tedy používáš nějaké přizpůsobení, bude potřeba ho upravit.
artorie:
díky za update, konečně funguje vypisování přes sql v google chrome
Marek Mizera:
Ahoj
Tiez mam nejake postredy/napady. Adminer sice pouzivam kratko, ale uz castejsie ako phpMyadmin (vyhovuje 1subor a rychlost applikacie). Dotazy mam hlavne k UI a sice :
1. ked vytvaras novu tabulku cez create table, bolo by dobre odchytavat stlacenie tlac. enter. Totizto enter okamzite zapise novu tabulku, a castokrat sa stane, ze clovek ho stlaci omylom/zo zvyku. Osobne by som po stlaceni uvital skor pridanie noveho riadku + presun don (napr. focus na nazov stlpca), takto by si user mohol rychlo vypisat nazvy stlpcov a potom im pridelit vlastnosti.
2.hm, sortovanie v tabulke nefunguje (teraz som si stiahol 3.4.0 :), teda neprepina asc/desc.
Ale co sa sortovania tyka, hlavne mi chyba vsade mimo (obcas si chcem napr. zoradit tabulky podla objemu dat)
3. human readable velkost tabulky (KB, MB, GB ...)
4. drop table link pri konkretnej tabulke v zozname + v zobrazeni struktury tabulky. Obcas sa to hodi, hlavne ked mam 100+ tabuliek a nechce sa mi skrolovat az na koniec zoznamu (ano viem ze existuje page down a end :), popr. zobrazim tabulku, aby som sa presvedcil, ze toto je naozaj to, co chcem zmazat
5. nad zoznamom tabuliek (bocnym, alebo aj v gride zoznam tabuliek) by sa hodilo filtrovacie pole pre nazov tabulky (opat pri 100+ tabulkach pomoze proti nechcenemu skrolovaniu)
6. skryvanie stlpcov v gride tabulky (klikatelne)
7. dlhsie nazvy tabuliek nie su vidiet v bocnom zozname, moznosti : dat do hintu (tag atribut title) nazov tabulky alebo resizable bocny panel
HTMLHERGOT:
Nejsem autor, ale pokusím se na něco odpovědět.
ad 1) někomu to vyhovuje, někomu ne. Někdo by chtěl, aby skript "myslel za něj", někdo naopak na Enter pro odeslání spoléhá. Těžko se zavděčit ;-) řešení "tak, jak se to očekává", tedy s implicitním chováním Enteru mi přijde jednodušší a čistší.
ad 2) zkoušel jsem a mě to funguje (mimochodem - např. parametr desc[0] se v URL kóduje jako desc%5B0%5D, jestli to s tím nesouvisí). Ad seřazení tabulek podle objemu dat) je otázka, jak často to uživatelé potřebují. Existuje hafo JavaScriptových knihovniček pro učinění tabulky seřaditelné, ale nevím, zda-li by je chtěl Jakub montovat do Admineru.
ad 3) mě osobně tato (paradoxně primitivní) interpretace velmi vyhovuje - to, které číslo je větší a které menší je vidět na první zlomek vteřiny už jenom podle délky daného čísla
ad 4) tomu moc nerozumím - kompletní smazání tabulky v Adminu udělat jde jak hromadně tak jednotlivě a smím-li říct svůj názor, tak řešení této akce přes tlačítko 'Odstranit' uvnitř akce 'Pozměnit tabulku' mi přijde adekvátní jak kontextu tak počtu kroků, které pro to musí správce udělat. Přijde mi, že odstraňování tabulek dělají správci docela zřídka a to kliknutí navíc pro to mohou udělat (naopak, na přímý link na vymazání tabulky na její detailní stránce by mohli kliknout nechtěně a omylem si nenávratně zničit data).
ad 5) tady s tebou poprvé souhlasím, resp. nic nenamítám, kdyby tu taková možnost byla. Velmi praktické by bylo filtrování bez znovunačítání, v JavaScriptu, hned při psaní, bez hvězdiček a zástupných znaků, jen porovnání výskytu napsaného řetězce v názvu tabulek. Při filtrování by muselo být někde jasně napsáno, že výčet tabulek je omezen filtrem. Stejné řešení bych udělal i u exportu. Co je ovšem svízelné, jsou ta zaškrtávací políčka vedle tabulek - po odeslání formuláře s nějakou akcí se totiž jejich hodnoty přenesou, ať už jsou viditelná nebo skrytá... Ještě mě napadlo tabulky neskrývat ale zvýrazňovat, popř. takto zvýrazněné hromadně označit.
ad 6) imho zbytečná práce navíc - Adminer už to má vyřešené - místo klikání na sloupce klikej do fieldsetu Vypsat ;-) Za druhé by při tvém řešení musel Adminer implicitně dotazovat všechno (což v některých extrémních případech může být hodně časově náročné).
ad 7) nic nenamítám, zajímalo by mě vyjádření Jakuba.
HTMLHERGOT:
dodal bych k bodu 5) v levém panelu bych rozhodně žádné filtrování nedělal - nemá to žádné využití, když z něj můžeš prohlížet tabulku nebo vidět její strukturu a děláš to vždy po jedné a nikdy hromadně. To snad jedině pro stránku přehledu tabulek v databázi nebo export. Pokud chceš rychle najít tabulku v levém sloupci, použij Ctrl+F.
Jakub Vrána :
Díky za postřehy.
1. Formuláře, které nejdou odeslat Enterem, nesnáším. Považuji to za neslušnost vůči uživatelům, kteří tuto funkci ovládají (a předpokládám, že Adminer má takových většinu).
2. Kliknutí na název sloupce asc/desc přepíná, šipka pro sestupné řazení vždy řadí sestupně.
3. K tomu už jsem se vyjadřoval několikrát – vnímám to stejně jako HTMLHERGOT.
4. Tlačítko pro odstranění tabulky je k dispozici v její změně.
5. Obvykle stačí použít hledání v prohlížeči. Existuje také plugin tables-filter: http://www.adminer.org/cs/plugins/.
6. Seznam sloupců se dá omezit v políčku Vypsat.
7. To je rozumná připomínka, u dlouhého seznamu tabulek to opravdu může být problém. Nevím ale moc, co s tím. Sám používám boční scrollování (pokud ho myš podporuje). Title ke každé tabulce dávat nechci, protože by to ve většině případů vypadalo hloupě. Změnu velikosti bočního panelu dělat určitě nebudu. Napadlo mě to vyřešit JavaScriptem – při najetí myši se element vyjme z bočního menu a absolutně se napozicuje na stejné místo. Ale dělat se mi to nechce.
Jakub Vrána :
7. Vyřešil jsem to tak, že se seznamu tabulek při najetí myši nastaví overflow: auto.
Martin :
Ahoj Jakube. Velice by mě zajímalo, co vlastně způsobovalo ten dvojitý loading v Chrome. Ano, vím, může za to Chrome, ale jak by se to dalo vyřešit jednoduše místo mazání veškerého ajaxu? (BTW, myslím si, že je to znát, alespoň opticky, což je škoda)
Dále si myslím že čas dokončení dotazu je celkem blbost. Když testuju nějaké updaty, chci vědět jestli se to vykonalo za 0.01 nebo 0.54 ...
cucací potřeby:
Jakube, oprav si na stránce Tipy pro Adminer: ...Kliknutí na sloupec ve výpisu záznamy podle něj setřídí, druhé kliknutí je setřídí sestupně.
cucací potřeby:
To, že se od této verze změnilo řazení záznamů přes odkazy v hlavičce (že přibyl odkaz pro sestupné řazení).
No, a když už jsem u toho kibicování, snad by neuškodilo zaktualizovat i stránku rozdílů mezi Adminerem a phpMyAdminem.
Jakub Vrána :
Souhlasím. Nechceš se toho ujmout? Aspoň by to bylo objektivní.
cucací potřeby:
Ani moc ne ;-) Ty sám víš nejlíp, co tvůj výtvor má či nemá. Jde jenom o to porovnat phpMyAdmin verzi 3.5.2 s Adminerem 3.4 a aktualizovat pár čísel (počet bezpečnostních chyb, designů, překladů, velikost/počet souborů).
Jakub Vrána :
Už jsem to s tím řazením pochopil a opravil jsem to.
Diskuse je zrušena z důvodu spamu.