SQL formázó
Nyers SQL lekérdezések formázása és szépítése, vagy visszatömörítése, teljesen a böngésződben.
Kapcsolódó eszközök
Az eszközről
Az ORM-ből, egy lassú lekérdezés naplóból, vagy egy kolléga Slack-üzenetéből kimásolt SQL gyakran egyetlen sűrű, tördelés nélküli sor — minden SELECT, JOIN és WHERE feltétel egybefolyik, vizuális szerkezet nélkül, amire támaszkodhatnál. Ez rendben van egy adatbázismotor számára, amit nem érdekel a szóköz, de embernek nehéz áttekinteni: megtalálni azt a join feltételt, amiről hiányzik egy index, vagy kiszúrni, melyik WHERE feltétel szűri ki a várt sorokat, karakterenkénti olvasást igényel egy futólagos pillantás helyett. Ez az eszköz fogja ezt a szövegfalat, és visszaalakítja abba a formába, ahogy az SQL-t kézzel szokás írni — egy tagmondat soronként, oszlopok és SET hozzárendelések függőlegesen felsorolva, feltételek a WHERE alá behúzva.
A formázás a szabványos tagmondat-kulcsszavak (SELECT, FROM, WHERE, JOIN és variánsai, GROUP BY, ORDER BY, HAVING, LIMIT, INSERT INTO, VALUES, UPDATE, SET, és így tovább) felismerésével működik, és mindegyiknél új sort kezd, míg a WHERE feltételen belüli AND/OR feltételek egy szinttel tovább behúzásra kerülnek, hogy a logikai csoportosítás látható legyen. A SELECT utáni oszloplisták és a SET utáni hozzárendelés-listák a felső szintű vesszőiknél soronként szétválasztásra kerülnek — de egy függvényhíváson belüli vessző, mint a COALESCE(a, b) vagy egy allekérdezés esetén, érintetlen marad, mivel a zárójeleken belüli szétválasztás csak nehezebbé tenné az olvasást, nem könnyebbé. A szöveges és idézőjelbe tett azonosító literálok elkülönítve vannak követve a lekérdezés többi részétől, így egy olyan kulcsszó, ami véletlenül egy szövegen belül szerepel (vagy egy tábla-/oszlopnév, ami véletlenül megegyezik egy tagmondat szóval), soha nem lesz tévesen valódi SQL szintaxisnak tekintve.
A tömörítés az ellenkezőjét teszi: eltávolítja az eszköz saját behúzásait és sortöréseit (és bármilyen extra szóközt, amivel a lekérdezés eredetileg meg lett írva), egyetlen kompakt sorrá, a tokenek között normalizált, egyszeres szóközökkel. Ez akkor hasznos, ha egy lekérdezést olyan helyre kell beilleszteni, ami nem kezeli jól a többsoros szöveget — egy egysoros konfigurációs értékbe, egy shell parancsba, vagy egy naplóüzenetbe —, anélkül hogy megváltoztatnád, mit csinál valójában a lekérdezés.
Ez egy formázó, nem egy lekérdezés-validátor vagy adatbázis-kliens: nem ellenőrzi az SQL-edet egyetlen konkrét adatbázis nyelvtana szerint sem, semmit nem futtat le, és nem fog kiszúrni egy valódi szintaxishibát úgy, ahogy egy igazi parser tenné. Amit megbízhatóan megtesz, az az, hogy bármilyen ésszerűen szabványos SQL-t — MySQL, PostgreSQL, SQLite, SQL Server és hasonló dialektusok esetén is, mivel az alapvető tagmondat-kulcsszavak közösek — olvasható, konzisztensen behúzott verzióvá alakít a lekérdezés jelentésének megváltoztatása nélkül, mindezt helyben, a böngésződben, szerverre küldött adat nélkül.
Mivel minden a kliens oldalán fut, biztonságos beilleszteni valódi, módosítatlan lekérdezéseket egy production lassú lekérdezés naplóból vagy egy belső migrációs scriptből, akár olyanokat is, amik belső tábla- és oszlopneveket tartalmaznak, amiket nem szeretnél elküldeni egy random weboldalnak. Ha megvan a formázott vagy tömörített eredmény, másold ki közvetlenül, vagy használd a "Küldés" gombot, hogy átadd az eszköztár egy másik eszközének — például a hosszának ellenőrzéséhez, vagy ugyanannak a lekérdezésnek két verziójának összehasonlításához.
Gyakran ismételt kérdések
Ellenőrzi ez az eszköz az SQL-emet, vagy kapcsolódik egy adatbázishoz? expand_more
Nem. Ez egy szövegformázó, nem parser vagy adatbázis-kliens — nem ellenőrzi a lekérdezésedet egy konkrét adatbázis nyelvtana szerint, és soha nem futtat le semmit. Csak a szóközöket és sortöréseket rendezi át a felismert tagmondat-kulcsszavak köré.
Megváltoztatja a formázás, hogy mit csinál a lekérdezésem? expand_more
Nem. Csak a szóközök, behúzás és sortörések változnak. A kulcsszavak, azonosítók, literálok és írásjelek pontosan megmaradnak, így a formázott lekérdezés funkcionálisan azonos az eredetivel.
Helyesen kezeli a függvényhívásokon belüli vesszőket? expand_more
Igen. A zárójeleken belüli vesszők — például a COALESCE(a, b) argumentumai vagy egy allekérdezés — ugyanabban a sorban maradnak. Csak a SELECT oszloplista vagy a SET hozzárendelés-lista felső szintű vesszői kerülnek külön sorokba.
Melyik SQL dialektust támogatja ez az eszköz? expand_more
A formázó a MySQL, PostgreSQL, SQLite, SQL Server és hasonló dialektusok között közös szabványos tagmondat-kulcsszavakat ismeri fel (SELECT, FROM, WHERE, JOIN, GROUP BY, ORDER BY, HAVING, INSERT INTO, UPDATE, és mások). Nem dialektus-specifikus, így a csak egy adott dialektusra jellemző szintaxis nem biztos, hogy ugyanolyan szépen rendeződik át.
Biztonságos ide beilleszteni egy valódi production lekérdezést? expand_more
Igen. A formázás és a tömörítés is teljes egészében a böngésződben fut — semmi nem kerül feltöltésre egy szerverre —, így biztonságosan használható valódi tábla- vagy oszlopneveket, illetve olyan értékeket tartalmazó lekérdezésekkel is, amiket nem szeretnél máshova elküldeni.