Author: kai
Date: Sun Mar 29 15:46:55 2009
New Revision: 759710

URL: http://svn.apache.org/viewvc?rev=759710&view=rev
Log:
IBATIS-389 (Unbalanced # in SQL causes unclear/misleading error message)
- added test for reproducing
- fixed the issue by checking if there are more tokens before fetching the next 
token, if no more tokens available throw a meaningfull exception

Added:
    
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/
    
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/
    
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java
   (with props)
Modified:
    ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties
    
ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParser.java

Modified: ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties?rev=759710&r1=759709&r2=759710&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties (original)
+++ ibatis/trunk/java/ibatis-2/ibatis-2-core/build/version.properties Sun Mar 
29 15:46:55 2009
@@ -1,5 +1,5 @@
 #Build version info
-#Thu Mar 12 22:04:27 MDT 2009
+#Sun Mar 29 17:24:27 CEST 2009
 version=2.3.4
-buildDate=2009/03/12 22\:04
-buildNum=732
+buildDate=2009/03/29 17\:24
+buildNum=733

Modified: 
ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParser.java?rev=759710&r1=759709&r2=759710&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-2/ibatis-2-core/src/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParser.java
 Sun Mar 29 15:46:55 2009
@@ -1,5 +1,9 @@
 package com.ibatis.sqlmap.engine.mapping.parameter;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
 import com.ibatis.common.beans.Probe;
 import com.ibatis.common.beans.ProbeFactory;
 import com.ibatis.common.resources.Resources;
@@ -11,10 +15,6 @@
 import com.ibatis.sqlmap.engine.type.TypeHandler;
 import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
 public class InlineParameterMapParser {
 
   private static final Probe PROBE = ProbeFactory.getProbe();
@@ -52,9 +52,13 @@
 
           mappingList.add(mapping);
           newSqlBuffer.append("?");
-          token = parser.nextToken();
-          if (!PARAMETER_TOKEN.equals(token)) {
-            throw new SqlMapException("Unterminated inline parameter in mapped 
statement (" + "statement.getId()" + ").");
+          boolean hasMoreTokens = parser.hasMoreTokens();
+          if (hasMoreTokens)
+              token = parser.nextToken();
+          if (!hasMoreTokens || !PARAMETER_TOKEN.equals(token)) {
+              throw new SqlMapException(
+                     "Unterminated inline parameter in mapped statement near '"
+                     + newSqlBuffer.toString() + "'");
           }
           token = null;
         }

Added: 
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java?rev=759710&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java
 (added)
+++ 
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java
 Sun Mar 29 15:46:55 2009
@@ -0,0 +1,75 @@
+package com.ibatis.sqlmap.engine.mapping.parameter;
+
+import junit.framework.TestCase;
+
+import com.ibatis.sqlmap.engine.mapping.sql.SqlText;
+import com.ibatis.sqlmap.engine.type.TypeHandlerFactory;
+
+public class InlineParameterMapParserTest extends TestCase {
+
+    public void testParseInlineParameterMapTypeHandlerFactoryString() {
+       InlineParameterMapParser parser = new InlineParameterMapParser();
+       SqlText parseInlineParameterMap = parser.parseInlineParameterMap(
+               new TypeHandlerFactory(),
+               "insert into foo (myColumn) values (1)");
+       assertEquals("insert into foo (myColumn) values (1)",
+               parseInlineParameterMap.getText());
+
+       parseInlineParameterMap = parser.parseInlineParameterMap(
+               new TypeHandlerFactory(),
+               "insert into foo (myColumn) values (#myVar#)");
+       assertEquals("insert into foo (myColumn) values (?)",
+               parseInlineParameterMap.getText());
+
+       parseInlineParameterMap = parser.parseInlineParameterMap(
+               new TypeHandlerFactory(),
+               "insert into foo (myColumn) values (#myVar:javaType=int#)");
+       assertEquals("insert into foo (myColumn) values (?)",
+               parseInlineParameterMap.getText());
+       
+       try {
+           parseInlineParameterMap = parser.parseInlineParameterMap(
+                   new TypeHandlerFactory(),
+                   "insert into foo (myColumn) values (#myVar)");
+           fail();
+       } catch (Exception e) {
+           assertEquals(
+                   "Unterminated inline parameter in mapped statement near 
'insert into foo (myColumn) values (?'",
+                   e.getMessage());
+       }
+       
+       try {
+           parseInlineParameterMap = parser.parseInlineParameterMap(
+                   new TypeHandlerFactory(),
+                   "insert into foo (myColumn) values (#myVar:javaType=int)");
+           fail();
+       } catch (Exception e) {
+           assertEquals(
+                   "Unterminated inline parameter in mapped statement near 
'insert into foo (myColumn) values (?'",
+                   e.getMessage());
+       }
+
+       try {
+           parseInlineParameterMap = parser.parseInlineParameterMap(
+                   new TypeHandlerFactory(),
+                   "insert into foo (myColumn) values (myVar#)");
+           fail();
+       } catch (Exception e) {
+           assertEquals(
+                   "Unterminated inline parameter in mapped statement near 
'insert into foo (myColumn) values (myVar?'",
+                   e.getMessage());
+       }
+
+       try {
+           parseInlineParameterMap = parser.parseInlineParameterMap(
+                   new TypeHandlerFactory(),
+                   "insert into foo (myColumn) values (#myVar##)");
+           fail();
+       } catch (Exception e) {
+           assertEquals(
+                   "Unterminated inline parameter in mapped statement near 
'insert into foo (myColumn) values (??'",
+                   e.getMessage());
+       }
+    }
+
+}

Propchange: 
ibatis/trunk/java/ibatis-2/ibatis-2-core/test/com/ibatis/sqlmap/engine/mapping/parameter/InlineParameterMapParserTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to