Revision: 3100
http://datanucleus.svn.sourceforge.net/datanucleus/?rev=3100&view=rev
Author: andy_jefferson
Date: 2008-09-05 09:09:04 +0000 (Fri, 05 Sep 2008)
Log Message:
-----------
[NUCNEODATIS-15] Cater for JPQL candidateAlias.field syntax.
Modified Paths:
--------------
platform/store.neodatis/trunk/src/java/org/datanucleus/store/neodatis/query/QueryToCriteriaMapper.java
Modified: platform/store.neodatis/trunk/src/java/org/datanucleus/store/neodatis/query/QueryToCriteriaMapper.java
===================================================================
--- platform/store.neodatis/trunk/src/java/org/datanucleus/store/neodatis/query/QueryToCriteriaMapper.java 2008-09-05 08:56:54 UTC (rev 3099)
+++ platform/store.neodatis/trunk/src/java/org/datanucleus/store/neodatis/query/QueryToCriteriaMapper.java 2008-09-05 09:09:04 UTC (rev 3100)
@@ -712,6 +712,25 @@
}
/**
+ * Convenience method that takes a PrimaryExpression and returns the path to apply to the
+ * query in terms of a "descend" argument.
+ * @param expr The PrimaryExpression
+ * @return The path
+ */
+ private String getPathForPrimaryExpression(PrimaryExpression expr)
+ {
+ // Find the path to apply. This currently only caters for direct fields, and fields of the candidate
+ // TODO Cater for other candidate aliases from JPQL "FROM" clause
+ String firstTuple = (String)expr.getTuples().iterator().next();
+ String exprPath = expr.getId();
+ if (firstTuple.equals(candidateAlias))
+ {
+ exprPath = exprPath.substring(candidateAlias.length()+1);
+ }
+ return exprPath;
+ }
+
+ /**
* Convenience method to convert a relational expression of "field {operator} value" into
* the equivalent Criteria query. Supports OP_GT, OP_LT, OP_GTEQ, OP_LTEQ, OP_EQ, OP_NOTEQ.
* @param op operator
@@ -724,7 +743,7 @@
{
Object boolExpr = null;
- String field = fieldPrimary.getId();
+ String fieldPath = getPathForPrimaryExpression(fieldPrimary);
// TODO NeoDatis Criteria 1.9.0-beta-2 doesn't do type conversion so if a field is "int"
// and our literal is a "long" then it gives ClassCastException!
if (literalValue instanceof Integer)
@@ -732,27 +751,27 @@
int intVal = ((Integer)literalValue).intValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, intVal);
+ boolExpr = Where.gt(fieldPath, intVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, intVal);
+ boolExpr = Where.lt(fieldPath, intVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, intVal);
+ boolExpr = Where.ge(fieldPath, intVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, intVal);
+ boolExpr = Where.le(fieldPath, intVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, intVal);
+ boolExpr = Where.equal(fieldPath, intVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, intVal));
+ boolExpr = Where.not(Where.equal(fieldPath, intVal));
}
}
else if (literalValue instanceof Long)
@@ -760,27 +779,27 @@
long longVal = ((Long)literalValue).longValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, longVal);
+ boolExpr = Where.gt(fieldPath, longVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, longVal);
+ boolExpr = Where.lt(fieldPath, longVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, longVal);
+ boolExpr = Where.ge(fieldPath, longVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, longVal);
+ boolExpr = Where.le(fieldPath, longVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, longVal);
+ boolExpr = Where.equal(fieldPath, longVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, longVal));
+ boolExpr = Where.not(Where.equal(fieldPath, longVal));
}
}
else if (literalValue instanceof Short)
@@ -788,27 +807,27 @@
short shortVal = ((Short)literalValue).shortValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, shortVal);
+ boolExpr = Where.gt(fieldPath, shortVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, shortVal);
+ boolExpr = Where.lt(fieldPath, shortVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, shortVal);
+ boolExpr = Where.ge(fieldPath, shortVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, shortVal);
+ boolExpr = Where.le(fieldPath, shortVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, shortVal);
+ boolExpr = Where.equal(fieldPath, shortVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, shortVal));
+ boolExpr = Where.not(Where.equal(fieldPath, shortVal));
}
}
else if (literalValue instanceof Double)
@@ -816,27 +835,27 @@
double doubleVal = ((Double)literalValue).doubleValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, doubleVal);
+ boolExpr = Where.gt(fieldPath, doubleVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, doubleVal);
+ boolExpr = Where.lt(fieldPath, doubleVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, doubleVal);
+ boolExpr = Where.ge(fieldPath, doubleVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, doubleVal);
+ boolExpr = Where.le(fieldPath, doubleVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, doubleVal);
+ boolExpr = Where.equal(fieldPath, doubleVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, doubleVal));
+ boolExpr = Where.not(Where.equal(fieldPath, doubleVal));
}
}
else if (literalValue instanceof Float)
@@ -844,27 +863,27 @@
float floatVal = ((Float)literalValue).floatValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, floatVal);
+ boolExpr = Where.gt(fieldPath, floatVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, floatVal);
+ boolExpr = Where.lt(fieldPath, floatVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, floatVal);
+ boolExpr = Where.ge(fieldPath, floatVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, floatVal);
+ boolExpr = Where.le(fieldPath, floatVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, floatVal);
+ boolExpr = Where.equal(fieldPath, floatVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, floatVal));
+ boolExpr = Where.not(Where.equal(fieldPath, floatVal));
}
}
else if (literalValue instanceof Byte)
@@ -872,27 +891,27 @@
byte byteVal = ((Byte)literalValue).byteValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, byteVal);
+ boolExpr = Where.gt(fieldPath, byteVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, byteVal);
+ boolExpr = Where.lt(fieldPath, byteVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, byteVal);
+ boolExpr = Where.ge(fieldPath, byteVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, byteVal);
+ boolExpr = Where.le(fieldPath, byteVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, byteVal);
+ boolExpr = Where.equal(fieldPath, byteVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, byteVal));
+ boolExpr = Where.not(Where.equal(fieldPath, byteVal));
}
}
else if (literalValue instanceof Character)
@@ -900,70 +919,70 @@
char charVal = ((Character)literalValue).charValue();
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, charVal);
+ boolExpr = Where.gt(fieldPath, charVal);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, charVal);
+ boolExpr = Where.lt(fieldPath, charVal);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, charVal);
+ boolExpr = Where.ge(fieldPath, charVal);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, charVal);
+ boolExpr = Where.le(fieldPath, charVal);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, charVal);
+ boolExpr = Where.equal(fieldPath, charVal);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, charVal));
+ boolExpr = Where.not(Where.equal(fieldPath, charVal));
}
}
else if (literalValue instanceof Comparable)
{
if (op == Expression.OP_GT)
{
- boolExpr = Where.gt(field, (Comparable)literalValue);
+ boolExpr = Where.gt(fieldPath, (Comparable)literalValue);
}
else if (op == Expression.OP_LT)
{
- boolExpr = Where.lt(field, (Comparable)literalValue);
+ boolExpr = Where.lt(fieldPath, (Comparable)literalValue);
}
else if (op == Expression.OP_GTEQ)
{
- boolExpr = Where.ge(field, (Comparable)literalValue);
+ boolExpr = Where.ge(fieldPath, (Comparable)literalValue);
}
else if (op == Expression.OP_LTEQ)
{
- boolExpr = Where.le(field, (Comparable)literalValue);
+ boolExpr = Where.le(fieldPath, (Comparable)literalValue);
}
else if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, (Comparable)literalValue);
+ boolExpr = Where.equal(fieldPath, (Comparable)literalValue);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, (Comparable)literalValue));
+ boolExpr = Where.not(Where.equal(fieldPath, (Comparable)literalValue));
}
}
else
{
if (op == Expression.OP_EQ)
{
- boolExpr = Where.equal(field, literalValue);
+ boolExpr = Where.equal(fieldPath, literalValue);
}
else if (op == Expression.OP_NOTEQ)
{
- boolExpr = Where.not(Where.equal(field, literalValue));
+ boolExpr = Where.not(Where.equal(fieldPath, literalValue));
}
else
{
throw new NucleusException(
- "Query includes " + field + " " + op + " " + literalValue +
+ "Query includes " + fieldPath + " " + op + " " + literalValue +
" where the value is not of a supported NeoDatis query type for this relational operation");
}
}
@@ -972,32 +991,32 @@
{
if (op == Expression.OP_GT)
{
- NucleusLogger.QUERY.debug("Where.gt(" + field + ", " + literalValue + ")");
+ NucleusLogger.QUERY.debug("Where.gt(" + fieldPath + ", " + literalValue + ")");
}
else if (op == Expression.OP_LT)
{
- NucleusLogger.QUERY.debug("Where.lt(" + field + ", " + literalValue + ")");
+ NucleusLogger.QUERY.debug("Where.lt(" + fieldPath + ", " + literalValue + ")");
}
else if (op == Expression.OP_GTEQ)
{
- NucleusLogger.QUERY.debug("Where.ge(" + field + ", " + literalValue + ")");
+ NucleusLogger.QUERY.debug("Where.ge(" + fieldPath + ", " + literalValue + ")");
}
else if (op == Expression.OP_LTEQ)
{
- NucleusLogger.QUERY.debug("Where.le(" + field + ", " + literalValue + ")");
+ NucleusLogger.QUERY.debug("Where.le(" + fieldPath + ", " + literalValue + ")");
}
else if (op == Expression.OP_EQ)
{
- NucleusLogger.QUERY.debug("Where.equal(" + field + ", " + literalValue + ")");
+ NucleusLogger.QUERY.debug("Where.equal(" + fieldPath + ", " + literalValue + ")");
}
else if (op == Expression.OP_NOTEQ)
{
- NucleusLogger.QUERY.debug("Where.not(Where.equal(" + field + ", " + literalValue + "))");
+ NucleusLogger.QUERY.debug("Where.not(Where.equal(" + fieldPath + ", " + literalValue + "))");
}
}
if (boolExpr == null)
{
- throw new NucleusException("Unable to convert " + field + " " + op + " " + literalValue +
+ throw new NucleusException("Unable to convert " + fieldPath + " " + op + " " + literalValue +
" into Criteria query constraint");
}
@@ -1005,7 +1024,7 @@
}
/**
- * Convenience method to convert a relational expression of "field.method() {operator} value" into
+ * Convenience method to convert a relational expression of "fieldPath.method() {operator} value" into
* the equivalent Criteria query. Supports OP_GT, OP_LT, OP_GTEQ, OP_LTEQ, OP_EQ, OP_NOTEQ.
* @param op operator
* @param invokeExpr the invoke (field) expression
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|