cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: SQLTemplate Velocity lexical error
Date Thu, 19 May 2011 00:00:11 GMT
Not commenting on the overall solution (EJBQL shortcomings are probably a topic of a seaparate
thread), but Expressions can store parameters, just like queries:

Expression e = ...
Expression eWithParameters = e.expWithParameters(parametersMap);

Andrus

On May 17, 2011, at 12:13 PM, Laurent Marchal wrote:

> To be more clear what we've done in our lightweight non-persitent object factories is
to convert Cayenne Expressions into SQL and append them to the SQLtemplate query. So we don't
have control over the parameters passed since they are Cayenne Expressions.
> 
> I know this is awful but Cayenne was not providing any solutions for this, and it was
done when Cayenne EJBQL support was not there yet. Then later we had bugs in the EJBQ so we
kept using Cayenne Expressions everywhere in our code but had to make this dirty SQLTemplate
+ Expressions mix workaround.
> 
> Laurent.
> 
> Le 05/17/2011 10:15 AM, Robert Zeigler a écrit :
>> ... I'm still not 100% clear why this precludes using SQLTemplate parameters? If
you're generating the SQL, you can also generate the parameter in the SQL... right?
>> 
>> Robert
>> 
>> On May 17, 2011, at 5/179:52 AM , Laurent Marchal wrote:
>> 
>>> I can't use SQL parameters becauseI do some dirty stuff : I have factories of
lightweight non-persitent objects created from datarows where the SQL is generated. I'm not
proud of this but  we didn't find any other solutions with cayenne...
>>> 
>>> Thanks
>>> Laurent.
>>> 
>>> 
>>> Le 05/16/2011 03:52 PM, Robert Zeigler a écrit :
>>>> Why can't you use sql parameters?
>>>> 
>>>> WHERE SDEPTHR.JOBNAME #bindEqual($val);
>>>> 
>>>> and then when you execute the query, update the parameter map with key:"val"
and value: "Test_*@#*"?
>>>> 
>>>> Robert
>>>> 
>>>> On May 16, 2011, at 5/163:35 PM , Laurent Marchal wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>>    I am using a simple SQLTemplate select query but it fails because
of special charachters :
>>>>> 
>>>>> SELECT * FROM SDEPTHR  INNER JOIN THRESH ON SDEPTHR.DEPTHRID=THRESH.THRESHID
 WHERE SDEPTHR.JOBNAME = 'Test_*@\#*'
>>>>> 
>>>>> Error returned :
>>>>> [v.3.0.1 Aug 25 2010 19:58:47] Error parsing template 'SELECT * FROM
SDEPTHR  INNER JOIN THRESH ON SDEPTHR.DEPTHRID=THRESH.THRESHID  WHERE SDEPTHR.JOBNAME = 'Test_*@\#*''
: Lexical error: org.apache.velocity.runtime.parser.TokenMgrError: Lexical error at line 1,
column 115.  Encountered:<EOF>   after : ""
>>>>> 
>>>>> It looks like the '#*' is the problem but I can't find a way to properly
escape those characters<http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html#stringliterals>.
I know using the SQLTemplate parameters would solve this problem but I can't do that.
>>>>> Is there a way to tell cayenne to not parse the query with velocity or
to escape properly the query ?
>>>>> 
>>>>> Thank you.
>>>>> Laurent.
> 


Mime
View raw message