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