/** * Cleans up whitespace, any trailing semicolons, and prefixed comments that a string is * unregistered, in order to come up with a canonical representation of this sql string. * Note that for backwards compatibility, this method condenses contiguous whitespace * into a single space. For example, "foo\t \nbar;" becomes "foo bar". */ public static String canonicalizeString(String sql) { return canonicalizeString(sql, false); }
@VisibleForTesting static String canonicalizeStringAndRemoveWhitespaceEntirely(String sql) { return canonicalizeString(sql, true); }
@Test public void testCanonicalizeBatch() { List<String> testBatch = ImmutableList.of( "/* UnregisteredSQLString */ insert foo into bar; /* UnregisteredSQLString */insert foo into bar;", "insert foo into bar; /* UnregisteredSQLString */ insert foo into bar"); String canonicalBatch = "insert foo into bar; insert foo into bar"; testBatch.forEach(sql -> assertEquals(canonicalBatch, SQLString.canonicalizeString(sql))); }
@Test public void testCanonicalizeBlanks() throws Exception { List<String> testBatch = ImmutableList.of("", " ", " ;; ; "); testBatch.forEach(sql -> assertEquals("", SQLString.canonicalizeString(sql))); } }
@Test public void testCanonicalizeString() { List<String> testQuery = ImmutableList.of( "insert foo into bar ; ", "insert\nfoo into bar", "insert\n \tfoo into bar", "insert foo into bar;", "insert foo into bar; ", "insert foo into bar; ;; ", "\tinsert foo into bar;", "\t insert foo into bar;", "insert foo into bar;\n;; ", " insert \t\nfoo \n \tinto \n\rbar\n\t; ", "/* UnregisteredSQLString */ insert foo into bar;", " /* UnregisteredSQLString */insert foo into bar", " /* UnregisteredSQLString */insert foo into bar "); String canonicalQuery = "insert foo into bar"; testQuery.forEach(sql -> assertEquals(canonicalQuery, SQLString.canonicalizeString(sql))); }
/** * Cleans up whitespace, any trailing semicolons, and prefixed comments that a string is * unregistered, in order to come up with a canonical representation of this sql string. * Note that for backwards compatibility, this method condenses contiguous whitespace * into a single space. For example, "foo\t \nbar;" becomes "foo bar". */ public static String canonicalizeString(String sql) { return canonicalizeString(sql, false); }
@VisibleForTesting static String canonicalizeStringAndRemoveWhitespaceEntirely(String sql) { return canonicalizeString(sql, true); }