You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2008/05/21 21:28:01 UTC

svn commit: r658822 - in /db/derby/code/trunk/java: engine/org/apache/derby/iapi/services/loader/ClassInspector.java testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java

Author: rhillegas
Date: Wed May 21 12:28:00 2008
New Revision: 658822

URL: http://svn.apache.org/viewvc?rev=658822&view=rev
Log:
DERBY-3652: Stop widening Strings to Objects when matching SQL routine signatures to Java method signatures.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/loader/ClassInspector.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/loader/ClassInspector.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/loader/ClassInspector.java?rev=658822&r1=658821&r2=658822&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/loader/ClassInspector.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/loader/ClassInspector.java Wed May 21 12:28:00 2008
@@ -53,6 +53,9 @@
 		 "java.lang.Short", "java.lang.Integer", "java.lang.Long",
 		 "java.lang.Float", "java.lang.Double"};
 
+    private static final String OBJECT_TYPE_NAME = "java.lang.Object";
+    private static final String STRING_TYPE_NAME = "java.lang.String";
+
 	private final ClassFactory cf;
 
 	/**
@@ -945,7 +948,27 @@
 	 **/
 	protected boolean classConvertableFromTo(Class fromClass, Class toClass, boolean mixTypes) {
 
-		if (toClass.isAssignableFrom(fromClass)) {
+        //
+        // Don't allow widening of String to Object. Otherwise, the SQL
+        // signature
+        //
+        //    f( a varchar( 10 ) ) returns varchar( 10 )
+        //
+        // will incorrectly match the Java signature
+        //
+        //   public static String f( Object a )
+        //
+        // For a description of the ANSI signature matching rules, see
+        // DERBY-3652.
+        //
+		if (
+            !(
+              STRING_TYPE_NAME.equals( fromClass.getName() ) &&
+              OBJECT_TYPE_NAME.equals( toClass.getName() )
+              ) &&
+            toClass.isAssignableFrom(fromClass)
+            )
+        {            
 			return true;
 		}
 

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java?rev=658822&r1=658821&r2=658822&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AnsiSignatures.java Wed May 21 12:28:00 2008
@@ -546,6 +546,6 @@
     public  static  String   varchar_String_String( Long a ) { return "-1"; }
     public  static  String   varchar_String_String( Float a ) { return "-1"; }
     public  static  String   varchar_String_String( Double a ) { return "-1"; }
-    //    public  static  String   varchar_String_String( Object a ) { return "-1"; }
+    public  static  String   varchar_String_String( Object a ) { return "-1"; }
     
 }