Formattatore SQL

Formatta e compatta query SQL riconoscendo il dialetto: SQL Server, MySQL, PostgreSQL, Oracle e SQLite.

Testo

            

I colori sono negli attributi style, quindi il frammento resta colorato ovunque lo incolli senza portarsi dietro un foglio di stile.

Perché il dialetto cambia il risultato

Sembra un dettaglio estetico e invece decide come il testo viene letto. In SQL Server [Ordine] è un nome di colonna delimitato; in MySQL le parentesi quadre non delimitano nulla e quello stesso testo è qualcos'altro. Il cancelletto apre un commento in MySQL e in nessun altro dialetto. Un formattatore che ignorasse queste differenze non produrrebbe una query brutta: ne produrrebbe una spezzata.

Come vengono disposte le clausole

Le clausole principali aprono una riga alla profondità corrente; le JOIN vanno a capo ma restano allineate alla FROM che le precede; le condizioni unite da AND e OR si incolonnano rientrate, così una WHERE con sei condizioni si legge scorrendo invece che cercando. Le parentesi aumentano il rientro, perché una sottoquery è una query dentro un'altra e la forma dovrebbe dirlo.

Le stringhe non vengono toccate

Il testo dentro gli apici e i commenti a blocco resta esattamente com'è. È la ragione per cui serve un vero tokenizzatore e non una serie di sostituzioni: una parola chiave dentro una stringa è contenuto, non struttura, e riformattarla cambierebbe ciò che la query fa.

Il separatore di batch

GO non è SQL: è un comando del client di SQL Server che segna la fine di un lotto. Per questo viene isolato sulla propria riga e azzera il rientro, invece di essere trattato come una parola chiave qualunque.

Cosa non fa

Formatta, non analizza: non verifica che la query sia valida, non conosce le tue tabelle e non riscrive il codice. Su costrutti molto particolari di un singolo dialetto può disporre le righe in modo diverso da quello che avresti scelto: il significato resta lo stesso, l'aspetto no.

Domande frequenti

Perché cambia come il testo viene interpretato. [Ordine] è un identificatore delimitato in SQL Server ma non in MySQL, e il cancelletto apre un commento solo in MySQL. Scegliendo il dialetto sbagliato la formattazione può spezzare la query.

No. Una query contiene spesso nomi di tabelle e valori di un sistema interno: l'elaborazione avviene nel browser e nulla viene trasmesso.

No, formatta soltanto. Non conosce le tue tabelle e non controlla la sintassi: una query con un errore viene riformattata, non segnalata.

Strumenti correlati