Skip to content

Latest commit

History

185 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

sql-formatter

Maven CentralJava CI with Mavencodecov

Java port of great SQL formatter https://github.com/zeroturnaround/sql-formatter.

Written with only Java Standard Library, without dependencies.

Demo

Demo is running on Google Cloud Function, with native-compiled shared library by GraalVM.

This does not support:

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

Usage

Maven

<dependency>
<groupId>com.github.vertical-blank</groupId>
<artifactId>sql-formatter</artifactId>
<version>2.0.5</version>
</dependency>

Gradle

implementation 'com.github.vertical-blank:sql-formatter:2.0.5'

Examples

You can easily use com.github.vertical_blank.sqlformatter.SqlFormatter :

SqlFormatter.format("SELECT * FROM table1")

This will output:

SELECT*FROM
table1

You can also pass FormatConfig object built by builder:

SqlFormatter.format('SELECT * FROM tbl',FormatConfig.builder().indent(" ")// Defaults to two spaces.uppercase(true)// Defaults to false (not safe to use when SQL dialect has case-sensitive identifiers).linesBetweenQueries(2)// Defaults to 1.maxColumnLength(100)// Defaults to 50.params(Arrays.asList("a","b","c"))// Map or List. See Placeholders replacement..build());

Dialect

You can pass dialect com.github.vertical_blank.sqlformatter.languages.Dialect or String to SqlFormatter.of :

SqlFormatter
.of(Dialect.N1ql) // Recommended//.of("n1ql") // String can be passed
.format("SELECT *");

SQL formatter supports the following dialects:

Extend formatters

Formatters can be extended as below :

SqlFormatter
.of(Dialect.MySql)
.extend(cfg -> cfg.plusOperators("=>"))
.format("SELECT * FROM table WHERE A => 4")

Then it results in:

SELECT*FROM
table
WHERE
A =>4

Placeholders replacement

You can pass List or Map to format :

// Named placeholdersMap<String, String> namedParams = newHashMap<>();
namedParams.put("foo", "'bar'");
SqlFormatter.of(Dialect.TSql).format("SELECT * FROM tbl WHERE foo = @foo", namedParams);
// Indexed placeholdersSqlFormatter.format("SELECT * FROM tbl WHERE foo = ?", Arrays.asList("'bar'"));

Both result in:

SELECT*FROM
tbl
WHERE
foo ='bar'

Build

Building this library requires JDK 11 because of ktfmt.

About

SQL formatter written with only Java Standard Library, without dependencies.

Topics

Resources

Stars

268 stars

Watchers

11 watching

Forks

Releases

Packages

Used by

Contributors

Languages