I forgot, in the Ctrl+c and ctrl+v, to add that the problem only happens
when using limit and offset with oracle dialect (sorry about that)..
so
self.fields = ' case field1
when 34 then field2
when 94 then field3
when 48 then field4
end another_field'
self.from = ' table '
self.where = ' 1 = ' //nevermind this
sql = select(columns=[self.fields], from_obj=self.tables,
whereclause=self.where, bind=self.engine, order_by= ' 1
').limit(1).offset(30)
result:
select
case field1
when 34 then field2
when 94 then field3
when 48 then field4
end another_field
from
(select
case field1
when 34 then field2
when 94 then field3
when 48 then field4
end another_field,
ROW_NUMBER() OVER (ORDER BY 1 ) AS ora_rn
from
table
where
1 = 1)
WHERE ora_rn>1 AND ora_rn<=30
sorry about the mess,
On Tue, May 19, 2009 at 2:21 PM, Michael Bayer <[email protected]>wrote:
> send along full reproducing test cases and that will reveal all.
>
> On May 19, 2009, at 11:36 AM, Tiago Becker wrote:
>
> "this indicates a None is being sent as a column somewhere."
>
> I'm just not passing the order_by clause...
>
> "I dont see the SQLAlchemy expression you're dealing with here. the
> symptom you describe is when placing a FROM object in the columns
> clause of a SELECT, the object is also added to the FROM clause
> automatically, unless additional steps are taken to prevent this. A
> CASE statement is not is not a FROM object, its a column object, so
> this should not occur. If you are placing a SELECT in the columns
> clause of another SELECT, call as_scalar() on it."
>
> hmm, something strange here, as i'm not passing a from object in the
> columns...
>
> im doing this:
>
> self.fields = ' case field1
> when 34 then field2
> when 94 then field3
> when 48 then field4
> end another_field'
>
> self.from = ' table '
>
> self.where = ' 1 = ' //nevermind this
>
> then:
>
> sql = select(columns=[self.fields], from_obj=self.tables,
> whereclause=self.where, bind=self.engine, order_by= ' 1 ')
>
> results in
>
> select
> case field1
> when 34 then field2 // this is the problem... in the inner
> select (the FROM select), field2 is not selected, so it does not exists
> when 94 then field3
> when 48 then field4
> end another_field
> from
> (select
> case field1
> when 34 then field2
> when 94 then field3
> when 48 then field4
> end another_field
> from
> table
> where
> 1 = 1)
>
> this is can be fixed by replacing the fields in the outer join by adding *,
> as it will select all the fields in the query...
>
> How do i solve this?
>
> On Tue, May 19, 2009 at 12:13 PM, Michael Bayer
> <[email protected]>wrote:
>
>>
>>
>> On May 19, 2009, at 10:39 AM, Tiago Becker wrote:
>>
>> > Hi.
>> >
>> > Im still trying to use the select object from sqlalchemy, but i
>> > found a strange (bug or not) behavior:
>> >
>> > sql = select(columns=[self.fields], from_obj=self.tables,
>> > whereclause=self.where, bind=self.req.cfg.engine, order_by= ' 1 ')
>> >
>> > 1) without order by, i get an error: AttributeError: 'NoneType'
>> > object has no attribute 'proxies'. is this intended?
>>
>> this indicates a None is being sent as a column somewhere.
>>
>> > 2) the select fails when theres a CASE instruction, like this:
>> >
>> > case field1
>> > when 34 then field2
>> > when 94 then field3
>> > when 48 then field4
>> > end another_field
>> >
>> > It fails because sqlalchemy does a subquery, but instead of using *
>> > (in the outer query, to bring all the fields) it just paste the same
>> > fields from the original query, failing to get all the fields in the
>> > case expression....
>>
>> I dont see the SQLAlchemy expression you're dealing with here. the
>> symptom you describe is when placing a FROM object in the columns
>> clause of a SELECT, the object is also added to the FROM clause
>> automatically, unless additional steps are taken to prevent this. A
>> CASE statement is not is not a FROM object, its a column object, so
>> this should not occur. If you are placing a SELECT in the columns
>> clause of another SELECT, call as_scalar() on it.
>>
>>
>>
>
>
>
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---