Hi Tony,

If expressions supported database-specific functions, it would break
in-memory evaluation:

http://cayenne.apache.org/doc30/in-memory-evaluation.html

In general, expressions are Java/mapping-oriented and
database-independent.  If you need to do DB-specific things,
SQLTemplate is your ticket for that.

Thanks,

mrg


On Tue, May 3, 2011 at 1:49 PM, Tony Dahbura <[email protected]> wrote:
> Ok-Would be nice maybe in a future release to support passing these through?
>
> Tony
>
>
> ----- Original Message -----
> From: "Michael Gentry" <[email protected]>
> To: [email protected], "Tony Dahbura" <[email protected]>
> Sent: Tuesday, May 3, 2011 8:45:23 AM
> Subject: Re: QUestion with select expressions
>
> Hi Tony,
>
> Cayenne expressions don't support DB functions.  You were on the
> correct path with the SQLTemplate which allows you to do more
> DB-specific things.
>
> mrg
>
>
> On Tue, May 3, 2011 at 7:42 AM, Tony Dahbura <[email protected]> wrote:
>> I am trying to execute a where clause that includes calling a database 
>> function, in this case SHA2 for mysql.
>>
>> My code looks like the following:
>> HashMap<String,String> parameters = new HashMap<String,String>(1);
>> parameters.put("userid", uid);
>> parameters.put("password", pwd);
>>
>> Expression expression = Expression.fromString("userid = $userid and 
>> password=SHA2('$password',256)");
>> SelectQuery query = new 
>> SelectQuery(Adminuser.class,expression.expWithParameters(parameters));
>>
>> List values = context.performQuery(query);
>>
>> Upon execution I immediately get an error that says:
>> Exception in thread "main" org.apache.cayenne.exp.ExpressionException: 
>> [v.3.0.1 Aug 25 2010 19:42:04] Encountered " "(" "( "" at line 1, column 35.
>> Was expecting one of:
>> <EOF>
>> "or" ...
>> "and" ...
>> "+" ...
>> "-" ...
>> "*" ...
>> "/" ...
>>
>> at org.apache.cayenne.exp.Expression.fromString(Expression.java:139)
>> at trycayenne.validateAdminUserAndPassword(trycayenne.java:121)
>> at trycayenne.main(trycayenne.java:24)
>> Caused by: org.apache.cayenne.exp.parser.ParseException: Encountered " "(" 
>> "( "" at line 1, column 35.
>> Was expecting one of:
>> <EOF>
>> "or" ...
>> "and" ...
>> "+" ...
>> "-" ...
>> "*" ...
>> "/" ...
>>
>> at 
>> org.apache.cayenne.exp.parser.ExpressionParser.generateParseException(ExpressionParser.java:1487)
>>
>> Is Cayenne not able to pass database function calls in this kind of query? I 
>> got it to work using the SQLTemplate rawSelect and typing the whole select 
>> expression into the system, but was hoping I could use the Expression syntax.
>>
>> Should I pass the function name in a different manner?
>>
>> Thanks,
>> Tony
>>
>>
>>
>>
>>
>>
>

Reply via email to