Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A whitespace formatter for different query languages

License

NotificationsYou must be signed in to change notification settings

sql-formatter-org/sql-formatter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SQL FormatterNPM versionBuild statusCoverage Status

SQL Formatter is a JavaScript library for pretty-printing SQL queries.

It started as a port of aPHP Library, but has since considerably diverged.

It supports various SQL dialects:GCP BigQuery, IBM DB2, DuckDB, Apache Hive, MariaDB, MySQL, TiDB, Couchbase N1QL, Oracle PL/SQL, PostgreSQL, Amazon Redshift, SingleStoreDB, Snowflake, Spark, SQL Server Transact-SQL, Trino (and Presto).Seelanguage option docs for more details.

It does not support:

  • Stored procedures.
  • Changing of the delimiter type to something else than;.

Try the demo.

Install

Get the latest version from NPM:

npm install sql-formatter

Also available with yarn:

yarn add sql-formatter

Usage

Usage as library

import{format}from'sql-formatter';console.log(format('SELECT * FROM tbl',{language:'mysql'}));

This will output:

SELECT*FROM  tbl

You can also pass in configuration options:

format('SELECT * FROM tbl',{language:'spark',tabWidth:2,keywordCase:'upper',linesBetweenQueries:2,});

Disabling the formatter

You can disable the formatter for a section of SQL by surrounding it with disable/enable comments:

/* sql-formatter-disable*/SELECT*FROM tbl1;/* sql-formatter-enable*/SELECT*FROM tbl2;

which produces:

/* sql-formatter-disable*/SELECT*FROM tbl1;/* sql-formatter-enable*/SELECT*FROM  tbl2;

The formatter doesn't even parse the code between these comments.So in case there's some SQL that happens to crash SQL Formatter,you can comment the culprit out (at least until the issue getsfixed in SQL Formatter).

Placeholders replacement

In addition to formatting, this library can also perform placeholder replacement in prepared SQL statements:

format('SELECT * FROM tbl WHERE foo = ?',{params:["'bar'"],});

Results in:

SELECT*FROM  tblWHERE  foo='bar'

For more details seedocs of params option.

Usage from command line

The CLI tool will be installed undersql-formatterand may be invoked vianpx 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 Formatterpositional 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

By default, the tool takes queries from stdin and processes them to stdout butone can also name an input file name or use the--output option.

echo'select * from tbl where id = 3'| sql-formatter
select*from  tblwhere  id=3

The tool also accepts a JSON config file named .sql-formatter.json in the current or any parent directory, or with the--config option that takes this form:

{"language":"spark","tabWidth":2,"keywordCase":"upper","linesBetweenQueries":2}

All fields are optional and all fields that are not specified will be filled with their default values.

Configuration options

Usage without NPM

If you don't use a module bundler, clone the repository, runnpm install and grab a file from/dist directory to use inside a<script> tag.This makes SQL Formatter available as a global variablewindow.sqlFormatter.

Usage in editors

We provideJSON Schema for.sql-formatter.json configuration file, enabling autocompletion and IntelliSense support in editors.

Usage as ESLint plugin

Frequently Asked Questions

Parse error: Unexpected ... at line ...

The most common cause is that you haven't specified an SQL dialect.Instead of calling the library simply:

format('select [col] from tbl');// Throws: Parse error: Unexpected "[col] from" at line 1 column 8

pick the proper dialect, like:

format('select [col] from tbl',{language:'transactsql'});

Or when using the VSCode extension: Settings -> SQL-Formatter-VSCode -> Dialect.

Module parse failed: Unexpected token

This typically happens when bundling an application with Webpack.The cause is that Babel (throughbabel-loader) is not configuredto support class properties syntax:

    | export default class ExpressionFormatter {    >   inline = false;

This syntax is widely supported in all major browsers (except old IE)and support for it is included to the default@babel/preset-env.

Possible fixes:

  • Update to newer Babel / Webpack
  • Switch to@babel/preset-env
  • Include plugin@babel/plugin-proposal-class-properties

I'm having a problem with Prettier SQL VSCode extension

ThePrettier SQL VSCodeextension is no more maintained by its author.

Please use the officialSQL Formatter VSCodeextension to get the latest fixes from SQL Formatter library.

My SQL contains templating syntax which SQL Formatter fails to parse

For example, you might have an SQL like:

SELECT {col1}, {col2}FROM {tablename}

While templating is not directly supported by SQL Formatter, the workaroundis to useparamTypes config option to treat theseoccurrences of templating constructs as prepared-statement parameter-placeholders:

format('SELECT {col1}, {col2} FROM {tablename};',{paramTypes:{custom:[{regex:String.raw`\{\w+\}`}]},});

This won't work for all possible templating constructs,but should solve the most common use cases.

The future

The development of this formatter is currently in maintenance mode.Bugs will get fixed if feasible, but new features will likely not be added.

I have started a new SQL formatting tool:prettier-plugin-sql-cst.

  • It solves several problems which can't be fixed in SQL Formatter becauseof fundamental problems in its architecture.
  • It makes use of the Prettier layout algorithm,doing a better job of splitting long expressions to multiple lines.
  • It takes much more opinionated approach to SQL formatting,giving only a very limited set of options to adjust the code style.
  • It already has full support for SQLite and BigQuery syntax.It should work for the most common SQL code in various other dialects.

Give it a try if you'd like to take your SQL auto-formatting to the next level.

Contributing

Please seeCONTRIBUTING.md

License

MIT


[8]ページ先頭

©2009-2025 Movatter.jp