You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by ka...@apache.org on 2009/03/29 17:46:56 UTC

svn commit: r759710 - in /ibatis/trunk/java/ibatis-2/ibatis-2-core: build/ src/com/ibatis/sqlmap/engine/mapping/parameter/ test/com/ibatis/sqlmap/engine/mapping/ test/com/ibatis/sqlmap/engine/mapping/parameter/

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