@@ -51,6 +51,12 @@ public class TestUtils {
5151 private static final Pattern SQL_COMMENT_PATTERN = Pattern .
5252 compile ("(--.*$)|(/\\ *.*?\\ */)" , Pattern .MULTILINE );
5353
54+ private static final Pattern SQL_SANITATION_PATTERN
55+ = Pattern .compile ("(\\ s+)" , Pattern .MULTILINE );
56+
57+ private static final Pattern SQL_SANITATION_PATTERN2
58+ = Pattern .compile ("\\ s*([!/,()=+\\ -*|\\ ]<>])\\ s*" , Pattern .MULTILINE );
59+
5460 /**
5561 * @param statement
5662 * @return the parsed {@link Statement}
@@ -94,10 +100,17 @@ public static void assertStatementCanBeDeparsedAs(Statement parsed, String state
94100 }
95101
96102 public static void assertStatementCanBeDeparsedAs (Statement parsed , String statement , boolean laxDeparsingCheck ) {
97- assertEquals (buildSqlString (statement , laxDeparsingCheck ),
98- buildSqlString (parsed .toString (), laxDeparsingCheck ));
103+ String sanitizedInputSqlStr = buildSqlString (parsed .toString (), laxDeparsingCheck );
104+ String sanitizedStatementStr = buildSqlString (statement , laxDeparsingCheck );
105+
106+ assertEquals (sanitizedStatementStr , sanitizedInputSqlStr );
99107
100- assertDeparse (parsed , statement , laxDeparsingCheck );
108+ StringBuilder builder = new StringBuilder ();
109+ parsed .accept ( new StatementDeParser (builder ) );
110+
111+ String sanitizedDeparsedStr = buildSqlString (builder .toString (), laxDeparsingCheck );
112+
113+ assertEquals (sanitizedStatementStr , sanitizedDeparsedStr );
101114 }
102115
103116 /**
@@ -245,12 +258,19 @@ public static void assertDeparse(Statement stmt, String statement, boolean laxDe
245258 }
246259
247260 public static String buildSqlString (final String originalSql , boolean laxDeparsingCheck ) {
248- String sql = SQL_COMMENT_PATTERN .matcher (originalSql ).replaceAll ("" );
249261 if (laxDeparsingCheck ) {
250- return sql .replaceAll ("\\ s" , " " ).replaceAll ("\\ s+" , " " ).
251- replaceAll ("\\ s*([!/,()=+\\ -*|\\ ]<>])\\ s*" , "$1" ).toLowerCase ().trim ();
262+ // remove comments
263+ String sanitizedSqlStr = SQL_COMMENT_PATTERN .matcher (originalSql ).replaceAll ("" );
264+
265+ // redundant white space
266+ sanitizedSqlStr = SQL_SANITATION_PATTERN .matcher (sanitizedSqlStr ).replaceAll (" " );
267+
268+ // replace some more stuff
269+ sanitizedSqlStr = SQL_SANITATION_PATTERN2 .matcher (sanitizedSqlStr ).replaceAll ("$1" );
270+ return sanitizedSqlStr .trim ().toLowerCase ();
252271 } else {
253- return sql ;
272+ // remove comments only
273+ return SQL_COMMENT_PATTERN .matcher (originalSql ).replaceAll ("" );
254274 }
255275 }
256276
0 commit comments