wow, great !  a few months ago i could never fix these issues without  
running people's test programs and bugfixing.  guess we're getting  
better !

On Sep 6, 2006, at 12:54 PM, Pete Taylor wrote:

> setting order_by on the mapper itself worked like a charm :)
>
> Thank you much!
>
> On 9/6/06, Michael Bayer <[EMAIL PROTECTED]> wrote:
>> hey Pete -
>>
>> if you can provide a full example that runs, it would be helpful,
>> i.e. attach a script that has the partial table definitions, some
>> classes/mappers, and a "select()" that makes it acutally happen.  i
>> can just replace the oracle connect string with something local here.
>>
>> what is probably happening is a somewhat known issue where SA will
>> try to use a LIMIT when selecting just one instance, as it does in
>> the import_instance() method.  Oracle "limits" are implemented using
>> ROW NUMBER OVER ORDER BY(something), so it adds "rowid" when it cant
>> find anything else to order by.  In theory if you have "order by" set
>> up for things it shouldnt have to use rowid.  I see below you have a
>> lot of "order by"s in there, but you probably need to specify the
>> "order by" on the mapper() definition itself, not just the relations
>> (in fact you might need it only on the mappers).
>>
>> if that doesnt work, if you can send me a script to work with i can
>> narrow it down...at the very least I can have the oracle compiler not
>> allow "rowid" to be used if "DISTINCT" is turned on.
>>
>> - mike
>>
>> On Sep 6, 2006, at 10:14 AM, Pete Taylor wrote:
>>
>>> Hi All,
>>> I'm running into a strange problem that I can't seem to constrain  
>>> to a
>>> test case.  I'm including the relevant pieces of the tables and
>>> relationships as reference for the following description of the
>>> problem.  And, just for reference, I'm running SA from svn.
>>>
>>> As you can see below, the Endorsement object is mapped against a
>>> specific select statement on the endorsements table, with a set of
>>> relationships to the EndorsementDefinition and EndorsementLineItem
>>> objects.  Endorsements themselves are children of Policy objects.
>>>
>>> The actual ORA error I'm seeing is:
>>> "(DatabaseError) ORA-01446: cannot select ROWID from view with
>>> DISTINCT, GROUP BY, etc."
>>>
>>> The select statement itself is too long to relate here, but the
>>> relevant piece is as follows:
>>> "ORDER BY distinct_ends_select.rowid,
>>> uhe_endorsement_7775.end_endorsement_type ASC,
>>> end_endorsement_3b96.end_endorsement_type ASC"
>>>
>>> When I've run into 01446 before, I've merely added an explict  
>>> order_by
>>> to the relation, and this has taken care of it.  But in this case,
>>> I've added order_by in each relationship, but the SQL is still being
>>> constructed with an attempt to order by rowid.
>>>
>>> There is a "however" to this whole thing though, and it's a strange
>>> one.  If I build an Endorsement object explicitly, assigning all the
>>> relevant primary keys and then running a session.import_instance
>>> against the object, I get the above ORA error.  However, if I just
>>> allow the Policy object to lazyload the endorsement objects, it
>>> retrieves them without any difficulty.
>>>
>>> Because the relationships seem to work in lazyload, and becaue I've
>>> already added all the "order_by" statements I can think to add, I'm
>>> not sure where to go next, or how to narrow the whole of it down  
>>> to a
>>> test case.  Any help, though, would be greatly appreciated.  Thanks!
>>>
>>> The above references the following set of tables and relationships:
>>>
>>> policies = Table('pol_homepolicy_tbl', meta,
>>>     Column('pol_policy_num', String(10), primary_key=True,
>>> key='policyNum'),
>>>     Column('pol_policy_eff_date', DateTime, primary_key=True,
>>> key='effectiveDate'),
>>>     # truncated
>>>     ...
>>> )
>>>
>>> endorsements = Table('end_endorsement_tbl', meta,
>>>     Column('end_policy_num', String(10),
>>> ForeignKey('pol_homepolicy_tbl.policyNum'), primary_key=True,
>>> key='policyNum'),
>>>     Column('end_endorsement_type', String(20),
>>> ForeignKey('uhe_endorsement_tbl.type'), primary_key=True,  
>>> key='type'),
>>>     Column('end_endorsement_id', Integer, primary_key=True,  
>>> key='id'),
>>>     Column('end_policy_eff_date', DateTime,
>>> ForeignKey('pol_homepolicy_tbl.effectiveDate'), primary_key=True,
>>> key='policyEffDate'),
>>>     Column('end_endorsement_edition_date', String(7),
>>> ForeignKey('uhe_endorsement_tbl.editionDate'), key='editionDate'),
>>>     # truncated
>>>     ...
>>> )
>>>
>>> endorsementDefinitions = Table('uhe_endorsement_tbl', meta,
>>>     Column('end_endorsement_type', String(10), primary_key=True,
>>> key='type'),
>>>     Column('uhe_effect_date', DateTime, primary_key=True,
>>> key='effectiveDate'),
>>>     Column('end_endorsement_desc', String(100), key='description'),
>>>     Column('end_endorsement_form_id', String(12), key='formNumber'),
>>>     Column('r_end_ed_date', String(7), key='editionDate')
>>> )
>>>
>>> EndorsementDefinition.mapper = mapper(EndorsementDefinition,
>>> endorsementDefinitions)
>>>
>>> EndorsementLineItem.mapper = mapper(EndorsementLineItem,  
>>> endorsements)
>>>
>>> distinct_ends_select = select(
>>>             [
>>>             endorsements.c.policyNum,
>>>             endorsements.c.policyEffDate,
>>>             endorsements.c.type,
>>>             endorsements.c.editionDate
>>>             ],
>>>             order_by=[asc(endorsements.c.type)],
>>>             distinct=True,
>>>             ).alias('distinct_ends_select')
>>>
>>> Endorsement.mapper = mapper(Endorsement, distinct_ends_select,
>>> is_primary=True, properties=dict(
>>>     definition = relation(EndorsementDefinition, lazy=False,
>>> private=False, order_by=asc(endorsementDefinitions.c.type),
>>>                           primaryjoin=and_(
>>>
>>> distinct_ends_select.c.end_endorsement_type==endorsementDefinitions. 
>>> c.
>>> type,
>>>
>>> distinct_ends_select.c.end_endorsement_edition_date==endorsementDefi 
>>> ni
>>> tions.c.editionDate,
>>>                             ),
>>>                     ),
>>>     lineItems = relation(EndorsementLineItem, lazy=False,
>>> private=True, order_by=asc(endorsements.c.type),
>>>         foreignkey=(
>>>             endorsements.c.policyNum,
>>>             endorsements.c.policyEffDate,
>>>             endorsements.c.type,
>>>             ),
>>>         primaryjoin=and_(
>>>
>>> distinct_ends_select.c.end_policy_num==endorsements.c.policyNum,
>>>
>>> distinct_ends_select.c.end_policy_eff_date==endorsements.c.policyEff 
>>> Da
>>> te,
>>>
>>> distinct_ends_select.c.end_endorsement_type==endorsements.c.type
>>>         )
>>>     )
>>> ))
>>>
>>> Policy.mapper = mapper(Policy, policies, extension=PolicyExtension 
>>> (),
>>> properties=dict(
>>>     endorsements = relation(Endorsement, lazy=True, private=True,
>>> order_by=asc(distinct_ends_select.c.end_endorsement_type)),
>>>     # truncated
>>>     ...
>>> ))
>>>
>>> --
>>> "All guilt is relative, loyalty counts, and never let your  
>>> conscience
>>> be your guide."
>>>   - Lucas Buck, American Gothic
>>>
>>> -------------------------------------------------------------------- 
>>> --
>>> ---
>>> Using Tomcat but need to do more? Need to support web services,
>>> security?
>>> Get stuff done quickly with pre-integrated technology to make your
>>> job easier
>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache
>>> Geronimo
>>> http://sel.as-us.falkag.net/sel?
>>> cmd=lnk&kid=120709&bid=263057&dat=121642
>>> _______________________________________________
>>> Sqlalchemy-users mailing list
>>> Sqlalchemy-users@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users
>>
>>
>
>
> -- 
> "All guilt is relative, loyalty counts, and never let your conscience
> be your guide."
>   - Lucas Buck, American Gothic
>
> ---------------------------------------------------------------------- 
> ---
> Using Tomcat but need to do more? Need to support web services,  
> security?
> Get stuff done quickly with pre-integrated technology to make your  
> job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache  
> Geronimo
> http://sel.as-us.falkag.net/sel? 
> cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Sqlalchemy-users mailing list
> Sqlalchemy-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to