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."));