Šta formater radi
- Klauzule (SELECT, FROM, WHERE, GROUP BY, ORDER BY, SET, VALUES, RETURNING…) svaka počinje red; njihov sadržaj je uvučen ispod, po jedna stavka u redu za liste.
- Join-ovi počinju red na nivou klauzule; ON uslov ostaje uz join, a dalji AND/OR članovi se uvlače ispod njega.
- Podupiti i CTE otvaraju blok u zagradama čiji je sadržaj uvučen jedan nivo; kratke liste u zagradama (
IN ('a', 'b'), argumenti funkcija, torke) ostaju u jednom redu. - CASE izrazi stavljaju svaki WHEN i ELSE u svoj red i poravnavaju END sa CASE.
- Window funkcije drže
OVER (PARTITION BY … ORDER BY …)u jednom redu kada staje. - CREATE TABLE ispisuje jednu definiciju kolone po redu; INSERT … VALUES ispisuje jednu torku po redu.
- Naredbe su razdvojene praznim redom posle svake tačke i zareza.
Šta nikada ne dira
String literali ('it''s', E'\n', $$ … $$), identifikatori pod navodnicima ("Ime", `ime`, [ime]), komentari (--, #, /* */) i parametri (?, $1, :ime, @var) kopiraju se bajt po bajt. Menjaju se samo beline i veličina slova ključnih reči, pa je formatirani upit isti upit. Promena veličine slova važi za SQL ključne reči i standardne funkcije (COUNT, COALESCE, NOW…), a ne za vaše identifikatore: my_table ostaje my_table čak i u režimu velikih slova.
Završni ili vodeći zarezi
Završni zarezi (a, na kraju reda) su ono što proizvodi većina stilskih vodiča i ORM-ova. Vodeći zarezi (, b na početku) omogućavaju da zakomentarišete bilo koji red select liste osim prvog bez kvarenja upita, zbog čega su popularni u analitičkom SQL-u. Izaberite ono što vaš tim brže čita; formater konvertuje između ta dva stila.
Minifikacija
Minifikacija sažima sve u jedan red sa jednostrukim razmacima, pretvarajući linijske komentare u blok komentare da bi preživeli. Koristite je za log linije, URL parametre ili lepljenje upita u chat bez gubljenja prelaza u novi red.
Dijalekti
Tokenizator razume PostgreSQL (:: kastovanje, $1 parametre, dollar quoting, ->> JSON operatore, FILTER, RETURNING, ON CONFLICT), MySQL/MariaDB (identifikatore u backtick-ovima, # komentare, STRAIGHT_JOIN, ON DUPLICATE KEY UPDATE, LIMIT x OFFSET y), SQLite i SQL Server ([uglaste] identifikatore, @promenljive, TOP, CROSS APPLY). Ne validira SQL; upit sa sintaksnom greškom se formatira koliko je moguće da biste ipak mogli da ga pročitate.
Formatiranje SQL-a drugde
# PostgreSQL: pg_format (pgFormatter, Perl) pg_format -s 2 -u 1 query.sql # bilo koji dijalekt: sqlfluff (Python), radi i lint sqlfluff fix --dialect postgres query.sql # JavaScript: sql-formatter npx sql-formatter -l postgresql query.sql
Pitanja
Da li menja ono što upit radi?
Ne. Menjaju se samo beline i veličina slova ključnih reči; literali, identifikatori, komentari i parametri se kopiraju nepromenjeni. Promena veličine slova važi za ključne reči i nazive standardnih funkcija, koji su neosetljivi na veličinu slova u svakom SQL dijalektu.
Zašto je podupit u više redova iako je kratak?
Svaka grupa u zagradama koja sadrži ključnu reč klauzule (SELECT, FROM, WHERE…) ispisuje se kao blok, jer to čini ugnežđene upite čitljivim. Argumenti funkcija, IN liste i VALUES torke ostaju u jednom redu kada su kratki.
Može li da formatira PL/pgSQL funkcije ili uskladištene procedure?
Telo funkcije u $$ … $$ je za formater string literal i ostavlja se kakvo jeste. Naredba CREATE FUNCTION oko njega se formatira. Potpuno formatiranje proceduralnog jezika je van opsega.
Da li se moj SQL šalje na server?
Ne. Stranica radi u potpunosti u vašem pregledaču, što je i poenta za upite koji sadrže produkcione nazive tabela ili literale.
Šta je sa izlazom EXPLAIN-a?
To je drugi alat: nalepite plan u EXPLAIN vizuelizator, koji crta stablo i označava pogrešne procene.