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 {