From 704e6ced242b872558c8915b00d10bd6cbfd4975 Mon Sep 17 00:00:00 2001 From: dylanbaroody Date: Fri, 1 Oct 2021 17:13:53 -0400 Subject: [PATCH 1/3] jdbi_list_param Add support for JDBI bind list params. JDBI bind list params are in the format: `IN()`. Previously the formatter would break these up: ``` IN( < ids > ) ``` Which breaks the JDBI integration. This will no longer happen in the case that there is a `<` then a NAME type token then `>` --- .../spotless/sql/dbeaver/SQLTokenizedFormatter.java | 7 +++++++ testlib/src/main/resources/sql/dbeaver/full.clean | 3 ++- testlib/src/main/resources/sql/dbeaver/full.dirty | 4 ++-- testlib/src/main/resources/sql/dbeaver/jdbi-params.clean | 7 +++++++ testlib/src/main/resources/sql/dbeaver/jdbi-params.dirty | 1 + .../diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java | 3 ++- 6 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 testlib/src/main/resources/sql/dbeaver/jdbi-params.clean create mode 100644 testlib/src/main/resources/sql/dbeaver/jdbi-params.dirty diff --git a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java index 28f94de0de..f2c98eebc1 100644 --- a/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java +++ b/lib/src/main/java/com/diffplug/spotless/sql/dbeaver/SQLTokenizedFormatter.java @@ -138,6 +138,13 @@ private List format(final List argList) { argList.remove(index + 1); argList.remove(index + 1); } + + // JDBI bind list + if (tokenString.equals("<") && t1.getType() == TokenType.NAME && token2String.equals(">")) { + t0.setString(t0.getString() + t1.getString() + t2.getString()); + argList.remove(index + 1); + argList.remove(index + 1); + } } int indent = 0; diff --git a/testlib/src/main/resources/sql/dbeaver/full.clean b/testlib/src/main/resources/sql/dbeaver/full.clean index bd53dad562..006e502a5d 100644 --- a/testlib/src/main/resources/sql/dbeaver/full.clean +++ b/testlib/src/main/resources/sql/dbeaver/full.clean @@ -51,9 +51,10 @@ WHERE table3.name = 'Foo Bar' AND table3.type = 'unknown_type' AND table3.param =:aParam + AND table3.listParam IN() ) GROUP BY table1.id, table2.number ORDER BY - table1.id; \ No newline at end of file + table1.id; diff --git a/testlib/src/main/resources/sql/dbeaver/full.dirty b/testlib/src/main/resources/sql/dbeaver/full.dirty index 03b722747a..87c0dac231 100644 --- a/testlib/src/main/resources/sql/dbeaver/full.dirty +++ b/testlib/src/main/resources/sql/dbeaver/full.dirty @@ -9,5 +9,5 @@ DELETE FROM TABLE1 WHERE a=1; UPDATE TABLE1 SET a=2 WHERE a=1; SELECT table1.id, table2.number, SUM(table1.amount) FROM table1 INNER JOIN table2 ON table.id = table2.table1_id -WHERE table1.id IN (SELECT table1_id FROM table3 WHERE table3.name = 'Foo Bar' and table3.type = 'unknown_type' And table3.param = :aParam) -GROUP BY table1.id, table2.number ORDER BY table1.id; \ No newline at end of file +WHERE table1.id IN (SELECT table1_id FROM table3 WHERE table3.name = 'Foo Bar' and table3.type = 'unknown_type' And table3.param = :aParam aNd table3.listParam IN ( )) +GROUP BY table1.id, table2.number ORDER BY table1.id; diff --git a/testlib/src/main/resources/sql/dbeaver/jdbi-params.clean b/testlib/src/main/resources/sql/dbeaver/jdbi-params.clean new file mode 100644 index 0000000000..be0934772a --- /dev/null +++ b/testlib/src/main/resources/sql/dbeaver/jdbi-params.clean @@ -0,0 +1,7 @@ +SELECT + * +FROM + TABLE + WHERE + id IN() + AND user_id =:user_id; diff --git a/testlib/src/main/resources/sql/dbeaver/jdbi-params.dirty b/testlib/src/main/resources/sql/dbeaver/jdbi-params.dirty new file mode 100644 index 0000000000..3193e724a9 --- /dev/null +++ b/testlib/src/main/resources/sql/dbeaver/jdbi-params.dirty @@ -0,0 +1 @@ +SELECT * FROM table WHERE id IN () AND user_id = :user_id; diff --git a/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java b/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java index 44b2cecad3..ca166b67ea 100644 --- a/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java @@ -35,7 +35,8 @@ void behavior() throws Exception { .testResource("sql/dbeaver/full.dirty", "sql/dbeaver/full.clean") .testResource("sql/dbeaver/V1_initial.sql.dirty", "sql/dbeaver/V1_initial.sql.clean") .testResource("sql/dbeaver/alter-table.dirty", "sql/dbeaver/alter-table.clean") - .testResource("sql/dbeaver/create.dirty", "sql/dbeaver/create.clean"); + .testResource("sql/dbeaver/create.dirty", "sql/dbeaver/create.clean") + .testResource("sql/dbeaver/jdbi-params.dirty", "sql/dbeaver/jdbi-params.clean"); } @Test From daa9a18d22014e9cb525bdaaed8129212a783992 Mon Sep 17 00:00:00 2001 From: dylanbaroody Date: Fri, 1 Oct 2021 17:21:09 -0400 Subject: [PATCH 2/3] jdbi_list_param Add changelogs --- CHANGES.md | 3 +++ plugin-gradle/CHANGES.md | 3 +++ plugin-maven/CHANGES.md | 3 +++ 3 files changed, 9 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index a15ee10103..ee2fa37695 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,9 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] +### Added +* Added support for JBDI bind list params in sql formatter ([#955](https://github.com/diffplug/spotless/pull/955)) + ## [2.18.0] - 2021-09-30 ### Added * Added support for custom JSR223 formatters ([#945](https://github.com/diffplug/spotless/pull/945)) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 866e5a6755..7525020e4a 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -4,6 +4,9 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] +### Added +* Added support for JBDI bind list params in sql formatter ([#955](https://github.com/diffplug/spotless/pull/955)) + ## [5.15.2] - 2021-09-27 ### Changed * Added support and bump Eclipse formatter default versions to `4.21` for `eclipse-cdt`, `eclipse-jdt`, `eclipse-wtp`. Change is only applied for JVM 11+. diff --git a/plugin-maven/CHANGES.md b/plugin-maven/CHANGES.md index d633f65cc1..3237e5eb81 100644 --- a/plugin-maven/CHANGES.md +++ b/plugin-maven/CHANGES.md @@ -4,6 +4,9 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] +### Added +* Added support for JBDI bind list params in sql formatter ([#955](https://github.com/diffplug/spotless/pull/955)) + ## [2.15.0] - 2021-09-30 ### Added * Added support for custom JSR223 formatters ([#945](https://github.com/diffplug/spotless/pull/945)) From 9c0cf788d83cfb11343f6f65fda9cc4b85bd02e2 Mon Sep 17 00:00:00 2001 From: dylanbaroody Date: Fri, 1 Oct 2021 21:10:36 -0400 Subject: [PATCH 3/3] formatting --- .../com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java b/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java index ca166b67ea..58b0115b9c 100644 --- a/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java +++ b/testlib/src/test/java/com/diffplug/spotless/sql/DBeaverSQLFormatterStepTest.java @@ -36,7 +36,7 @@ void behavior() throws Exception { .testResource("sql/dbeaver/V1_initial.sql.dirty", "sql/dbeaver/V1_initial.sql.clean") .testResource("sql/dbeaver/alter-table.dirty", "sql/dbeaver/alter-table.clean") .testResource("sql/dbeaver/create.dirty", "sql/dbeaver/create.clean") - .testResource("sql/dbeaver/jdbi-params.dirty", "sql/dbeaver/jdbi-params.clean"); + .testResource("sql/dbeaver/jdbi-params.dirty", "sql/dbeaver/jdbi-params.clean"); } @Test