File tree Expand file tree Collapse file tree
main/java/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2222import java .util .function .Consumer ;
2323import java .util .logging .Level ;
2424import java .util .logging .Logger ;
25+ import java .util .regex .Matcher ;
26+ import java .util .regex .Pattern ;
2527
2628import net .sf .jsqlparser .JSQLParserException ;
2729import 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}
Original file line number Diff line number Diff line change 4040import net .sf .jsqlparser .statement .select .PlainSelect ;
4141import net .sf .jsqlparser .statement .select .TableStatement ;
4242import net .sf .jsqlparser .test .MemoryLeakVerifier ;
43+ import net .sf .jsqlparser .test .TestUtils ;
4344import org .junit .jupiter .api .Disabled ;
4445import org .junit .jupiter .api .Test ;
4546import 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}
Original file line number Diff line number Diff line change 99 */
1010package 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
1718public class StatementSeparatorTest {
1819
You can’t perform that action at this time.
0 commit comments