Skip to content

Commit

Permalink
Fix ScriptUtils for MS Windows line ending
Browse files Browse the repository at this point in the history
Prior to this commit, ScriptUtils did not properly split SQL
scripts that contained line endings for MS Windows.

Closes gh-23019
  • Loading branch information
chrunchyjesus authored and sbrannen committed May 24, 2019
1 parent 5f75413 commit 771a05e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
Expand Up @@ -234,7 +234,7 @@ else if (script.startsWith(blockCommentStartDelimiter, i)) {
"Missing block comment end delimiter: " + blockCommentEndDelimiter, resource);
}
}
else if (c == ' ' || c == '\n' || c == '\t') {
else if (c == ' ' || c == '\r' || c == '\n' || c == '\t') {
// Avoid multiple adjacent whitespace characters
if (sb.length() > 0 && sb.charAt(sb.length() - 1) != ' ') {
c = ' ';
Expand Down
Expand Up @@ -132,6 +132,25 @@ public void readAndSplitScriptContainingComments() throws Exception {
assertEquals("statement 4 not split correctly", statement4, statements.get(3));
}

@Test
public void readAndSplitScriptContainingCommentsWithWindowsLineEnding() throws Exception {
String script = readScript("test-data-with-comments.sql").replaceAll("\n", "\r\n");
List<String> statements = new ArrayList<>();
splitSqlScript(script, ';', statements);

String statement1 = "insert into customer (id, name) values (1, 'Rod; Johnson'), (2, 'Adrian Collier')";
String statement2 = "insert into orders(id, order_date, customer_id) values (1, '2008-01-02', 2)";
String statement3 = "insert into orders(id, order_date, customer_id) values (1, '2008-01-02', 2)";
// Statement 4 addresses the error described in SPR-9982.
String statement4 = "INSERT INTO persons( person_id , name) VALUES( 1 , 'Name' )";

assertEquals("wrong number of statements", 4, statements.size());
assertEquals("statement 1 not split correctly", statement1, statements.get(0));
assertEquals("statement 2 not split correctly", statement2, statements.get(1));
assertEquals("statement 3 not split correctly", statement3, statements.get(2));
assertEquals("statement 4 not split correctly", statement4, statements.get(3));
}

@Test // SPR-10330
public void readAndSplitScriptContainingCommentsWithLeadingTabs() throws Exception {
String script = readScript("test-data-with-comments-and-leading-tabs.sql");
Expand Down

0 comments on commit 771a05e

Please sign in to comment.