Top Related Projects
A lightweight php class for formatting sql statements. Handles automatic indentation and syntax highlighting.
Database management for VSCode
Quick Overview
SQL Formatter is an open-source library that provides SQL formatting capabilities. It supports multiple SQL dialects and offers a consistent, customizable way to format SQL queries, making them more readable and maintainable.
Pros
- Supports multiple SQL dialects (Standard SQL, MariaDB, MySQL, PostgreSQL, etc.)
- Highly customizable with various configuration options
- Available for multiple platforms (JavaScript, CLI, web)
- Actively maintained with regular updates
Cons
- Limited support for some less common SQL dialects
- May not handle extremely complex or non-standard SQL constructs perfectly
- Performance can be slower for very large SQL queries
- Documentation could be more comprehensive for advanced use cases
Code Examples
Formatting a simple SQL query:
import { format } from "sql-formatter";
const sql = "SELECT * FROM users WHERE status = 'active'";
console.log(format(sql));
Formatting with custom configuration:
import { format } from "sql-formatter";
const sql = "SELECT id, name, email FROM users WHERE status = 'active' AND age > 18";
const result = format(sql, {
language: "postgresql",
uppercase: true,
indentStyle: "tabularLeft",
});
console.log(result);
Formatting with custom keywords:
import { format } from "sql-formatter";
const sql = "SELECT @var1, @var2, COUNT(*) FROM my_table";
const result = format(sql, {
paramTypes: {
custom: [{ regex: String.raw`@\w+` }],
},
});
console.log(result);
Getting Started
To use SQL Formatter in your project, follow these steps:
-
Install the package:
npm install sql-formatter
-
Import and use in your JavaScript/TypeScript code:
import { format } from "sql-formatter"; const sql = "SELECT * FROM users WHERE status = 'active'"; const formattedSql = format(sql); console.log(formattedSql);
For more advanced usage and configuration options, refer to the project's documentation on GitHub.
Competitor Comparisons
A lightweight php class for formatting sql statements. Handles automatic indentation and syntax highlighting.
Pros of sql-formatter
- Simpler and more lightweight implementation
- Easier to integrate into existing projects
- Supports basic SQL formatting with minimal configuration
Cons of sql-formatter
- Limited support for different SQL dialects
- Less actively maintained (last update in 2014)
- Fewer formatting options and customization features
Code Comparison
sql-formatter:
var sqlFormatter = require('sql-formatter');
console.log(sqlFormatter.format('SELECT * FROM table'));
sql-formatter-org:
import { format } from 'sql-formatter';
console.log(format('SELECT * FROM table', {
language: 'mysql',
uppercase: true
}));
Key Differences
- sql-formatter-org offers more comprehensive dialect support, including MySQL, PostgreSQL, and others.
- sql-formatter-org provides more formatting options and customization.
- sql-formatter-org is actively maintained and regularly updated.
- sql-formatter has a simpler API but lacks advanced features.
- sql-formatter-org has better documentation and community support.
Conclusion
While sql-formatter offers a straightforward solution for basic SQL formatting, sql-formatter-org provides a more robust, feature-rich, and actively maintained library. For projects requiring advanced formatting options or support for multiple SQL dialects, sql-formatter-org is the recommended choice. However, for simpler use cases or legacy projects, sql-formatter may still be suitable.
Database management for VSCode
Pros of SQLTools
- Comprehensive SQL development environment within VS Code
- Supports multiple database connections and query execution
- Includes features like IntelliSense, snippets, and result visualization
Cons of SQLTools
- More complex setup and configuration required
- Larger extension size and potential performance impact on VS Code
- May include unnecessary features for users who only need formatting
Code Comparison
sql-formatter:
import { format } from "sql-formatter";
const formattedSQL = format("SELECT * FROM table");
console.log(formattedSQL);
SQLTools:
const vscode = require('vscode');
const sqltools = vscode.extensions.getExtension('mtxr.sqltools');
sqltools.activate().then(() => {
// Use SQLTools features
});
Summary
sql-formatter is a lightweight, focused SQL formatting library, while SQLTools is a comprehensive SQL development extension for VS Code. sql-formatter is easier to integrate into various projects and has a simpler API, making it ideal for quick formatting tasks. SQLTools offers a full-featured SQL environment within VS Code, including database connections and query execution, but comes with a more complex setup and potentially unnecessary features for users who only need formatting capabilities.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
SQL Formatter
SQL Formatter is a JavaScript library for pretty-printing SQL queries.
It started as a port of a PHP Library, but has since considerably diverged.
It supports various SQL dialects: 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 (and Presto). See language 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 at comment the culprit out (at least until the issue gets fixed 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
tbl
WHERE
foo = 'bar'
For more details see docs of params option.
Usage from command line
The CLI tool will be installed under sql-formatter
and may be invoked via 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
By default, the tool takes queries from stdin and processes them to stdout but
one can also name an input file name or use the --output
option.
echo 'select * from tbl where id = 3' | sql-formatter
select
*
from
tbl
where
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
language
the SQL dialect to use (when usingformat()
).dialect
the SQL dialect to use (when usingformatDialect()
since version 12).tabWidth
amount of indentation to use.useTabs
to use tabs for indentation.keywordCase
uppercases or lowercases keywords.dataTypeCase
uppercases or lowercases data types.functionCase
uppercases or lowercases function names.identifierCase
uppercases or lowercases identifiers. (experimental!)indentStyle
defines overall indentation style. (deprecated!)logicalOperatorNewline
newline before or after boolean operator (AND, OR, XOR).expressionWidth
maximum number of characters in parenthesized expressions to be kept on single line.linesBetweenQueries
how many newlines to insert between queries.denseOperators
packs operators densely without spaces.newlineBeforeSemicolon
places semicolon on separate line.params
collection of values for placeholder replacement.paramTypes
specifies parameter placeholders types to support.
Usage without NPM
If you don't use a module bundler, clone the repository, run npm install
and grab a file from /dist
directory to use inside a <script>
tag.
This makes SQL Formatter available as a global variable window.sqlFormatter
.
Usage in editors
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: SQLFlavourOverride.
Module parse failed: Unexpected token
This typically happens when bundling an appication with Webpack.
The cause is that Babel (through babel-loader
) is not configured
to 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
The Prettier SQL VSCode extension is no more maintained by its author.
Please use the official SQL Formatter VSCode extension 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 workaround is to use paramTypes config option to treat these occurances 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 because of fundamental problems in its arhictecture.
- 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 see CONTRIBUTING.md
License
Top Related Projects
A lightweight php class for formatting sql statements. Handles automatic indentation and syntax highlighting.
Database management for VSCode
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot