a few things here.

first of all, if its an operator, you probably want to use op():

literal('foo').op('ANY')('bar')

secondly, when you say "x" == <ClauseElement>, the __eq__() method in  
Python that gets called on the clauseelement has no "reversed"  
version.  so its impossible for the ClauseElement on the right to  
know that it should be on the left.

you can work around this similarly to the previous example, by making  
both sides a ClauseElement and saying:

literal('foo') == func.any('bar')

On Mar 28, 2007, at 10:42 AM, Julien Cigar wrote:

>
> Hello Mike,
>
> This simple test illustrate the problem :
>
>>>> from sqlalchemy import func
>>>> print 'foo' == func.any('bar')
> any(:any) = :a_1
>
> it should be :a_1 = any(:any)
>
> If you look at the PostgreSQL documentation,
> http://www.postgresql.org/docs/8.2/static/functions- 
> comparisons.html#AEN14105 the syntax is:
> expression operator ANY (array expression)
>
> and not :
> ANY (array expression) expression operator
>
> Note the ANY can also be used with subselect (so it's not specific to
> the PostgreSQL array type) :
> http://www.postgresql.org/docs/8.2/static/functions- 
> subquery.html#AEN13959
>
> expression operator ANY (subquery)
>
> and in this case it's also incorrect :
>
>>>> print 'foo' == func.any(select)
> any(:any) = :a_1
>
> (again it should be :a_1 = any(:any))
>
> Regards,
> Julien
>
> On Tue, 2007-03-27 at 12:13 -0400, Michael Bayer wrote:
>> also we dont really have any direct support for python array types,
>> which seemed to be an element of your test.  can you try a basic func
>> test without an array type being used ?
>>
>>
>>
>> On Mar 27, 2007, at 10:58 AM, Julien Cigar wrote:
>>
>>>
>>> The query is rather complicated: http://rafb.net/p/qyx3vA47.html
>>> The problem is at line 95 (the FIXME)
>>>
>>> Thanks
>>>
>>> Michael Bayer wrote:
>>>> On Mar 27, 2007, at 10:00 AM, Julien Cigar wrote:
>>>>
>>>>
>>>>> Hello,
>>>>>
>>>>> I'm using SQLAlchemy 0.3.5, and it seems that the func() output is
>>>>> broken with some functions.
>>>>> I use the ANY function of PostgreSQL with something like :
>>>>> func.any(q.c.habitats)==filter_habitat
>>>>>
>>>>> SQLAlchemy translates this in:
>>>>> WHERE any(habitats) = %(any)s, which is incorrect.
>>>>>
>>>>
>>>>
>>>>> For example:
>>>>>
>>>>> the result should be :
>>>>> iasdev=> select true as result where 'abc' = ANY(array['abc',
>>>>> 'def']);
>>>>>  result
>>>>> --------
>>>>>  t
>>>>>
>>>>> where SQLAlchemy generates the query as :
>>>>>
>>>>> iasdev=> select true as result where ANY(array['abc', 'def']) =
>>>>> 'abc';
>>>>> ERROR:  syntax error at or near "ANY" at character 29
>>>>> LINE 1: select true as result where ANY(array['abc', 'def']) =
>>>>> 'abc'...
>>>>>
>>>>> Is this a bug ? (or maybe it's possible to keep the order...) ?
>>>>>
>>>>
>>>> can i have some complete code examples please ?  i dont understand
>>>> how your snippet would produce a full SELECT statement.  the phrase
>>>> youve shown me translates exactly as specified, assuming
>>>> "filter_habitat" is ia non ClauseElement::
>>>>
>>>>    func.any(q.c.habitats)==filter_habitat
>>>>
>>>>    should be:
>>>>
>>>>    any(habitats) = %(any)s
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>
>>>
>>>
>>> -- 
>>> Julien Cigar
>>> Belgian Biodiversity Platform
>>> http://www.biodiversity.be
>>> Universit� Libre de Bruxelles (ULB)
>>> Campus de la Plaine CP 257
>>> B�timent NO, Bureau 4 N4 115C (Niveau 4)
>>> Boulevard du Triomphe, entr�e ULB 2
>>> B-1050 Bruxelles
>>> office: [EMAIL PROTECTED]
>>> home: [EMAIL PROTECTED]
>>> biobel reference: http://biobel.biodiversity.be/biobel/person/ 
>>> show/471
>>>
>>>
>>>>
>>
>>
>>>
> -- 
> Julien Cigar
> Belgian Biodiversity Platform
> http://www.biodiversity.be
> Universit� Libre de Bruxelles
> Campus de la Plaine CP 257
> B�timent NO, Bureau 4 N4 115C (Niveau 4)
> Boulevard du Triomphe, entr�e ULB 2
> B-1050 Bruxelles
> mail: [EMAIL PROTECTED]
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to