diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlBuilder.java b/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlBuilder.java index 5f2444c99..e20295cab 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlBuilder.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlBuilder.java @@ -615,6 +615,15 @@ public class SqlBuilder implements Builder { return this.paramValues.toArray(new Object[0]); } + /** + * 格式化SQL语句 + * @return SqlBuilder + */ + public SqlBuilder format() { + this.sql.replace(0, this.sql.length(), SqlFormatter.format(this.sql.toString())); + return this; + } + /** * 构建,默认打印SQL日志 * diff --git a/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlFormatter.java b/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlFormatter.java index b02fd264c..e619e6a37 100644 --- a/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlFormatter.java +++ b/hutool-db/src/main/java/org/dromara/hutool/db/sql/SqlFormatter.java @@ -122,6 +122,12 @@ public class SqlFormatter { t = this.tokens.nextToken(); this.token += t; } while (!"\"".equals(t)); + } else if ("`".equals(this.token)) { + String t; + do { + t = this.tokens.nextToken(); + this.token += t; + } while (!"`".equals(t)); } if ((this.afterByOrSetOrFromOrSelect) && (",".equals(this.token))) { @@ -320,7 +326,7 @@ public class SqlFormatter { } private static boolean isFunctionName(final String tok) { - if(StrUtil.isEmpty(tok)){ + if (StrUtil.isEmpty(tok)) { return true; } final char begin = tok.charAt(0); diff --git a/hutool-db/src/test/java/org/dromara/hutool/db/sql/SqlFormatterTest.java b/hutool-db/src/test/java/org/dromara/hutool/db/sql/SqlFormatterTest.java index a81115dcc..70c75ce5e 100644 --- a/hutool-db/src/test/java/org/dromara/hutool/db/sql/SqlFormatterTest.java +++ b/hutool-db/src/test/java/org/dromara/hutool/db/sql/SqlFormatterTest.java @@ -1,5 +1,6 @@ package org.dromara.hutool.db.sql; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; public class SqlFormatterTest { @@ -11,4 +12,15 @@ public class SqlFormatterTest { final String sql = "(select 1 from dual) union all (select 1 from dual)"; SqlFormatter.format(sql); } + + @Test + public void issue3246Test() { + final String sql = "select * from `order`"; + final String format = SqlFormatter.format(sql); + Assertions.assertEquals( + "select\n" + + " * \n" + + " from\n" + + " `order`", format); + } }