You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jg...@apache.org on 2012/08/24 04:33:32 UTC
svn commit: r1376811 - in
/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps:
Args.java DatastoreFunction.java UnaryOp.java
Author: jgrassel
Date: Fri Aug 24 02:33:32 2012
New Revision: 1376811
URL: http://svn.apache.org/viewvc?rev=1376811&view=rev
Log:
OPENJPA-2149: Criteria.function adds wrong casts to parameters making it unusable
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/DatastoreFunction.java
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/UnaryOp.java
Modified: openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java?rev=1376811&r1=1376810&r2=1376811&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java (original)
+++ openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/Args.java Fri Aug 24 02:33:32 2012
@@ -171,11 +171,17 @@ public class Args
return 0;
}
- public void appendTo(Select sel, ExpContext ctx, ExpState state,
- SQLBuffer sql, int index) {
+ public void appendTo(Select sel, ExpContext ctx, ExpState state, SQLBuffer sql, int index) {
+ appendTo(sel, ctx, state, sql, index, null);
+ }
+
+ public void appendTo(Select sel, ExpContext ctx, ExpState state, SQLBuffer sql, int index, String operator) {
ArgsExpState astate = (ArgsExpState) state;
for (int i = 0; i < _args.length; i++) {
_args[i].appendTo(sel, ctx, astate.states[i], sql, index);
+ if( operator != null ) {
+ sql.addCastForParam(operator, _args[i]);
+ }
if (i < _args.length-1)
sql.append(", ");
}
Modified: openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/DatastoreFunction.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/DatastoreFunction.java?rev=1376811&r1=1376810&r2=1376811&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/DatastoreFunction.java (original)
+++ openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/DatastoreFunction.java Fri Aug 24 02:33:32 2012
@@ -46,16 +46,12 @@ public class DatastoreFunction extends U
public void appendTo(Select sel, ExpContext ctx, ExpState state,
SQLBuffer sql, int index) {
Args args = (Args) getValue();
- if (!ctx.store.getDBDictionary().requiresCastForMathFunctions || args.getValues().length == 1)
+ if (!ctx.store.getDBDictionary().requiresCastForMathFunctions || args.getValues().length == 1) {
super.appendTo(sel, ctx, state, sql, index);
- else {
+ } else {
sql.append(getOperator());
sql.append("(");
- args.appendTo(sel, ctx, state, sql, 0);
- Val[] vals = args.getVals();
- for (int i = 1; i < vals.length; i++) {
- sql.addCastForParam(getOperator(), vals[i]);
- }
+ args.appendTo(sel, ctx, state, sql, 0, getOperator());
sql.append(")");
}
}
Modified: openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/UnaryOp.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/UnaryOp.java?rev=1376811&r1=1376810&r2=1376811&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/UnaryOp.java (original)
+++ openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/exps/UnaryOp.java Fri Aug 24 02:33:32 2012
@@ -139,7 +139,16 @@ abstract class UnaryOp
sql.append(getOperator());
sql.append(_noParen ? " " : "(");
_val.appendTo(sel, ctx, state, sql, 0);
- sql.addCastForParam(getOperator(), _val);
+
+ // OPENJPA-2149: If _val (Val) is an 'Arg', we need to get the Val[]
+ // from it, and the single element it contains because the
+ // 'addCastForParam' method gets the 'type' from the Val it receives.
+ // In the case where _val is an Arg, when addCastForParam gets the
+ // type, it will be getting the type of the Val (an Object) rather
+ // the type of the Arg.
+ sql.addCastForParam(getOperator(),
+ (_val instanceof Args) ? (((Args) _val).getVals())[0]
+ : _val);
if (!_noParen)
sql.append(")");
}