Skip to content

Commit 6f5e66f

Browse files
committed
Add missing tests for multiple comment prefixes in R2DBC ScriptUtils
See gh-23289
1 parent cda72e4 commit 6f5e66f

File tree

2 files changed

+42
-12
lines changed

2 files changed

+42
-12
lines changed

spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@
2929
import org.springframework.core.io.support.EncodedResource;
3030

3131
import static org.assertj.core.api.Assertions.assertThat;
32+
import static org.springframework.r2dbc.connection.init.ScriptUtils.DEFAULT_BLOCK_COMMENT_END_DELIMITER;
33+
import static org.springframework.r2dbc.connection.init.ScriptUtils.DEFAULT_BLOCK_COMMENT_START_DELIMITER;
34+
import static org.springframework.r2dbc.connection.init.ScriptUtils.DEFAULT_COMMENT_PREFIXES;
35+
import static org.springframework.r2dbc.connection.init.ScriptUtils.DEFAULT_STATEMENT_SEPARATOR;
3236
import static org.springframework.r2dbc.connection.init.ScriptUtils.containsSqlScriptDelimiters;
37+
import static org.springframework.r2dbc.connection.init.ScriptUtils.splitSqlScript;
3338

3439
/**
3540
* Unit tests for {@link ScriptUtils}.
@@ -56,7 +61,7 @@ public void splitSqlScriptDelimitedWithSemicolon() {
5661
";");
5762

5863
List<String> statements = new ArrayList<>();
59-
ScriptUtils.splitSqlScript(script, ";", statements);
64+
splitSqlScript(script, ";", statements);
6065

6166
assertThat(statements).hasSize(3).containsSequence(cleanedStatement1,
6267
cleanedStatement2, cleanedStatement3);
@@ -71,7 +76,7 @@ public void splitSqlScriptDelimitedWithNewLine() {
7176
String script = Strings.join(statement1, statement2, statement3).with("\n");
7277

7378
List<String> statements = new ArrayList<>();
74-
ScriptUtils.splitSqlScript(script, "\n", statements);
79+
splitSqlScript(script, "\n", statements);
7580

7681
assertThat(statements).hasSize(3).containsSequence(statement1, statement2,
7782
statement3);
@@ -87,7 +92,7 @@ public void splitSqlScriptDelimitedWithNewLineButDefaultDelimiterSpecified() {
8792

8893
List<String> statements = new ArrayList<>();
8994

90-
ScriptUtils.splitSqlScript(script, ScriptUtils.DEFAULT_STATEMENT_SEPARATOR,
95+
splitSqlScript(script, DEFAULT_STATEMENT_SEPARATOR,
9196
statements);
9297

9398
assertThat(statements).hasSize(1).contains(script.replace('\n', ' '));
@@ -102,7 +107,7 @@ public void splitScriptWithSingleQuotesNestedInsideDoubleQuotes() {
102107
String script = statement1 + delim + statement2 + delim;
103108

104109
List<String> statements = new ArrayList<>();
105-
ScriptUtils.splitSqlScript(script, ';', statements);
110+
splitSqlScript(script, ';', statements);
106111

107112
assertThat(statements).hasSize(2).containsSequence(statement1, statement2);
108113
}
@@ -111,7 +116,7 @@ public void splitScriptWithSingleQuotesNestedInsideDoubleQuotes() {
111116
public void readAndSplitScriptWithMultipleNewlinesAsSeparator() {
112117
String script = readScript("db-test-data-multi-newline.sql");
113118
List<String> statements = new ArrayList<>();
114-
ScriptUtils.splitSqlScript(script, "\n\n", statements);
119+
splitSqlScript(script, "\n\n", statements);
115120

116121
String statement1 = "insert into users (last_name) values ('Walter')";
117122
String statement2 = "insert into users (last_name) values ('Jesse')";
@@ -126,19 +131,26 @@ public void readAndSplitScriptWithMultipleNewlinesAsSeparator() {
126131
@Test
127132
public void readAndSplitScriptContainingComments() {
128133
String script = readScript("test-data-with-comments.sql");
129-
splitScriptContainingComments(script);
134+
splitScriptContainingComments(script, DEFAULT_COMMENT_PREFIXES);
130135
}
131136

132137
@Test
133138
public void readAndSplitScriptContainingCommentsWithWindowsLineEnding() {
134139
String script = readScript("test-data-with-comments.sql").replaceAll("\n",
135140
"\r\n");
136-
splitScriptContainingComments(script);
141+
splitScriptContainingComments(script, DEFAULT_COMMENT_PREFIXES);
137142
}
138143

139-
private void splitScriptContainingComments(String script) {
144+
@Test
145+
public void readAndSplitScriptContainingCommentsWithMultiplePrefixes() throws Exception {
146+
String script = readScript("test-data-with-multi-prefix-comments.sql");
147+
splitScriptContainingComments(script, "--", "#", "^");
148+
}
149+
150+
private void splitScriptContainingComments(String script, String... commentPrefixes) {
140151
List<String> statements = new ArrayList<>();
141-
ScriptUtils.splitSqlScript(script, ';', statements);
152+
splitSqlScript(null, script, ";", commentPrefixes, DEFAULT_BLOCK_COMMENT_START_DELIMITER,
153+
DEFAULT_BLOCK_COMMENT_END_DELIMITER, statements);
142154

143155
String statement1 = "insert into customer (id, name) values (1, 'Rod; Johnson'), (2, 'Adrian Collier')";
144156
String statement2 = "insert into orders(id, order_date, customer_id) values (1, '2008-01-02', 2)";
@@ -153,7 +165,7 @@ private void splitScriptContainingComments(String script) {
153165
public void readAndSplitScriptContainingCommentsWithLeadingTabs() {
154166
String script = readScript("test-data-with-comments-and-leading-tabs.sql");
155167
List<String> statements = new ArrayList<>();
156-
ScriptUtils.splitSqlScript(script, ';', statements);
168+
splitSqlScript(script, ';', statements);
157169

158170
String statement1 = "insert into customer (id, name) values (1, 'Walter White')";
159171
String statement2 = "insert into orders(id, order_date, customer_id) values (1, '2013-06-08', 1)";
@@ -167,7 +179,7 @@ public void readAndSplitScriptContainingCommentsWithLeadingTabs() {
167179
public void readAndSplitScriptContainingMultiLineComments() {
168180
String script = readScript("test-data-with-multi-line-comments.sql");
169181
List<String> statements = new ArrayList<>();
170-
ScriptUtils.splitSqlScript(script, ';', statements);
182+
splitSqlScript(script, ';', statements);
171183

172184
String statement1 = "INSERT INTO users(first_name, last_name) VALUES('Walter', 'White')";
173185
String statement2 = "INSERT INTO users(first_name, last_name) VALUES( 'Jesse' , 'Pinkman' )";
@@ -179,7 +191,7 @@ public void readAndSplitScriptContainingMultiLineComments() {
179191
public void readAndSplitScriptContainingMultiLineNestedComments() {
180192
String script = readScript("test-data-with-multi-line-nested-comments.sql");
181193
List<String> statements = new ArrayList<>();
182-
ScriptUtils.splitSqlScript(script, ';', statements);
194+
splitSqlScript(script, ';', statements);
183195

184196
String statement1 = "INSERT INTO users(first_name, last_name) VALUES('Walter', 'White')";
185197
String statement2 = "INSERT INTO users(first_name, last_name) VALUES( 'Jesse' , 'Pinkman' )";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-- The next comment line has no text after the '--' prefix.
2+
--
3+
-- The next comment line starts with a space.
4+
-- x, y, z...
5+
6+
insert into customer (id, name)
7+
values (1, 'Rod; Johnson'), (2, 'Adrian Collier');
8+
-- This is also a comment.
9+
insert into orders(id, order_date, customer_id)
10+
values (1, '2008-01-02', 2);
11+
# A comment with a different prefix
12+
insert into orders(id, order_date, customer_id) values (1, '2008-01-02', 2);
13+
INSERT INTO persons( person_id--
14+
, name)
15+
^ A comment with yet another different prefix
16+
VALUES( 1 -- person_id
17+
, 'Name' --name
18+
);--

0 commit comments

Comments
 (0)