You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by al...@apache.org on 2012/08/09 18:01:30 UTC

svn commit: r1371268 - in /openjpa/branches: 2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java 2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Author: allee8285
Date: Thu Aug  9 16:01:30 2012
New Revision: 1371268

URL: http://svn.apache.org/viewvc?rev=1371268&view=rev
Log:
OPENJPA-2242 - Extends procedure call parameter String cast length if value length is greater than the default length

Modified:
    openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
    openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java

Modified: openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?rev=1371268&r1=1371267&r2=1371268&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java (original)
+++ openjpa/branches/2.0.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java Thu Aug  9 16:01:30 2012
@@ -212,7 +212,7 @@ public class DB2Dictionary
 
         // ... and finish the cast
         if (toCast) {
-            Class c = ((Lit) val).getType();
+            Class<?> c = ((Lit) val).getType();
             int javaTypeCode = JavaTypes.getTypeCode(c);
             int jdbcTypeCode = getJDBCType(javaTypeCode, false);
             String typeName = getTypeName(jdbcTypeCode);
@@ -221,7 +221,7 @@ public class DB2Dictionary
             // if the literal is a string, use the default char col size
             // in the cast statement.
             if (String.class.equals(c))
-                selectSQL.append("(" + characterColumnSize + ")");
+                selectSQL.append("(" + getCastStringColumnSize(val) + ")");
 
             selectSQL.append(")");
         }
@@ -780,7 +780,7 @@ public class DB2Dictionary
         String type = getTypeName(getJDBCType(JavaTypes.getTypeCode(val
             .getType()), false));
         if (String.class.equals(val.getType()))
-            type = type + "(" + characterColumnSize + ")";
+            type = type + "(" + getCastStringColumnSize(val) + ")";
         fstring = "CAST(? AS " + type + ")";
         return fstring;
     }
@@ -908,7 +908,7 @@ public class DB2Dictionary
                 // case "(?" - convert to "CAST(? AS type"
                 String typeName = getTypeName(type);
                 if (String.class.equals(val.getType()))
-                    typeName = typeName + "(" + characterColumnSize + ")";
+                    typeName = typeName + "(" + getCastStringColumnSize(val) + ")";
                 String str = "CAST(? AS " + typeName + ")";
                 buf.replaceSqlString(sqlString.length() - 1,
                         sqlString.length(), str);
@@ -943,7 +943,7 @@ public class DB2Dictionary
     String nullSafe(String s) {
         return s == null ? "" : s;
     }
-    
+
     public void insertBlobForStreamingLoad(Row row, Column col, 
             JDBCStore store, Object ob, Select sel) throws SQLException {
         if (ob != null) {
@@ -1084,4 +1084,18 @@ public class DB2Dictionary
             }
         }
     }
+
+    private int getCastStringColumnSize(Object val) {
+        int colSize = characterColumnSize;
+        if (val instanceof Lit) {
+            String literal = (String) ((Lit) val).getValue();
+            if (literal != null) {
+                int literalLen = literal.length();
+                if (literalLen > characterColumnSize) {
+                    colSize = literalLen;
+                }
+            }
+        }
+        return colSize;
+    }
 }

Modified: openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?rev=1371268&r1=1371267&r2=1371268&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java (original)
+++ openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java Thu Aug  9 16:01:30 2012
@@ -219,7 +219,7 @@ public class DB2Dictionary
             // if the literal is a string, use the default char col size
             // in the cast statement.
             if (String.class.equals(c))
-                selectSQL.append("(" + characterColumnSize + ")");
+                selectSQL.append("(" + getCastStringColumnSize(val) + ")");
 
             selectSQL.append(")");
         }
@@ -799,7 +799,7 @@ public class DB2Dictionary
         String type = getTypeName(getJDBCType(JavaTypes.getTypeCode(val
             .getType()), false));
         if (String.class.equals(val.getType()))
-            type = type + "(" + characterColumnSize + ")";
+            type = type + "(" + getCastStringColumnSize(val) + ")";
         fstring = "CAST(? AS " + type + ")";
         return fstring;
     }
@@ -927,7 +927,7 @@ public class DB2Dictionary
                 // case "(?" - convert to "CAST(? AS type"
                 String typeName = getTypeName(type);
                 if (String.class.equals(val.getType()))
-                    typeName = typeName + "(" + characterColumnSize + ")";
+                    typeName = typeName + "(" + getCastStringColumnSize(val) + ")";
                 String str = "CAST(? AS " + typeName + ")";
                 buf.replaceSqlString(sqlString.length() - 1,
                         sqlString.length(), str);
@@ -1076,6 +1076,20 @@ public class DB2Dictionary
         }
     }
 
+    private int getCastStringColumnSize(Object val) {
+        int colSize = characterColumnSize;
+        if (val instanceof Lit) {
+            String literal = (String) ((Lit) val).getValue();
+            if (literal != null) {
+                int literalLen = literal.length();
+                if (literalLen > characterColumnSize) {
+                    colSize = literalLen;
+                }
+            }
+        }
+        return colSize;
+    }
+
     @Override
     public void insertBlobForStreamingLoad(Row row, Column col, 
             JDBCStore store, Object ob, Select sel) throws SQLException {