Opción Espacios de sangría
Espacios de sangría define cuántos espacios agrega el formateador por cada nivel de anidamiento. Esta página muestra qué cambia entre 2, 4 y 0, qué pasa con los caracteres de tabulación de tu entrada y cómo elegir un valor que tu equipo no tenga que volver a discutir.
Qué hace la opción
El formateador reconstruye desde cero la disposición de cada sentencia, así que la sangría que escribiste no se conserva. Lo que controlas es el ancho de un paso de sangría. Ese paso se aplica en todos los lugares donde la disposición anida algo:
- los elementos del select a partir del segundo, y los elementos de continuación de
GROUP BY,ORDER BY,SETyRETURNING; - los joins debajo de
FROM, con la condiciónONun paso más adentro; - el cuerpo de una subconsulta o CTE dentro de sus paréntesis, y la especificación de ventana después de
OVER (; - los argumentos de una función cuando la llamada se divide en varias líneas.
Las palabras clave de cláusula, como SELECT, FROM y WHERE, empiezan en la
sangría del bloque al que pertenecen, y las líneas AND/OR se alinean con su
WHERE. Eso no cambia con esta opción; solo cambia el tamaño de cada paso.
Valores posibles y valor predeterminado
| Valor | Resultado |
|---|---|
4 (predeterminado) | Cada nivel de anidamiento agrega cuatro espacios. |
2 | Una disposición más compacta; el anidamiento profundo ocupa la mitad del ancho. |
0 | Sin ninguna sangría; todas las líneas empiezan en la columna 0. |
| Cualquier otro número hasta 99 | El formulario lo acepta, pero rara vez es útil por encima de 8. |
La misma consulta con el valor predeterminado de 4 y con 2. Solo cambian los espacios al inicio de cada línea; los saltos de línea son idénticos.
select c.name, sum(o.total) as revenue from customers c join orders o on o.customer_id = c.id where o.status = 'PAID' and c.id in (select customer_id from loyalty_members where tier = 'GOLD') group by c.name order by revenue descSELECT c.name,
SUM(o.total) AS revenue
FROM customers c
JOIN orders o
ON o.customer_id = c.id
WHERE o.status = 'PAID'
AND c.id IN (
SELECT customer_id
FROM loyalty_members
WHERE tier = 'GOLD'
)
GROUP BY c.name
ORDER BY revenue DESCSELECT c.name,
SUM(o.total) AS revenue
FROM customers c
JOIN orders o
ON o.customer_id = c.id
WHERE o.status = 'PAID'
AND c.id IN (
SELECT customer_id
FROM loyalty_members
WHERE tier = 'GOLD'
)
GROUP BY c.name
ORDER BY revenue DESCDos espacios o cuatro
Ambos son comunes, y la mayoría de las guías de estilo de SQL publicadas elige uno de los dos y usa espacios en lugar de tabulaciones. Las diferencias prácticas son pequeñas, pero reales:
- Cuatro espacios hacen que cada nivel se vea de inmediato. En el ejemplo anterior, la línea
ONqueda ocho columnas adentro, claramente subordinada a su join, y el cuerpo de la subconsulta se distingue delWHEREexterno. Quienes vienen de Java, C# o Python ya están acostumbrados a leer código con este ancho. - Dos espacios mantienen legibles las consultas muy anidadas en pantallas angostas y en diffs lado a lado. Una subconsulta tres niveles más adentro empieza en la columna 6 en lugar de la 12, lo que deja más espacio antes de que el límite de cantidad máxima de columnas parta una expresión larga. Los equipos que incrustan SQL en YAML, modelos de dbt o cadenas de la aplicación suelen preferirlo, porque el archivo que lo contiene ya tiene su propia sangría.
La elección importa mucho menos que mantenerla. Cambiar el ancho de sangría de un archivo existente reescribe los espacios iniciales de casi todas sus líneas, lo que entierra los cambios reales en una revisión de código. Si necesitas cambiarlo, hazlo en un commit que no contenga nada más, como se describe en formateo para revisión de código y control de versiones.
Qué pasa con los caracteres de tabulación
Cada carácter de tabulación de la entrada, fuera de los literales de cadena y de los identificadores entre comillas, se reemplaza por la cantidad de espacios configurada antes de armar la disposición de la consulta. En el SQL en sí esto no se nota, porque la disposición se reconstruye de todos modos. Donde sí lo notas es dentro de los comentarios de varias líneas: una línea de comentario con una tabulación de sangría termina con exactamente un paso de sangría, así que el comentario conserva su forma y queda alineado con el código que lo rodea.
/*
Customers created in the last 30 days
owner: data team
*/
select id,
email,
created_at
from customers
where created_at >= current_date - 30/*
Customers created in the last 30 days
owner: data team
*/
SELECT id,
email,
created_at
FROM customers
WHERE created_at >= CURRENT_DATE - 30/*
Customers created in the last 30 days
owner: data team
*/
SELECT id,
email,
created_at
FROM customers
WHERE created_at >= CURRENT_DATE - 30Las tabulaciones dentro de literales de cadena y de identificadores entre comillas son
datos, así que se conservan exactamente como se escribieron. Las tabulaciones dentro de comentarios no son datos
y se reemplazan como cualquier otra. Si un valor debe contener una tabulación, igual vale la pena considerar una
función de caracteres como CHR(9) en PostgreSQL y Oracle o CHAR(9) en SQL Server y
MySQL: en una revisión de código se ve mucho mejor que una tabulación invisible.
Sangría 0
Con 0, el formateador sigue poniendo cada cláusula, elemento del select, join y condición en su propia línea, y sigue aplicando Palabras clave y Comas. Simplemente deja de aplicar sangría:
SELECT c.name,
SUM(o.total) AS revenue
FROM customers c
JOIN orders o
ON o.customer_id = c.id
WHERE o.status = 'PAID'
AND c.id IN (
SELECT customer_id
FROM loyalty_members
WHERE tier = 'GOLD'
)
GROUP BY c.name
ORDER BY revenue DESCEl resultado es fácil de procesar línea por línea, pero la estructura desaparece: lo único que indica dónde empieza y termina la subconsulta es su par de paréntesis. Usa 0 cuando otra herramienta vuelva a aplicar sangría a la salida después, o cuando solo quieras un elemento por línea para una comparación rápida de texto. Para SQL que van a leer personas, 2 o 4 es la mejor opción.
Cómo interactúa con otras opciones
- Cantidad máxima de columnas. La sangría cuenta para el ancho de la línea. Con una sangría mayor, las líneas anidadas llegan antes al límite y se parten antes. Las líneas de continuación siempre reciben 2 espacios adicionales, sin importar la sangría que elijas.
- Comas. Con comas al inicio, cada coma queda en la columna de sangría, con el elemento justo después, así que el ancho de sangría decide a qué distancia del margen izquierdo queda la columna de comas.
- Paréntesis en nueva línea. Cuando el paréntesis de apertura va en su propia línea, el bloque interior sigue llevando un paso de sangría.
Cómo elegir un valor
Mantén el valor predeterminado de 4 a menos que tengas un motivo para cambiarlo: es el más fácil de leer y no necesita explicación en una guía de estilo. Elige 2 si tus consultas tienen mucho anidamiento, si el SQL vive dentro de archivos que ya tienen sangría o si tu equipo revisa diffs lado a lado en laptops. Elijas lo que elijas, anótalo junto a las demás reglas de tu guía de estilo de SQL y usa el mismo valor cada vez que ejecutes el formateador, para que el formato nunca aparezca como un cambio por sí solo.