Thank you. will look into it.

Massimo


On May 11, 6:31 am, Alexey Nezhdanov <[email protected]> wrote:
> Hi.
> I've come across another subtle problem with web2py's DAL running over IBM
> DB2 database.
> DB2 requires the left table to immidiatedly preceed the 'left outer join'
> keyword.
> IOW:
> select * from a, b left outer join c on c.a_id=a.id
> is incorrect. Correct form is:
> select * from b, a left outer join c on c.a_id=a.id
> it looks moronish enough, but alas, we have to live with it.
>
> I have modified my local copy of web2py to satisfy this requirement.
> Please note that this sample can not be copypasted into web2py's sql.py as
> is because of full_table_name wrapper that I added to solve another problem
> - schemas support. But replacing 'full_table_name(db, t)' with just 't'
> should work just fine.
>
>             join = attributes['left']
>             command = self._db._translator['left join']
>             if not isinstance(join, (tuple, list)):
>                 join = [join]
>             joint = [t._tablename for t in join if not isinstance(t,
>                      SQLJoin)]
>             joinon = [t for t in join if isinstance(t, SQLJoin)]
>             tables_to_merge={}
>
> [tables_to_merge.update(dict.fromkeys(parse_tablenames(str(t.query)))) for t
> in joinon]
>             joinont = [t.table._tablename for t in joinon]
>             [tables_to_merge.pop(t) for t in joinont if t in
> tables_to_merge]
>             important_tablenames = joint + joinont + tables_to_merge.keys()
>             excluded = [t for t in tablenames if not t in
> important_tablenames ]
>             sql_t = ', '.join([full_table_name(self._db, t) for t in
> excluded + tables_to_merge.keys()])
>             if joint:
>                 sql_t += ' %s %s' % (command, ',
> '.join([full_table_name(self._db, t) for t in joint]))
>             for t in joinon:
>                 sql_t += ' %s %s' % (command, str(t))
>
> Regards
> Alexey

Reply via email to