I think the issue is you cant put a "task_status" ordering in your  
Task mapper since that table is not part of its mapping.

http://www.sqlalchemy.org/trac/wiki/ 
FAQ#ImusinglazyFalsetocreateaJOINOUTERJOINandSQLAlchemyisnotconstructing 
thequerywhenItrytoaddaWHEREORDERBYLIMITetc.whichreliesupontheOUTERJOIN



On Mar 22, 2007, at 9:44 PM, HD Mail wrote:

>
> Hi,
>
> Sorry for the long email, below is a dump of the SA generated sql.
> I have a relationship in one of my mappers to an abitrary select
> (task_status).
> My mapper also orders the result by a column in this abitrary select.
>
> I am using the latest SA from trunk. This use to work in an earlier  
> version.
>
> The sql is generated from the following mapping
>
> task_status = select(
>     [sys_enum.c.id,
>         sys_enum.c.key_code.label('code'),
>         sys_enum.c.value.label('description'),
>         sys_enum.c.seq_no],
>     sys_enum.c.type_code=='status'
> ).alias('status')
>
> db.mapper(Task, db.task,
>     properties = {
>         'created_user': relation(Employee, lazy=False,
> primaryjoin=db.task.c.created_by==db.employee.c.employee_id),
>         'assigned_user': relation(Employee, lazy=False,
> primaryjoin=db.task.c.assigned_to==db.employee.c.employee_id),
>         'project': relation(Project, lazy=False),
>         'status': relation(status_mapper, lazy=False,
>             primaryjoin=and_ 
> (task_status.c.code==db.task.c.status_code),
>             foreignkey=db.task.c.status_code
>         ),
>         'task_details': relation(TaskDetail, lazy=True, cascade='all,
> delete-orphan'),
>     },
>     order_by = [db.task.c.project_id, desc(task_status.c.seq_no),
> db.task.c.started_on, db.tas
> k.c.finished_on, db.task.c.sort_no, db.task.c.priority]
> )
>
> Error(SQLError): (ProgrammingError) relation "status" does not exist
> 'SELECT anon_824a.code AS anon_824a_code, anon_824a.seq_no AS
> anon_824a_seq_no, anon_824a.id AS anon_824a_id,  
> anon_824a.description AS
> anon_824a_description, task.project_id AS task_project_id,
> task.description AS task_description, task.task_id AS task_task_id,
> task.status_code AS task_status_code, task.created_on AS
> task_created_on, task.created_by AS task_created_by, task.sort_no AS
> task_sort_no, project_6f4a.project_name AS project_6f4a_project_name,
> project_6f4a.chargeable AS project_6f4a_chargeable,  
> project_6f4a.enabled
> AS project_6f4a_enabled, project_6f4a.parent_id AS
> project_6f4a_parent_id, project_6f4a.rate AS project_6f4a_rate,
> client_3f15.phone_area_code AS client_3f15_phone_area_code,
> client_3f15.fax_no AS client_3f15_fax_no, client_3f15.address1 AS
> client_3f15_address1, client_3f15.client_name AS
> client_3f15_client_name, client_3f15.address3 AS client_3f15_address3,
> client_3f15.fax_area_code AS client_3f15_fax_area_code,  
> client_3f15.abn
> AS client_3f15_abn, client_3f15.phone_no AS client_3f15_phone_no,
> client_3f15.post_code AS client_3f15_post_code,  
> client_3f15.client_id AS
> client_3f15_client_id, client_3f15.country_name AS
> client_3f15_country_name, client_3f15.state_code AS
> client_3f15_state_code, client_3f15.address2 AS client_3f15_address2,
> client_3f15.enabled AS client_3f15_enabled, project_6f4a.client_id AS
> project_6f4a_client_id, project_6f4a.project_id AS
> project_6f4a_project_id, project_6f4a.project_code AS
> project_6f4a_project_code, task.finished_on AS task_finished_on,
> employee_6c57.first_name AS employee_6c57_first_name,
> employee_6c57.employee_id AS employee_6c57_employee_id,
> employee_6c57.middle_name AS employee_6c57_middle_name,
> employee_6c57.employee_code AS employee_6c57_employee_code,
> employee_6c57.home_phone_no AS employee_6c57_home_phone_no,
> employee_6c57.tfn AS employee_6c57_tfn, employee_6c57.mobile_no AS
> employee_6c57_mobile_no, employee_6c57.client_id AS
> employee_6c57_client_id, employee_6c57.surname AS  
> employee_6c57_surname,
> employee_6c57.home_area_code AS employee_6c57_home_area_code,
> employee_6c57.password AS employee_6c57_password, task.assigned_to AS
> task_assigned_to, task.due_on AS task_due_on, task.estimate AS
> task_estimate, employee_ba6b.first_name AS employee_ba6b_first_name,
> employee_ba6b.employee_id AS employee_ba6b_employee_id,
> employee_ba6b.middle_name AS employee_ba6b_middle_name,
> employee_ba6b.employee_code AS employee_ba6b_employee_code,
> employee_ba6b.home_phone_no AS employee_ba6b_home_phone_no,
> employee_ba6b.tfn AS employee_ba6b_tfn, employee_ba6b.mobile_no AS
> employee_ba6b_mobile_no, employee_ba6b.client_id AS
> employee_ba6b_client_id, employee_ba6b.surname AS  
> employee_ba6b_surname,
> employee_ba6b.home_area_code AS employee_ba6b_home_area_code,
> employee_ba6b.password AS employee_ba6b_password, task.resolution AS
> task_resolution, task.started_on AS task_started_on, task.category AS
> task_category, task.priority AS task_priority \nFROM task LEFT OUTER
> JOIN (SELECT sys_enum.id AS id, sys_enum.key_code AS code,
> sys_enum.value AS description, sys_enum.seq_no AS seq_no \nFROM  
> sys_enum
> \nWHERE sys_enum.type_code = %(sys_enum_type_code)s) AS anon_824a ON
> anon_824a.code = task.status_code LEFT OUTER JOIN project AS
> project_6f4a ON project_6f4a.project_id = task.project_id LEFT OUTER
> JOIN client AS client_3f15 ON client_3f15.client_id =
> project_6f4a.client_id LEFT OUTER JOIN employee AS employee_6c57 ON
> task.created_by = employee_6c57.employee_id LEFT OUTER JOIN  
> employee AS
> employee_ba6b ON task.assigned_to = employee_ba6b.employee_id \nWHERE
> task.assigned_to = %(task_assigned_to)s AND (task.finished_on IS  
> NULL OR
> CAST(task.finished_on AS DATE) > %(literal)s) ORDER BY  
> task.project_id,
> status.seq_no DESC, task.started_on, task.finished_on, task.sort_no,
> task.priority, anon_824a.id, project_6f4a.project_id,
> client_3f15.client_id, employee_6c57.employee_id,
> employee_ba6b.employee_id' {'literal': datetime.date(2007, 3, 18),
> 'sys_enum_type_code': 'status', 'task_assigned_to': 2}
>
> >


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