Using comparable property as a selected element in SQL is a use case  
which hasn't been addressed as of yet - the main usage was so far just  
for producing WHERE/ORDER BY/etc. expressions.   In particular, the  
comparable property doesn't have any query setup capabilities (i.e.  
where it puts itself into a SQL expression as a column to be loaded)  
nor any ability to receive result rows in an ORM entity loading  
context.  This example though is just a column loading context.

So for the exact thing you're trying to do, it would probably work if  
you changed your __clause_element__ method to return a concatenation,  
since column elements within sess.query(X) are expected to be scalar  
ColumnElement objects:

def __clause_element__(self):
        r = None
        for col in self.prop.descriptor.columns:
                if r is None:
                        r = col
                else:
                        r = r + text("' '") + col

But really, if you're using comparable property as a loader, I  
wouldn't use comparable property anyway.   It's much easier to achieve  
as a regular column_property, which has full blown ORM capabilities,  
meaning that it works as an entity attribute loader as well:

mapper(MyClass, mytable, properties ={
        'full_name':column_property(mytable.c.first_name + text("' '") +  
mytable.c.last_name)
})

The comparison generated by the above property would look like:

        WHERE table.firstname || ' ' || table.lastname = ?

If you wanted to generate the criterion using AND the way your custom  
prop comparator does, you can plug your comparator in using  
comparator_factory - this option is available in rc1 but has not yet  
been documented (its a TODO for the 0.5.0 milestone):

mapper(MyClass, mytable, properties ={
        'full_name':column_property(mytable.c.first_name + text("' '") +  
mytable.c.last_name, comparator_factory =  
JoinedValuesProperty.Comparator)
})

You still would want your __clause_element__ to return the SQL  
concatenation expression.



--~--~---------~--~----~------------~-------~--~----~
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