You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2009/10/04 07:29:40 UTC
svn commit: r821469 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src:
main/java/org/apache/ibatis/parsing/GenericTokenParser.java
test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java
Author: cbegin
Date: Sun Oct 4 05:29:40 2009
New Revision: 821469
URL: http://svn.apache.org/viewvc?rev=821469&view=rev
Log:
Fixed IBATIS-660 SQL parser does not handle #{...} parsing correctly if a "}" char presides the first tag in the SQL statement
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java?rev=821469&r1=821468&r2=821469&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/parsing/GenericTokenParser.java Sun Oct 4 05:29:40 2009
@@ -20,19 +20,26 @@
StringBuilder builder = new StringBuilder();
if (text != null) {
String after = text;
-
int start = after.indexOf(openToken);
int end = after.indexOf(closeToken);
- while (start > -1 && end > start) {
- String before = after.substring(0, start);
- String content = after.substring(start + openToken.length(), end);
- String substitution = handler.handleToken(content);
- builder.append(before);
- builder.append(substitution);
- after = after.substring(end + closeToken.length());
+ while (start > -1) {
+ if (end > start) {
+ String before = after.substring(0, start);
+ String content = after.substring(start + openToken.length(), end);
+ String substitution = handler.handleToken(content);
+ builder.append(before);
+ builder.append(substitution);
+ after = after.substring(end + closeToken.length());
+ } else if (end > -1) {
+ String before = after.substring(0, end);
+ builder.append(before);
+ builder.append(closeToken);
+ after = after.substring(end + closeToken.length());
+ } else {
+ break;
+ }
start = after.indexOf(openToken);
end = after.indexOf(closeToken);
-
}
builder.append(after);
}
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java?rev=821469&r1=821468&r2=821469&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/parsing/GenericTokenParserTest.java Sun Oct 4 05:29:40 2009
@@ -26,6 +26,7 @@
put("first_name", "James");
put("initial", "T");
put("last_name", "Kirk");
+ put("", "");
}
}));
@@ -33,6 +34,16 @@
assertEquals("Hello captain James T Kirk", parser.parse("Hello captain ${first_name} ${initial} ${last_name}"));
assertEquals("James T Kirk", parser.parse("${first_name} ${initial} ${last_name}"));
assertEquals("JamesTKirk", parser.parse("${first_name}${initial}${last_name}"));
+ assertEquals("{}JamesTKirk", parser.parse("{}${first_name}${initial}${last_name}"));
+ assertEquals("}JamesTKirk", parser.parse("}${first_name}${initial}${last_name}"));
+
+ assertEquals("}James{{T}}Kirk", parser.parse("}${first_name}{{${initial}}}${last_name}"));
+ assertEquals("}James}T{Kirk", parser.parse("}${first_name}}${initial}{${last_name}"));
+ assertEquals("}James}T{Kirk", parser.parse("}${first_name}}${initial}{${last_name}"));
+ assertEquals("}James}T{Kirk{{}}", parser.parse("}${first_name}}${initial}{${last_name}{{}}"));
+ assertEquals("}James}T{Kirk{{}}", parser.parse("}${first_name}}${initial}{${last_name}{{}}${}"));
+
+ assertEquals("{$$something}JamesTKirk", parser.parse("{$$something}${first_name}${initial}${last_name}"));
assertEquals("${", parser.parse("${"));
assertEquals("}", parser.parse("}"));
assertEquals("Hello ${ this is a test.", parser.parse("Hello ${ this is a test."));