Formatter SQL

Incolla un’istruzione SQL su una sola riga copiata da un log o da un ORM, e il formatter la suddivide in clausole indentate con una maiuscola coerente per le parole chiave, nuove righe prima di SELECT, FROM, WHERE, GROUP BY, e colonne allineate nella proiezione. Supporta i dialetti MySQL, PostgreSQL, SQL Server, Oracle, SQLite e BigQuery, ognuno ha parole chiave e riservate leggermente diverse.

Come funziona la formattazione

  1. 1

    Incolla il tuo SQL

    Blob su una sola riga, output minificato da Hibernate, qualunque cosa. Più istruzioni separate da `;` vengono tutte formattate.

  2. 2

    Scegli dialetto e stile

    Il dialetto controlla l'elenco delle parole chiave; lo stile controlla la posizione delle virgole (iniziale vs finale), la larghezza dell'indentazione e le parole chiave in maiuscolo/minuscolo.

  3. 3

    I token vengono analizzati, non sostituiti tramite regex

    Un tokenizer gestisce correttamente stringhe, commenti, parentesi e sottoquery. Le stringhe letterali vengono preservate letteralmente.

  4. 4

    Copia l'output formattato

    SQL convalidato, stessa semantica, layout più pulito.

Prima e dopo

Prima:

SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;

Dopo (virgola iniziale, parole chiave maiuscole, indentazione di 2 spazi):

SELECT
    u.id
  , u.name
  , COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;

Scelte di stile che contano

  • Parole chiave maiuscole vs minuscole. MAIUSCOLE è tradizionale e facilmente leggibile. Minuscole è più pulita nei moderni editor di codice con evidenziazione della sintassi.
  • Virgole iniziali vs finali. Iniziali ( , col) rendono più facile commentare una singola colonna. Finali (col,) si leggono più naturalmente nel testo.
  • Posizione delle virgole in GROUP BY. Spesso una per riga per clausole lunghe, inline per quelle brevi.
  • Indentazione JOIN. ON sulla riga successiva (indentazione sospesa) vs sulla stessa riga. Condizioni lunghe beneficiano dell’indentazione sospesa.
  • Sottoquery. Indenta l’intera sottoquery, non solo la parentesi di apertura.

Problemi specifici del dialetto

  • Backticks MySQL vs doppi apici PostgreSQL per identificatori.
  • CTE WITH, MS SQL ha un requisito di ; prima di WITH; il formatter lo gestisce.
  • Funzioni di finestra, lunghe clausole OVER (...) beneficiano di PARTITION BY e ORDER BY a capo.
  • BigQuery ha ARRAY_AGG, STRUCT e suffissi di tabella (*_yyyymmdd) che il tokenizer non deve interrompere.
  • Oracle ha la sintassi di outer join (+), il formatter la preserva ma la segnala come legacy.

Cosa non fa il formatter

  • Correggere bug, un JOIN non valido rimane non valido.
  • Espandere SELECT *, le liste di colonne non vengono dedotte dallo schema.
  • Ottimizzare le query, solo layout, non piani di esecuzione.
  • Riscrivere sottoquery come CTE, una preoccupazione diversa.

Domande frequenti

No, è puramente cosmetico. Gli spazi bianchi, le nuove righe e la posizione delle virgole si spostano, ma parole chiave, operatori, letterali e identificatori vengono preservati esattamente.

Supportato, CREATE TABLE, ALTER, CREATE PROCEDURE, trigger. Il formatter gestisce le strutture a blocchi (BEGIN ... END) e le continuazioni di riga all’interno delle procedure.

Non dovrebbe, se lo fa, è probabile che ci sia un disallineamento del dialetto. Prova a cambiare dialetto. Si prega di segnalare i fallimenti persistenti; li trattiamo come bug.

Flink SQL e Cassandra CQL sembrano simili ma hanno parole chiave specifiche del dialetto che i formatter mainstream rovinano. Usa con cautela e verifica che l’output funzioni.

Strumenti correlati

Strumento disponibile in altre lingue