Skip to content

Commit 38fa270

Browse files
committed
Minor optimization on TrimSqlNode and it's subclasses.
1 parent 30a8ba0 commit 38fa270

File tree

3 files changed

+35
-18
lines changed

3 files changed

+35
-18
lines changed

src/main/java/org/apache/ibatis/scripting/xmltags/SetSqlNode.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,17 @@
1515
*/
1616
package org.apache.ibatis.scripting.xmltags;
1717

18+
import java.util.Arrays;
19+
import java.util.List;
20+
1821
import org.apache.ibatis.session.Configuration;
1922

2023
public class SetSqlNode extends TrimSqlNode {
2124

25+
private static List<String> suffixList = Arrays.asList(",");
26+
2227
public SetSqlNode(Configuration configuration,SqlNode contents) {
23-
super(configuration, contents, "SET", null, null, ",");
28+
super(configuration, contents, "SET", null, null, suffixList);
2429
}
2530

2631
}

src/main/java/org/apache/ibatis/scripting/xmltags/TrimSqlNode.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,20 @@ public class TrimSqlNode implements SqlNode {
2929
private SqlNode contents;
3030
private String prefix;
3131
private String suffix;
32-
private List<String> prefixesToOverride = new ArrayList<String>();
33-
private List<String> suffixesToOverride = new ArrayList<String>();
32+
private List<String> prefixesToOverride;
33+
private List<String> suffixesToOverride;
3434
private Configuration configuration;
3535

3636
public TrimSqlNode(Configuration configuration, SqlNode contents, String prefix, String prefixesToOverride, String suffix, String suffixesToOverride) {
37+
this(configuration, contents, prefix, parseOverrides(prefixesToOverride), suffix, parseOverrides(suffixesToOverride));;
38+
}
39+
40+
protected TrimSqlNode(Configuration configuration, SqlNode contents, String prefix, List<String> prefixesToOverride, String suffix, List<String> suffixesToOverride) {
3741
this.contents = contents;
3842
this.prefix = prefix;
39-
this.prefixesToOverride = parseOverrides(prefixesToOverride);
43+
this.prefixesToOverride = prefixesToOverride;
4044
this.suffix = suffix;
41-
this.suffixesToOverride = parseOverrides(suffixesToOverride);
45+
this.suffixesToOverride = suffixesToOverride;
4246
this.configuration = configuration;
4347
}
4448

@@ -49,7 +53,7 @@ public boolean apply(DynamicContext context) {
4953
return result;
5054
}
5155

52-
private List<String> parseOverrides(String overrides) {
56+
private static List<String> parseOverrides(String overrides) {
5357
if (overrides != null) {
5458
final StringTokenizer parser = new StringTokenizer(overrides, "|", false);
5559
return new ArrayList<String>() {
@@ -117,10 +121,12 @@ public String getSql() {
117121
private void applyPrefix(StringBuilder sql, String trimmedUppercaseSql) {
118122
if (!prefixApplied) {
119123
prefixApplied = true;
120-
for (String toRemove : prefixesToOverride) {
121-
if (trimmedUppercaseSql.startsWith(toRemove)) {
122-
sql.delete(0, toRemove.trim().length());
123-
break;
124+
if (prefixesToOverride != null) {
125+
for (String toRemove : prefixesToOverride) {
126+
if (trimmedUppercaseSql.startsWith(toRemove)) {
127+
sql.delete(0, toRemove.trim().length());
128+
break;
129+
}
124130
}
125131
}
126132
if (prefix != null) {
@@ -133,12 +139,14 @@ private void applyPrefix(StringBuilder sql, String trimmedUppercaseSql) {
133139
private void applySuffix(StringBuilder sql, String trimmedUppercaseSql) {
134140
if (!suffixApplied) {
135141
suffixApplied = true;
136-
for (String toRemove : suffixesToOverride) {
137-
if (trimmedUppercaseSql.endsWith(toRemove) || trimmedUppercaseSql.endsWith(toRemove.trim())) {
138-
int start = sql.length() - toRemove.trim().length();
139-
int end = sql.length();
140-
sql.delete(start, end);
141-
break;
142+
if (suffixesToOverride != null) {
143+
for (String toRemove : suffixesToOverride) {
144+
if (trimmedUppercaseSql.endsWith(toRemove) || trimmedUppercaseSql.endsWith(toRemove.trim())) {
145+
int start = sql.length() - toRemove.trim().length();
146+
int end = sql.length();
147+
sql.delete(start, end);
148+
break;
149+
}
142150
}
143151
}
144152
if (suffix != null) {

src/main/java/org/apache/ibatis/scripting/xmltags/WhereSqlNode.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
*/
1616
package org.apache.ibatis.scripting.xmltags;
1717

18+
import java.util.Arrays;
19+
import java.util.List;
20+
1821
import org.apache.ibatis.session.Configuration;
1922

2023
public class WhereSqlNode extends TrimSqlNode {
2124

25+
private static List<String> prefixList = Arrays.asList("AND ","OR ","AND\n", "OR\n", "AND\r", "OR\r", "AND\t", "OR\t");
26+
2227
public WhereSqlNode(Configuration configuration, SqlNode contents) {
23-
super(configuration, contents, "WHERE", "AND |OR |AND\n|OR\n|AND\r|OR\r|AND\t|OR\t", null, null);
28+
super(configuration, contents, "WHERE", prefixList, null, null);
2429
}
2530

26-
2731
}

0 commit comments

Comments
 (0)