mirror of https://github.com/apache/openjpa.git
OPENJPA-338. Committing Teresa's patch for correcting CASTing with DB2.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@570240 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0a8239e6a7
commit
953df22c39
|
@ -696,4 +696,45 @@ public class DB2Dictionary
|
|||
}
|
||||
buf.append(") - 1)");
|
||||
}
|
||||
|
||||
/**
|
||||
* Cast the specified value to the specified type.
|
||||
*
|
||||
* @param buf the buffer to append the cast to
|
||||
* @param val the value to cast
|
||||
* @param type the type of the case, e.g. {@link Types#NUMERIC}
|
||||
*/
|
||||
public void appendCast(SQLBuffer buf, FilterValue val, int type) {
|
||||
|
||||
// Convert the cast function: "CAST({0} AS {1})"
|
||||
int firstParam = castFunction.indexOf("{0}");
|
||||
String pre = castFunction.substring(0, firstParam); // "CAST("
|
||||
String mid = castFunction.substring(firstParam + 3);
|
||||
int secondParam = mid.indexOf("{1}");
|
||||
String post;
|
||||
if (secondParam > -1) {
|
||||
post = mid.substring(secondParam + 3); // ")"
|
||||
mid = mid.substring(0, secondParam); // " AS "
|
||||
} else
|
||||
post = "";
|
||||
|
||||
// No need to add CAST if the value is a constant
|
||||
if (val instanceof Lit || val instanceof Param) {
|
||||
buf.append(pre);
|
||||
val.appendTo(buf);
|
||||
buf.append(mid);
|
||||
buf.append(getTypeName(type));
|
||||
appendLength(buf, type);
|
||||
buf.append(post);
|
||||
} else {
|
||||
val.appendTo(buf);
|
||||
String sqlString = buf.getSQL(false);
|
||||
if (sqlString.endsWith("?")) {
|
||||
// case "(?" - convert to "CAST(? AS type"
|
||||
String str = "CAST(? AS " + getTypeName(type) + ")";
|
||||
buf.replaceSqlString(sqlString.length() - 1,
|
||||
sqlString.length(), str);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -606,6 +606,17 @@ public final class SQLBuffer
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace current buffer string with the new string
|
||||
*
|
||||
* @param start replace start position
|
||||
* @param end replace end position
|
||||
* @param newString
|
||||
*/
|
||||
public void replaceSqlString(int start, int end, String newString) {
|
||||
_sql.replace(start, end, newString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a subselect.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue