SQL-formatter

Plak een SQL-statement van één regel dat is gekopieerd uit een logbestand of een ORM; de formatter splitst het op in ingesprongen clausules met een consistente schrijfwijze van sleutelwoorden, regeleinden vóór SELECT, FROM, WHERE en GROUP BY, en uitgelijnde kolommen in de projectie. Ondersteunt de dialecten MySQL, PostgreSQL, SQL Server, Oracle, SQLite en BigQuery; elk heeft licht verschillende sleutelwoorden en gereserveerde woorden.

Hoe het opmaken werkt

  1. 1

    Plak uw SQL

    Een blok op één regel, geminificeerde uitvoer van Hibernate, wat dan ook. Meerdere statements gescheiden door `;` worden allemaal opgemaakt.

  2. 2

    Kies dialect en stijl

    Het dialect bepaalt de lijst met sleutelwoorden; de stijl bepaalt de plaatsing van komma's (vooraan of achteraan), de inspringbreedte en of sleutelwoorden in hoofd- of kleine letters worden geschreven.

  3. 3

    Tokens worden geparseerd, niet met regex vervangen

    Een tokenizer verwerkt strings, commentaar, haakjes en subquery's correct. Stringliterals blijven letterlijk behouden.

  4. 4

    Kopieer de opgemaakte uitvoer

    Gevalideerde SQL: dezelfde semantiek, een nettere lay-out.

Vóór en na

Vóór:

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;

Na (komma vooraan, sleutelwoorden in hoofdletters, inspringing van 2 spaties):

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;

Belangrijke stijlkeuzes

  • Hoofdletters versus kleine letters voor sleutelwoorden. Hoofdletters zijn traditioneel en gemakkelijk te scannen; kleine letters ogen netter in moderne code-editors met syntaxiskleuring.
  • Komma vooraan versus achteraan. Een komma vooraan ( , col) maakt het eenvoudiger om één kolom uit te commentariëren; een komma achteraan (col,) leest natuurlijker in tekst.
  • Plaatsing van komma’s in GROUP BY. Vaak één per regel voor lange clausules, op één regel voor korte.
  • Inspringing van JOIN. ON op de volgende regel (hangende inspringing) versus op dezelfde regel. Lange voorwaarden hebben baat bij hangende inspringing.
  • Subquery’s. Spring de hele subquery in, niet alleen het openingshaakje.

Dialectspecifieke valkuilen

  • MySQL-backticks versus dubbele aanhalingstekens in PostgreSQL voor identifiers.
  • WITH-CTE’s. MS SQL vereist een ; vóór WITH; de formatter handelt dit af.
  • Vensterfuncties. Lange OVER (...)-clausules hebben baat bij PARTITION BY en ORDER BY die over meerdere regels worden afgebroken.
  • BigQuery heeft ARRAY_AGG, STRUCT en tabelsuffixen (*_yyyymmdd) die de tokenizer niet mag breken.
  • Oracle heeft de (+)-syntaxis voor outer joins; de formatter behoudt deze, maar markeert haar als verouderd.

Wat de formatter niet doet

  • Bugs verhelpen. Een ongeldige JOIN blijft ongeldig.
  • SELECT * uitbreiden. Kolomlijsten worden niet uit het schema afgeleid.
  • Query’s optimaliseren. Alleen lay-out, geen uitvoeringsplannen.
  • Subquery’s herschrijven als CTE’s. Dat is een andere kwestie.

Veelgestelde vragen

Nee, het is puur cosmetisch. Spaties, regeleinden en de plaatsing van komma’s verschuiven, maar sleutelwoorden, operatoren, literals en identifiers blijven exact behouden.

Ondersteund: CREATE TABLE, ALTER, CREATE PROCEDURE en triggers. De formatter verwerkt blokconstructies (BEGIN ... END) en regelvoortzettingen binnen procedures.

Dat zou niet mogen; als het toch gebeurt, gaat het waarschijnlijk om een verkeerd dialect. Probeer een ander dialect. Meld aanhoudende fouten; wij behandelen ze als bugs.

Flink SQL en Cassandra CQL lijken op elkaar, maar hebben dialectspecifieke sleutelwoorden die de meeste formatters verminken. Gebruik ze met voorzichtigheid en controleer of de uitvoer werkt.

Gerelateerde tools

Tool beschikbaar in andere talen