SQL Formatter는 SQL 쿼리를 예쁘게 인쇄하기 위한 JavaScript 라이브러리입니다.
PHP 라이브러리의 포트로 시작되었지만 이후 상당히 다양해졌습니다.
GCP BigQuery, IBM DB2, Apache Hive, MariaDB, MySQL, TiDB, Couchbase N1QL, Oracle PL/SQL, PostgreSQL, Amazon Redshift, SingleStoreDB, Snowflake, Spark, SQL Server Transact-SQL, Trino(및 Presto) 등 다양한 SQL 방언을 지원합니다. ). 자세한 내용은 언어 옵션 문서를 참조하세요.
다음은 지원하지 않습니다:
;
.→ 데모를 사용해 보세요.
NPM에서 최신 버전을 받으세요:
npm install sql-formatter
원사로도 사용 가능:
yarn add sql-formatter
import { format } from 'sql-formatter' ;
console . log ( format ( 'SELECT * FROM tbl' , { language : 'mysql' } ) ) ;
그러면 다음이 출력됩니다.
SELECT
*
FROM
tbl
구성 옵션을 전달할 수도 있습니다.
format ( 'SELECT * FROM tbl' , {
language : 'spark' ,
tabWidth : 2 ,
keywordCase : 'upper' ,
linesBetweenQueries : 2 ,
} ) ;
비활성화/활성화 주석을 사용하여 SQL 섹션에 대한 포맷터를 비활성화할 수 있습니다.
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT * FROM tbl2;
이는 다음을 생성합니다.
/* sql-formatter-disable */
SELECT * FROM tbl1;
/* sql-formatter-enable */
SELECT
*
FROM
tbl2;
포맷터는 이러한 주석 사이의 코드를 구문 분석하지도 않습니다. 따라서 SQL Formatter가 충돌하는 SQL이 있는 경우에는 (적어도 SQL Formatter에서 문제가 해결될 때까지) 범인을 주석 처리할 수 있습니다.
형식 지정 외에도 이 라이브러리는 준비된 SQL 문에서 자리 표시자 교체를 수행할 수도 있습니다.
format ( 'SELECT * FROM tbl WHERE foo = ?' , {
params : [ "'bar'" ] ,
} ) ;
결과:
SELECT
*
FROM
tbl
WHERE
foo = ' bar '
자세한 내용은 params 옵션 문서를 참조하세요.
CLI 도구는 sql-formatter
아래에 설치되며 npx sql-formatter
통해 호출될 수 있습니다.
sql-formatter -h
usage: sql-formatter [-h] [-o OUTPUT]
[-l {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,transactsql,trino,tsql}] [-c CONFIG] [--version] [FILE]
SQL Formatter
positional arguments:
FILE Input SQL file (defaults to stdin)
optional arguments:
-h, --help show this help message and exit
-o, --output OUTPUT
File to write SQL output (defaults to stdout)
--fix Update the file in-place
-l, --language {bigquery,db2,db2i,hive,mariadb,mysql,n1ql,plsql,postgresql,redshift,singlestoredb,snowflake,spark,sql,sqlite,tidb,trino,tsql}
SQL dialect (defaults to basic sql)
-c, --config CONFIG
Path to config JSON file or json string (will find a file named '.sql-formatter.json' or use default configs if unspecified)
--version show program's version number and exit
기본적으로 이 도구는 stdin에서 쿼리를 가져와 stdout으로 처리하지만 입력 파일 이름을 지정하거나 --output
옵션을 사용할 수도 있습니다.
echo ' select * from tbl where id = 3 ' | sql-formatter
select
*
from
tbl
where
id = 3
또한 이 도구는 현재 또는 상위 디렉터리에 있는 .sql-formatter.json이라는 JSON 구성 파일을 허용하거나 다음 형식의 --config
옵션을 허용합니다.
{
"language" : " spark " ,
"tabWidth" : 2 ,
"keywordCase" : " upper " ,
"linesBetweenQueries" : 2
}
모든 필드는 선택 사항이며 지정되지 않은 모든 필드는 기본값으로 채워집니다.
language
사용할 SQL 언어( format()
사용 시).dialect
(버전 12부터 formatDialect()
사용할 때).tabWidth
크기입니다.useTabs
사용하세요.keywordCase
Case 대문자 또는 소문자 키워드입니다.dataTypeCase
대문자 또는 소문자 데이터 유형입니다.functionCase
함수 이름을 대문자 또는 소문자로 지정합니다.identifierCase
대문자 또는 소문자 식별자입니다. ( 실험적! )indentStyle
전반적인 들여쓰기 스타일을 정의합니다. ( 더 이상 사용되지 않습니다! )logicalOperatorNewline
부울 연산자(AND, OR, XOR) 앞이나 뒤의 개행 문자입니다.expressionWidth
한 줄에 유지될 괄호로 묶인 표현식의 최대 문자 수입니다.linesBetweenQueries
쿼리 사이에 삽입할 개행 수를 쿼리합니다.denseOperators
연산자를 공백 없이 조밀하게 묶습니다.newlineBeforeSemicolon
세미콜론을 별도의 줄에 배치합니다.params
자리 표시자 교체를 위한 값 컬렉션입니다.paramTypes
지원할 매개변수 자리 표시자 유형을 지정합니다. 모듈 번들러를 사용하지 않는 경우 저장소를 복제하고 npm install
실행한 후 /dist
디렉터리에서 파일을 가져와 <script>
태그 내에서 사용하세요. 이렇게 하면 SQL Formatter를 전역 변수 window.sqlFormatter
로 사용할 수 있습니다.
가장 일반적인 원인은 SQL 언어를 지정하지 않았기 때문입니다. 간단히 라이브러리를 호출하는 대신:
format ( 'select [col] from tbl' ) ;
// Throws: Parse error: Unexpected "[col] from" at line 1 column 8
다음과 같이 적절한 방언을 선택하세요.
format ( 'select [col] from tbl' , { language : 'transactsql' } ) ;
또는 VSCode 확장을 사용하는 경우: 설정 -> SQL-Formatter-VSCode: SQLFlavourOverride.
이는 일반적으로 Webpack으로 애플리케이션을 번들링할 때 발생합니다. 원인은 Babel( babel-loader
통해)이 클래스 속성 구문을 지원하도록 구성되지 않았기 때문입니다.
| export default class ExpressionFormatter {
> inline = false;
이 구문은 모든 주요 브라우저(이전 IE 제외)에서 널리 지원되며 이에 대한 지원은 기본 @babel/preset-env
에 포함됩니다.
가능한 수정 사항:
@babel/preset-env
로 전환@babel/plugin-proposal-class-properties
포함Prettier SQL VSCode 확장은 작성자가 더 이상 유지 관리하지 않습니다.
SQL Formatter 라이브러리에서 최신 수정 사항을 받으려면 공식 SQL Formatter VSCode 확장을 사용하세요.
예를 들어 다음과 같은 SQL이 있을 수 있습니다.
SELECT {col1}, {col2} FROM {tablename}
템플릿 작성은 SQL Formatter에서 직접 지원되지 않지만 해결 방법은 paramTypes 구성 옵션을 사용하여 이러한 템플릿 구성 발생을 준비된 문 매개변수 자리 표시자로 처리하는 것입니다.
format ( 'SELECT {col1}, {col2} FROM {tablename};' , {
paramTypes : { custom : [ { regex : String . raw `{w+}` } ] } ,
} ) ;
이는 가능한 모든 템플릿 구성에 작동하지 않지만 가장 일반적인 사용 사례를 해결해야 합니다.
이 포맷터의 개발은 현재 유지 관리 모드에 있습니다. 가능한 경우 버그가 수정되지만 새로운 기능이 추가되지는 않을 것입니다.
나는 새로운 SQL 형식 지정 도구인 prettier-plugin-sql-cst를 시작했습니다.
SQL 자동 서식 지정을 한 단계 더 발전시키고 싶다면 시도해 보세요.
CONTRIBUTING.md를 참조하세요.
MIT