项目作者: vertical-blank

项目描述 :
SQL formatter written with only Java Standard Library, without dependencies.
高级语言: Java
项目地址: git://github.com/vertical-blank/sql-formatter.git
创建时间: 2019-03-20T04:33:44Z
项目社区:https://github.com/vertical-blank/sql-formatter

开源协议:MIT License

下载


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

Usage

Maven

  1. <dependency>
  2. <groupId>com.github.vertical-blank</groupId>
  3. <artifactId>sql-formatter</artifactId>
  4. <version>2.0.5</version>
  5. </dependency>

Gradle

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

Examples

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

  1. SqlFormatter.format("SELECT * FROM table1")

This will output:

  1. SELECT
  2. *
  3. FROM
  4. table1

You can also pass FormatConfig object built by builder:

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

Dialect

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

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

SQL formatter supports the following dialects:

Extend formatters

Formatters can be extended as below :

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

Then it results in:

  1. SELECT
  2. *
  3. FROM
  4. table
  5. WHERE
  6. A => 4

Placeholders replacement

You can pass List or Map to format :

  1. // Named placeholders
  2. Map<String, String> namedParams = new HashMap<>();
  3. namedParams.put("foo", "'bar'");
  4. SqlFormatter.of(Dialect.TSql).format("SELECT * FROM tbl WHERE foo = @foo", namedParams);
  5. // Indexed placeholders
  6. SqlFormatter.format("SELECT * FROM tbl WHERE foo = ?", Arrays.asList("'bar'"));

Both result in:

  1. SELECT
  2. *
  3. FROM
  4. tbl
  5. WHERE
  6. foo = 'bar'

Build

Building this library requires JDK 11 because of ktfmt.