On 13/08/2008, at 5:29 PM, Lachlan Deck wrote:

On 13/08/2008, at 5:17 PM, Lachlan Deck wrote:

Hi there,

Just wondering why the above produces stuff like (db:isDeleted = null) rather than (isDeleted = null)?
The former obviously can't be evaluated against the database.

Sorry - better question: what's the recommended way of taking an Expression (on the server side) and converting to an sql equivalent (doing all the relevant transformations for types and operators etc)?

I'm creating an EJBQLQuery as follows...

StringBuilder ejbqlBuff = new StringBuilder();
ejbqlBuff.append("SELECT " + this.statsType + "(" + dbAttributeName + ") FROM ").append(dbEntity.getName()).append(" a");
if (expression != null) {
        ejbqlBuff.append(" WHERE ").append(expression.toEJBQL("a"));
}
// buff equals for example: SELECT count(*) FROM CourseClass a WHERE (a.isDeleted = null) or (a.isDeleted = false)

DataObjectUtils.objectForQuery(new EJBQLQuery(ejbqlBuff.toString()));

I get the following complaining about the asterix '*'. Is that a bug?

     [java]
[java] 13/08/2008 17:57:29 com.caucho.hessian.server.HessianSkeleton invoke [java] WARNING: org.apache.cayenne.ejbql.EJBQLException: [v.3.0- SNAPSHOT Jul 09 2008 01:28:38] Error parsing EJB QL statement [java] org.apache.cayenne.ejbql.EJBQLException: [v.3.0-SNAPSHOT Jul 09 2008 01:28:38] Error parsing EJB QL statement [java] at org.apache.cayenne.ejbql.parser.EJBQL $EJBQLDefaultParser.compile(EJBQL.java:31) [java] at org.apache.cayenne.query.EJBQLQuery.getExpression(EJBQLQuery.java:86) [java] at org .apache .cayenne.query.EJBQLQueryMetadata.resolve(EJBQLQueryMetadata.java:45) [java] at org.apache.cayenne.query.EJBQLQuery.getMetaData(EJBQLQuery.java:52) [java] at org.apache.cayenne.query.IndirectQuery.getMetaData(IndirectQuery.java: 43) [java] at org .apache .cayenne .util.ObjectContextQueryAction.<init>(ObjectContextQueryAction.java:79) [java] at org .apache .cayenne .access.DataContextQueryAction.<init>(DataContextQueryAction.java:49) [java] at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1336) [java] at org.apache.cayenne.access.DataContext.performQuery(DataContext.java: 1325) [java] at org.apache.cayenne.DataObjectUtils.objectForQuery(DataObjectUtils.java: 274) [java] at ish.persistence.StatsQuery.queryResult(StatsQuery.java:127) [java] at ish.persistence.StatsQuery.intResult(StatsQuery.java: 116) [java] at ish .oncourse .server .AngelServerQueryServiceImpl .getIntResult(AngelServerQueryServiceImpl.java:27) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun .reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39) [java] at sun .reflect .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)
     [java]     at java.lang.reflect.Method.invoke(Method.java:585)
[java] at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java: 180) [java] at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java: 109) [java] at com.caucho.hessian.server.HessianServlet.service(HessianServlet.java: 396) [java] at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1097) [java] at ish.oncourse.server.SecurityFilter.doFilter(SecurityFilter.java:57) [java] at org.mortbay.jetty.servlet.ServletHandler $CachedChain.doFilter(ServletHandler.java:1088) [java] at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) [java] at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 216) [java] at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) [java] at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) [java] at org .mortbay .jetty .handler.ContextHandlerCollection.handle(ContextHandlerCollection.java: 206) [java] at org .mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java: 114) [java] at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
     [java]     at org.mortbay.jetty.Server.handle(Server.java:324)
[java] at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) [java] at org.mortbay.jetty.HttpConnection $RequestHandler.content(HttpConnection.java:843) [java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:729) [java] at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) [java] at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) [java] at org.mortbay.jetty.bio.SocketConnector $Connection.run(SocketConnector.java:228) [java] at org.mortbay.thread.QueuedThreadPool $PoolThread.run(QueuedThreadPool.java:488) [java] Caused by: org.apache.cayenne.ejbql.parser.ParseException: Encountered "*" at line 1, column 14.
     [java] Was expecting one of:
     [java]     "+" ...
     [java]     "-" ...
     [java]     <DECIMAL_LITERAL> ...
     [java]     <INTEGER_LITERAL> ...
     [java]     ":" ...
     [java]     "?" ...
     [java]     "db:" ...
     [java]     <IDENTIFIER> ...
     [java]     "(" ...
     [java]     "LENGTH" ...
     [java]     "LOCATE" ...
     [java]     "ABS" ...
     [java]     "SQRT" ...
     [java]     "MOD" ...
     [java]     "SIZE" ...
     [java]     "AVG" ...
     [java]     "MAX" ...
     [java]     "MIN" ...
     [java]     "SUM" ...
     [java]     "COUNT" ...
     [java]     "SELECT" ...
     [java]     "DISTINCT" ...
     [java]
[java] at org .apache.cayenne.ejbql.parser.EJBQL.generateParseException(EJBQL.java: 9409) [java] at org.apache.cayenne.ejbql.parser.EJBQL.jj_consume_token(EJBQL.java:9286) [java] at org.apache.cayenne.ejbql.parser.EJBQL.aggregate_path(EJBQL.java:1384) [java] at org.apache.cayenne.ejbql.parser.EJBQL.count(EJBQL.java:1438) [java] at org .apache .cayenne.ejbql.parser.EJBQL.aggregate_select_expression(EJBQL.java:1331) [java] at org.apache.cayenne.ejbql.parser.EJBQL.select_expression(EJBQL.java:1016) [java] at org.apache.cayenne.ejbql.parser.EJBQL.select_expressions(EJBQL.java:969) [java] at org.apache.cayenne.ejbql.parser.EJBQL.select_clause(EJBQL.java:904) [java] at org.apache.cayenne.ejbql.parser.EJBQL.select_statement(EJBQL.java:63) [java] at org.apache.cayenne.ejbql.parser.EJBQL.parseQuery(EJBQL.java:39) [java] at org.apache.cayenne.ejbql.parser.EJBQL $EJBQLDefaultParser.compile(EJBQL.java:28)
     [java]     ... 38 more

with regards,
--

Lachlan Deck



Reply via email to