Skip to content

Commit 9ec145e

Browse files
committed
minifySqlEnabled option added. It is remove white space character from query string in xml file.
1 parent b8e0ae2 commit 9ec145e

File tree

5 files changed

+81
-9
lines changed

5 files changed

+81
-9
lines changed

src/main/java/org/apache/ibatis/builder/SqlSourceBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.apache.ibatis.mapping.ParameterMapping;
2323
import org.apache.ibatis.mapping.SqlSource;
2424
import org.apache.ibatis.parsing.GenericTokenParser;
25+
import org.apache.ibatis.parsing.StringParser;
2526
import org.apache.ibatis.parsing.TokenHandler;
2627
import org.apache.ibatis.reflection.MetaClass;
2728
import org.apache.ibatis.reflection.MetaObject;
@@ -42,7 +43,12 @@ public SqlSourceBuilder(Configuration configuration) {
4243
public SqlSource parse(String originalSql, Class<?> parameterType, Map<String, Object> additionalParameters) {
4344
ParameterMappingTokenHandler handler = new ParameterMappingTokenHandler(configuration, parameterType, additionalParameters);
4445
GenericTokenParser parser = new GenericTokenParser("#{", "}", handler);
45-
String sql = parser.parse(originalSql);
46+
String sql;
47+
if (configuration.isMinifySqlEnabled()) {
48+
sql = parser.parse(StringParser.removeBreakingWhitespace(originalSql));
49+
} else {
50+
sql = parser.parse(originalSql);
51+
}
4652
return new StaticSqlSource(configuration, sql, handler.getParameterMappings());
4753
}
4854

src/main/java/org/apache/ibatis/logging/jdbc/BaseJdbcLogger.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
import java.util.List;
2727
import java.util.Map;
2828
import java.util.Set;
29-
import java.util.StringTokenizer;
3029
import java.util.stream.Collectors;
3130

3231
import org.apache.ibatis.logging.Log;
32+
import org.apache.ibatis.parsing.StringParser;
3333
import org.apache.ibatis.reflection.ArrayUtil;
3434

3535
/**
@@ -121,13 +121,7 @@ protected void clearColumnInfo() {
121121
}
122122

123123
protected String removeBreakingWhitespace(String original) {
124-
StringTokenizer whitespaceStripper = new StringTokenizer(original);
125-
StringBuilder builder = new StringBuilder();
126-
while (whitespaceStripper.hasMoreTokens()) {
127-
builder.append(whitespaceStripper.nextToken());
128-
builder.append(" ");
129-
}
130-
return builder.toString();
124+
return StringParser.removeBreakingWhitespace(original);
131125
}
132126

133127
protected boolean isDebugEnabled() {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.apache.ibatis.parsing;
2+
3+
import java.util.StringTokenizer;
4+
5+
public class StringParser {
6+
7+
public static String removeBreakingWhitespace(String original) {
8+
StringTokenizer whitespaceStripper = new StringTokenizer(original);
9+
StringBuilder builder = new StringBuilder();
10+
while (whitespaceStripper.hasMoreTokens()) {
11+
builder.append(whitespaceStripper.nextToken());
12+
builder.append(" ");
13+
}
14+
return builder.toString().trim();
15+
}
16+
}

src/main/java/org/apache/ibatis/session/Configuration.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ public class Configuration {
113113
protected boolean callSettersOnNulls;
114114
protected boolean useActualParamName = true;
115115
protected boolean returnInstanceForEmptyRow;
116+
protected boolean minifySqlEnabled;
116117

117118
protected String logPrefix;
118119
protected Class<? extends Log> logImpl;
@@ -266,6 +267,14 @@ public void setReturnInstanceForEmptyRow(boolean returnEmptyInstance) {
266267
this.returnInstanceForEmptyRow = returnEmptyInstance;
267268
}
268269

270+
public boolean isMinifySqlEnabled() {
271+
return minifySqlEnabled;
272+
}
273+
274+
public void setMinifySqlEnabled(boolean minifySqlEnabled) {
275+
this.minifySqlEnabled = minifySqlEnabled;
276+
}
277+
269278
public String getDatabaseId() {
270279
return databaseId;
271280
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.apache.ibatis.builder;
2+
3+
import java.io.Reader;
4+
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
5+
import org.apache.ibatis.io.Resources;
6+
import org.apache.ibatis.mapping.BoundSql;
7+
import org.apache.ibatis.mapping.SqlSource;
8+
import org.apache.ibatis.session.Configuration;
9+
import org.junit.jupiter.api.Assertions;
10+
import org.junit.jupiter.api.BeforeAll;
11+
import org.junit.jupiter.api.Test;
12+
13+
public class SqlSourceBuilderTest {
14+
15+
private static Configuration configuration;
16+
private static SqlSourceBuilder sqlSourceBuilder;
17+
String sqlFromXml = "SELECT * \n FROM user\n WHERE user_id = 1";
18+
19+
@BeforeAll
20+
static void setUp() throws Exception {
21+
// create an SqlSessionFactory
22+
try (Reader reader = Resources
23+
.getResourceAsReader("org/apache/ibatis/submitted/empty_row/mybatis-config.xml")) {
24+
XMLConfigBuilder parser = new XMLConfigBuilder(reader, null, null);
25+
configuration = parser.parse();
26+
}
27+
28+
sqlSourceBuilder = new SqlSourceBuilder(configuration);
29+
}
30+
31+
@Test
32+
void testMinifySqlEnabledIsFalse() {
33+
SqlSource sqlSource = sqlSourceBuilder.parse(sqlFromXml, null, null);
34+
BoundSql boundSql = sqlSource.getBoundSql(null);
35+
String actual = boundSql.getSql();
36+
Assertions.assertEquals(sqlFromXml, actual);
37+
}
38+
39+
@Test
40+
void testMinifySqlEnabledIsTrue() {
41+
configuration.setMinifySqlEnabled(true);
42+
SqlSource sqlSource = sqlSourceBuilder.parse(sqlFromXml, null, null);
43+
BoundSql boundSql = sqlSource.getBoundSql(null);
44+
String actual = boundSql.getSql();
45+
Assertions.assertNotEquals(sqlFromXml, actual);
46+
}
47+
}

0 commit comments

Comments
 (0)