Skip to content

Commit 7f01bf7

Browse files
BenjaminHetzjellifmbenhassine
authored andcommitted
Trim Keywords Followed By Whitespace Other Than The Character ' '
Modify `removeKeyWord(...)` such that the keyword is removed regardless of what kind of whitespace follows. This is especially useful for those who read in SQL from a file which has been formatted such that keywords live on their own lines. Added unit tests for trimming whitespace. Resolves #765
1 parent 6103fe7 commit 7f01bf7

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProvider.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2018 the original author or authors.
2+
* Copyright 2006-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -50,6 +50,7 @@
5050
* @author Dave Syer
5151
* @author Michael Minella
5252
* @author Mahmoud Ben Hassine
53+
* @author Benjamin Hetz
5354
* @since 2.0
5455
*/
5556
public abstract class AbstractSqlPagingQueryProvider implements PagingQueryProvider {
@@ -242,9 +243,9 @@ public void init(DataSource dataSource) throws Exception {
242243

243244
private String removeKeyWord(String keyWord, String clause) {
244245
String temp = clause.trim();
245-
String keyWordString = keyWord + " ";
246-
if (temp.toLowerCase().startsWith(keyWordString) && temp.length() > keyWordString.length()) {
247-
return temp.substring(keyWordString.length());
246+
int length = keyWord.length();
247+
if (temp.toLowerCase().startsWith(keyWord) && Character.isWhitespace(temp.charAt(length)) && temp.length() > length + 1) {
248+
return temp.substring(length + 1);
248249
}
249250
else {
250251
return temp;

spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/support/AbstractSqlPagingQueryProviderTests.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2012 the original author or authors.
2+
* Copyright 2006-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,6 +28,7 @@
2828
/**
2929
* @author Thomas Risberg
3030
* @author Michael Minella
31+
* @author Benjamin Hetz
3132
*/
3233
public abstract class AbstractSqlPagingQueryProviderTests {
3334

@@ -104,6 +105,48 @@ public void testGenerateJumpToItemQueryForFirstPageWithMultipleSortKeys() {
104105
assertEquals(getJumpToItemQueryForFirstPageWithMultipleSortKeys(), s);
105106
}
106107

108+
@Test
109+
public void testRemoveKeyWordsFollowedBySpaceChar() {
110+
String selectClause = "SELECT id, 'yes', false";
111+
String fromClause = "FROM test.verification_table";
112+
String whereClause = "WHERE TRUE";
113+
pagingQueryProvider.setSelectClause(selectClause);
114+
pagingQueryProvider.setFromClause(fromClause);
115+
pagingQueryProvider.setWhereClause(whereClause);
116+
117+
assertEquals("id, 'yes', false", pagingQueryProvider.getSelectClause());
118+
assertEquals("test.verification_table", pagingQueryProvider.getFromClause());
119+
assertEquals("TRUE", pagingQueryProvider.getWhereClause());
120+
}
121+
122+
@Test
123+
public void testRemoveKeyWordsFollowedByTabChar() {
124+
String selectClause = "SELECT\tid, 'yes', false";
125+
String fromClause = "FROM\ttest.verification_table";
126+
String whereClause = "WHERE\tTRUE";
127+
pagingQueryProvider.setSelectClause(selectClause);
128+
pagingQueryProvider.setFromClause(fromClause);
129+
pagingQueryProvider.setWhereClause(whereClause);
130+
131+
assertEquals("id, 'yes', false", pagingQueryProvider.getSelectClause());
132+
assertEquals("test.verification_table", pagingQueryProvider.getFromClause());
133+
assertEquals("TRUE", pagingQueryProvider.getWhereClause());
134+
}
135+
136+
@Test
137+
public void testRemoveKeyWordsFollowedByNewLineChar() {
138+
String selectClause = "SELECT\nid, 'yes', false";
139+
String fromClause = "FROM\ntest.verification_table";
140+
String whereClause = "WHERE\nTRUE";
141+
pagingQueryProvider.setSelectClause(selectClause);
142+
pagingQueryProvider.setFromClause(fromClause);
143+
pagingQueryProvider.setWhereClause(whereClause);
144+
145+
assertEquals("id, 'yes', false", pagingQueryProvider.getSelectClause());
146+
assertEquals("test.verification_table", pagingQueryProvider.getFromClause());
147+
assertEquals("TRUE", pagingQueryProvider.getWhereClause());
148+
}
149+
107150
@Test
108151
public abstract void testGenerateFirstPageQuery();
109152

0 commit comments

Comments
 (0)