Skip to content

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

License

Notifications You must be signed in to change notification settings

wanghui-dot-dev/sql-formatter

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sql-formatter

Maven Central Java CI with Maven codecov

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 ;.

Fork更改内容

  1. 支持格式化时移除注释
String format =
        SqlFormatter.of(Dialect.MySql)
                .format("-- test \nSELECT -- test \nid from where id = ${abc}", 
                        FormatConfig
                                .builder()
                                .removeComments()
                                .build());
SELECT
  id
from
where
  id = ${abc}
  1. 支持格式化成一行
String format =
        SqlFormatter.of(Dialect.MySql)
                .format("-- test \nSELECT -- test \nid from where id = ${abc}", 
                        FormatConfig
                                .builder()
                                .oneLine()
                                .build());
SELECT id from where id = ${abc}
  1. 支持格式化自定义占位符作为独立,占位符格式为 ${xxxx}
String format =
        SqlFormatter.of(Dialect.MySql)
                .format("-- test \nSELECT -- test \nid from where id = ${abc}", 
                        FormatConfig
                                .builder()
                                .build());

输出

-- test
SELECT
  -- test
  id
from
where
  id = ${abc}

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 placeholders
Map<String, String> namedParams = new HashMap<>();
namedParams.put("foo", "'bar'");
SqlFormatter.of(Dialect.TSql).format("SELECT * FROM tbl WHERE foo = @foo", namedParams);

// Indexed placeholders
SqlFormatter.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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 75.6%
  • Kotlin 24.4%