SQL 포맷터 · 압축기

SELECT·FROM·WHERE 같은 키워드마다 줄을 바꾸고 괄호 깊이에 맞춰 들여씁니다. 문장의 뜻을 해석하지 않고 생김새만 다듬기 때문에 MySQL·PostgreSQL·Oracle을 가리지 않고, 모르는 문법을 만나도 망가뜨리지 않습니다.

들여쓰기

붙여넣은 코드는 기기를 벗어나지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다.

어디서 줄을 바꾸나

SELECT·FROM·WHERE·GROUP BY·HAVING·ORDER BY·LIMIT 과 JOIN 무리, ON·AND·OR, INSERT INTO·VALUES·UPDATE·SET·DELETE FROM, UNION, WITH, CREATE·ALTER·DROP TABLE 앞에서 줄을 바꿉니다. AND 와 OR 도 제 줄을 가지므로 조건이 여럿이면 한 줄에 하나씩 서고, 긴 WHERE 를 읽다 놓치는 조건이 줄어듭니다. 들여쓰기는 괄호 깊이를 따라갑니다 — 서브쿼리가 한 단 안으로 들어가고, 닫는 괄호가 줄 머리에 오면 그 줄부터 다시 나옵니다.

대문자 전환은 줄을 여는 키워드에만 닿습니다

기본으로 켜져 있는 대문자 전환은 위의 키워드만 바꿉니다. AS·DISTINCT·COUNT 나 열 이름은 적은 대로 남으므로, 결과가 반쯤만 대문자로 보이는 것이 정상입니다. 뜻을 읽지 않는 대가도 여기 있습니다 — set·limit 처럼 키워드와 같은 이름의 열을 따옴표 없이 쓰면 그 자리에서 줄이 바뀝니다. 그런 이름은 큰따옴표나 백틱으로 감싸 두면 문자열로 보고 건너뜁니다.

줄이기가 없애는 것

연이은 공백과 줄바꿈을 한 칸으로 모으고, 괄호·쉼표·세미콜론 둘레의 공백을 걷어내고, /* */ 주석을 지웁니다. -- 주석은 지우되 줄바꿈 하나를 남깁니다 — 줄 끝까지가 주석이라, 통째로 지우면 다음 줄이 앞줄에 달라붙어 다른 문장이 되기 때문입니다. 따옴표 안은 '' 로 적은 따옴표까지 그대로입니다. 로그에 한 줄로 남기거나 주소의 값으로 넘길 때 씁니다.

키워드가 다른 뜻으로 쓰인 자리

뜻을 읽지 않는 대가는 같은 낱말이 다른 뜻으로 쓰인 자리에서 드러납니다. BETWEEN 1 AND 10 의 AND 는 조건을 잇는 것이 아닌데도 그 앞에서 줄이 바뀌고, CREATE OR REPLACE 의 OR, ON DELETE CASCADE 의 ON, WITH ROLLUP 의 WITH 도 마찬가지입니다. 반대로 CASE … WHEN … END 와 값을 나열한 IN (1, 2, 3) 은 줄을 바꾸지 않아 길어도 한 줄에 남습니다.

여러 문장과 주석의 자리

세미콜론으로 이은 여러 문장은 다음 문장의 첫 키워드에서 줄이 바뀌므로 문장 사이는 대개 갈립니다. -- 줄 주석은 원래 붙어 있던 줄 끝에 그대로 남고, /* */ 는 자리표로 뺐다가 돌려놓으므로 안의 줄바꿈까지 보존됩니다 — 다만 제 줄에 홀로 있던 블록 주석은 앞줄 끝에 붙습니다.

자주 묻는 질문

어떤 데이터베이스를 지원하나요?

가리지 않습니다. 문장의 뜻을 읽지 않고 키워드와 괄호만 보고 줄을 나누기 때문입니다. 대신 「이 조인은 이렇게 붙이는 게 낫다」 같은 판단은 하지 못합니다.

문자열 안의 SELECT도 줄을 바꾸나요?

아닙니다. 따옴표 안과 주석은 통째로 들고 갑니다. 그 안의 키워드에 속으면 남의 데이터를 고치는 셈이 되기 때문입니다.

따옴표 안의 키워드도 줄을 바꾸나요?

아닙니다. 문자열 안은 건드리지 않습니다. 'FROM' 처럼 값으로 들어간 낱말까지 줄을 바꾸면 쿼리가 망가집니다.

대문자로 바꿔 주나요?

「키워드 대문자」를 켜 두면 줄을 나누는 자리의 키워드(SELECT·FROM·WHERE·JOIN 같은 것)만 대문자로 바꿉니다. 기본은 켜짐이고, 끄면 적은 그대로 둡니다. 어느 쪽이든 문법이 아니라 관례라 팀 규칙에 맞추면 됩니다 — 열 이름과 문자열 안의 글자는 건드리지 않습니다.

뒤쪽 줄이 전부 한 단 들어가 있습니다.

닫히지 않은 괄호가 있는 것입니다. 들여쓰기는 괄호를 세어 정하므로 여는 괄호 하나가 남으면 그 뒤 줄이 모두 한 단 안에 있게 됩니다. 실행하면 문법 오류가 날 자리이니 오히려 찾기 좋습니다. 문자열과 주석 안의 괄호는 세지 않습니다.

붙여넣은 코드가 서버로 가나요?

가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.