db-torque-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Raul Acevedo <r...@cantara.com>
Subject Re: Criteria.addIn on List or Object[] doesn't generate quoted strings?
Date Fri, 07 Mar 2008 17:59:15 GMT
Apparently (and unfortunately) true.  Unless someone speaks up and  
says there is a way to get Torque to do prepared statements for  
addIn, I'm going to have to convert our code to use OR instead of IN.

Raul

On Mar 7, 2008, at 7:06 AM, Brendan Miller wrote:

> Also, on the topic of addIn() and in-lists, is it true that
> Torque does not generate prepared statements with bind variables
> for the in list elements?
>
> Brendan
>
> On Thu, Mar 06, 2008 at 08:11:18PM -0500, Greg Monroe wrote:
>> I traced out the code and found that the applicable
>> section of code is the SQLExpression.processInValue
>> method.  This is called with each member of the list
>> or array specified.
>>
>> This tests if the object is a String or not.  If it's
>> a string, it calls quoteAndEscapeText.  However, if
>> it's not a String, it just calls the object's toString()
>> method.
>>
>> The problem is that there is no clean way to determine
>> if this type of object is supposed to be a quoted string
>> or an unquoted string.  Suppose that it's a list of
>> Integer or Float objects? To wrap these in quotes would
>> be wrong in this case.
>>
>> Hmm, I suppose the code could use the DataMap structure
>> to look up the SQL field type and then decide.  But that
>> assumes that the "Column" part of the IN is a true
>> table column.  Also, some thought would need to go into
>> how to make this not be a performance issue.
>>
>>
>>> -----Original Message-----
>>> From: Brendan Miller [mailto:bmiller@dotster.com]
>>> Sent: Thursday, March 06, 2008 6:54 PM
>>> To: torque-user@db.apache.org
>>> Subject: Criteria.addIn on List or Object[] doesn't generate quoted
>>> strings?
>>>
>>>
>>> I am trying to use the addIn() method of the Criteria class.
>>>
>>> I have a table with various states.  I would like to query objects
>>> whose
>>> state is in a list I define.
>>>
>>> I have defined my states thusly:
>>>
>>>     public enum State { NEW, ACTIVE, SUSPENDED, CANCELED };
>>>
>>> I have used both
>>>
>>>     crit.addIn(ServicePeer.State, new ArrayList<State> {{
>>>         add(State.NEW);
>>>         add(State.ACTIVE);
>>>     }});
>>>
>>> and
>>>
>>>     crit.addIn(ServicePeer.State, { State.NEW, State.ACTIVE });
>>>
>>> Both generate SQL as
>>>
>>> SELECT SERVICE.ID, ... FROM SERVICE WHERE SERVICE.STATE IN
>> (NEW,ACTIVE)
>>>
>>> Obviously, NEW and ACTIVE need to be quoted.  If I pass a List or
>> array
>>> of Strings, of course it works just fine.  (I know I can get a  
>>> list or
>>> array of Strings by calling .toString() on my enum values.)
>>>
>>> But the documentation says:
>>>
>>> Adds an 'IN' clause with the criteria supplied as an Object  
>>> array. For
>>> example:
>>>
>>> FOO.NAME IN ('FOO', 'BAR', 'ZOW')
>>>
>>> where 'values' contains three objects that evaluate to the  
>>> respective
>>> strings above when .toString() is called.
>>>
>>>
>>> This led me to believe that .toString() would be called  
>>> internally.  I
>>> guess it is (as I get the string literals in the SQL), but the  
>>> strings
>>> are not quoted.  Shouldn't they be?
>>>
>>> Is this a bug, or am I misreading the documentation?  If it's a bug,
>>> I'd be happy to enter a JIRA and attempt a patch.
>>>
>>> Brendan
>>>
>>>
>>> -------------------------------------------------------------------- 
>>> -
>>> To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
>>> For additional commands, e-mail: torque-user-help@db.apache.org
>>
>> DukeCE Privacy Statement:
>> Please be advised that this e-mail and any files transmitted with
>> it are confidential communication or may otherwise be privileged or
>> confidential and are intended solely for the individual or entity
>> to whom they are addressed. If you are not the intended recipient
>> you may not rely on the contents of this email or any attachments,
>> and we ask that you please not read, copy or retransmit this
>> communication, but reply to the sender and destroy the email, its
>> contents, and all copies thereof immediately. Any unauthorized
>> dissemination, distribution or copying of this communication is
>> strictly prohibited.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
>> For additional commands, e-mail: torque-user-help@db.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
> For additional commands, e-mail: torque-user-help@db.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org


Mime
View raw message