Skip to content

Commit 1606e5f

Browse files
feat: add CCJSqlParserUtil.sanitizeSingleSql(String sqlStr) to help MyBatikPlus users to clean their statements
Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>
1 parent ced6ace commit 1606e5f

3 files changed

Lines changed: 46 additions & 4 deletions

File tree

src/main/java/net/sf/jsqlparser/parser/CCJSqlParserUtil.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.function.Consumer;
2323
import java.util.logging.Level;
2424
import java.util.logging.Logger;
25+
import java.util.regex.Matcher;
26+
import java.util.regex.Pattern;
2527

2628
import net.sf.jsqlparser.JSQLParserException;
2729
import net.sf.jsqlparser.expression.Expression;
@@ -525,4 +527,19 @@ public static int getUnbalancedPosition(String text) {
525527
return -1; // Return -1 if all brackets and quotes are balanced
526528
}
527529

530+
public static String sanitizeSingleSql(String sqlStr) {
531+
final Pattern SQL_DELIMITER_SPLIT =
532+
Pattern.compile("((?:'[^']*+'|[^\\n])*+)");
533+
final StringBuilder builder = new StringBuilder();
534+
final Matcher matcher = SQL_DELIMITER_SPLIT.matcher(sqlStr);
535+
while (matcher.find()) {
536+
for (int i = 1; i <= matcher.groupCount(); i++) {
537+
if (!matcher.group(i).isEmpty()) {
538+
builder.append("\n").append(matcher.group(i));
539+
}
540+
}
541+
}
542+
return builder.toString();
543+
}
544+
528545
}

src/test/java/net/sf/jsqlparser/parser/CCJSqlParserUtilTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import net.sf.jsqlparser.statement.select.PlainSelect;
4141
import net.sf.jsqlparser.statement.select.TableStatement;
4242
import net.sf.jsqlparser.test.MemoryLeakVerifier;
43+
import net.sf.jsqlparser.test.TestUtils;
4344
import org.junit.jupiter.api.Disabled;
4445
import org.junit.jupiter.api.Test;
4546
import org.junit.jupiter.api.function.Executable;
@@ -519,4 +520,27 @@ void testParseEmpty() throws JSQLParserException {
519520
assertNull(CCJSqlParserUtil.parse(""));
520521
assertNull(CCJSqlParserUtil.parse((String) null));
521522
}
523+
524+
@Test
525+
void testSingleStatementWithEmptyLines() throws JSQLParserException {
526+
String sqlStr = "update shop_info set title=?,\n"
527+
+ "\n"
528+
+ "\n"
529+
+ "\n"
530+
+ "content='abc\n"
531+
+ "\n"
532+
+ "\n"
533+
+ "\n"
534+
+ "def'\n"
535+
+ "where id=?";
536+
537+
Statement statement = CCJSqlParserUtil.parse(CCJSqlParserUtil.sanitizeSingleSql(sqlStr));
538+
TestUtils.assertStatementCanBeDeparsedAs(statement, "update shop_info set title=?,\n"
539+
+ "content='abc\n"
540+
+ "\n"
541+
+ "\n"
542+
+ "\n"
543+
+ "def'\n"
544+
+ "where id=?", true);
545+
}
522546
}

src/test/java/net/sf/jsqlparser/statement/StatementSeparatorTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
*/
1010
package net.sf.jsqlparser.statement;
1111

12-
import net.sf.jsqlparser.*;
13-
import net.sf.jsqlparser.parser.*;
14-
import net.sf.jsqlparser.test.*;
15-
import org.junit.jupiter.api.*;
12+
import net.sf.jsqlparser.JSQLParserException;
13+
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
14+
import net.sf.jsqlparser.test.TestUtils;
15+
import org.junit.jupiter.api.Assertions;
16+
import org.junit.jupiter.api.Test;
1617

1718
public class StatementSeparatorTest {
1819

0 commit comments

Comments
 (0)