Skip to content

Commit

Permalink
update some documentation and call it 3.0.0 for real
Browse files Browse the repository at this point in the history
  • Loading branch information
gwax committed Jul 13, 2020
1 parent dafe235 commit ea9e133
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 26 deletions.
78 changes: 66 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# SQL Formatter [![NPM version](https://img.shields.io/npm/v/@gwax/sql-formatter.svg)](https://npmjs.com/package/@gwax/sql-formatter) [![Build Status](https://travis-ci.com/gwax/sql-formatter.svg?branch=master)](https://travis-ci.com/gwax/sql-formatter) [![Coverage Status](https://coveralls.io/repos/github/gwax/sql-formatter/badge.svg?branch=master)](https://coveralls.io/github/gwax/sql-formatter?branch=master)

**SQL Formatter** is a JavaScript library for pretty-printing SQL queries.
It started as a Javascript port of a [PHP Library][], but has diverged
considerably, and been forked/joined multiple times in the past. The current
formatter (@gwax/sql-formatter) forked from [zeroturnaround/sql-formatter](https://github.com/zeroturnaround/sql-formatter)
**SQL Formatter** is a JavaScript library and command line tool for
pretty-printing SQL queries. It started as a Javascript port of a
[PHP Library][], but has diverged considerably, and been forked/joined multiple
times in the past. The current formatter (@gwax/sql-formatter) forked from
[zeroturnaround/sql-formatter](https://github.com/zeroturnaround/sql-formatter)
with code consolidated from [kufii/sql-formatter-plus](https://github.com/kufii/sql-formatter-plus)
and a number of other forks scattered around GitHub.

Expand All @@ -16,16 +17,66 @@ SQL Formatter supports [Standard SQL][], [Couchbase N1QL][], [IBM DB2][],

Get the latest version from NPM:

```sh
npm install @gwax/sql-formatter
```
npm install sql-formatter

## Command Line Interface

The CLI tool will be installed under `@gwax/sql-formatter` and under
`sql-formatter` and may be invoked via `npx @gwax/sql-formatter`:

```sh
npx @gwax/sql-formatter -h
```

```
usage: sql-formatter [-h] [-v] [-f FILE] [-o OUTPUT]
[-l {db2,n1ql,pl/sql,plsql,redshift,spark,sql}]
[-i N | -t] [-u] [--lines-between-queries N]
SQL Formatter
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
-f FILE, --file FILE Input SQL file (defaults to stdin)
-o OUTPUT, --output OUTPUT
File to write SQL output (defaults to stdout)
-l {db2,n1ql,pl/sql,plsql,redshift,spark,sql}, --langauge {db2,n1ql,pl/sql,plsql,redshift,spark,sql}
SQL Formatter dialect (defaults to basic sql)
-i N, --indent N Number of spaces to indent query blocks (defaults to
2)
-t, --tab-indent Indent query blocks with tabs instead of spaces
-u, --uppercase Capitalize language keywords
--lines-between-queries N
How many newlines to insert between queries
(separated by ";")
```

By default, the tool takes queries from stdin and processes them to stdout but
the `-f`/`--file` and `-o`/`--output` flags can be used to alter this behavior.

```sh
echo 'select * from tbl where id = 3' | npx @gwax/sql-formatter -u
```

```sql
SELECT
*
FROM
tbl
WHERE
id = 3
```

## Usage

```js
import sqlFormatter from '@gwax/sql-formatter';

console.log(sqlFormatter.format('SELECT * FROM table1'));
console.log(sqlFormatter.format('SELECT * FROM tbl'));
```

This will output:
Expand All @@ -34,15 +85,17 @@ This will output:
SELECT
*
FROM
table1
tbl
```

You can also pass in configuration options:

```js
sqlFormatter.format('SELECT *', {
language: 'n1ql', // Defaults to "sql"
sqlFormatter.format('SELECT * FROM tbl', {
language: 'spark', // Defaults to "sql"
indent: ' ', // Defaults to two spaces
uppercase: bool, // Defaults to false
linesBetweenQueries: 2, // Defaults to 1
});
```

Expand Down Expand Up @@ -87,9 +140,10 @@ This makes SQL Formatter available as a global variable `window.sqlFormatter`.

## Contributing

```bash
# run linter and tests
$ npm run check
Make sure to run all checks:

```sh
npm run check
```

...and you're ready to poke us with a pull request.
Expand Down
43 changes: 30 additions & 13 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ <h1>SQL Formatter</h1>
</div>

<div class="select-wrapper">
Format
<label for="lanugage">Format</label>
<select id="language">
<option value="sql">
SQL
Expand All @@ -122,43 +122,60 @@ <h1>SQL Formatter</h1>
Spark
</option>
</select>
|
<label for="uppercae">Uppercase</label>
<input type="checkbox" id="uppercase" name="uppercase" checked />
</div>
</header>
<main>
<section class="input">
<textarea id="input" autofocus="true" wrap="off">
SELECT supplier_name, city FROM suppliers&#10;WHERE supplier_id > 500&#10;ORDER BY supplier_name ASC, city DESC;</textarea
select supplier_name,city from
(select * from suppliers join addresses on suppliers.address_id=addresses.id)
as suppliers
where supplier_id>500
order by supplier_name asc,city desc;
</textarea
>
</section>
<section class="output">
<textarea id="output" readonly="true" wrap="off"></textarea>
</section>
</main>

<script
type="text/javascript"
src="https://unpkg.com/@gwax/sql-formatter@latest/dist/sql-formatter.min.js"
></script>
<!-- Load from local (for development) -->
<script type="text/javascript" src="dist/sql-formatter.js"></script>
<!-- Fallback to reading from npm -->
<script>
(function () {
window.sqlFormatter ||
document.write(
unescape(
'%3Cscript type="text/javascript" src="https://unpkg.com/@gwax/sql-formatter@latest/dist/sql-formatter.min.js"%3E%3C/script%3E'
)
);
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
let language = document.getElementById('language');
let uppercase = document.getElementById('uppercase');
let input = document.getElementById('input');
let output = document.getElementById('output');

input.addEventListener('input', format);
language.addEventListener('change', format);

function format() {
console.time('formatting');

output.value = sqlFormatter.format(input.value, {
language: language.options[language.selectedIndex].value,
uppercase: uppercase.checked,
});

console.timeEnd('formatting');
}

input.addEventListener('input', format);
language.addEventListener('change', format);
uppercase.addEventListener('change', format);

format();
})();
});
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@gwax/sql-formatter",
"version": "3.0.0-beta.2",
"version": "3.0.0",
"description": "Format whitespace in a SQL query to make it more readable",
"license": "MIT",
"main": "lib/sqlFormatter.js",
Expand Down

0 comments on commit ea9e133

Please sign in to comment.