Talking about sql.py or dal.py. dal.py is an experimental rewrite of
sql.py. dal.py is not used in web2py. dal.py has not been updated in
long time.

Massimo

On Nov 22, 8:48 pm, Mariano Reingart <[email protected]> wrote:
> On Mon, Nov 22, 2010 at 10:27 PM, brad <[email protected]> wrote:
> > I tested further and am not sure now about my proposed fix.
>
> > In dal.py, there seem to be two approaches to user-defined primary
> > keys:
>
> > One is to assume that only special tables have an
> > attribute ._primarykey, and run special case code if hasattr(self,
> > "_primarykey"), e.g.:
>
> >                if hasattr(self,'_primarykey'):
> >                    rtablename,rfieldname = ref.split('.')
> >                    rtable = self._db[rtablename]
> >                    rfield = rtable[rfieldname]
> >                    # must be PK reference or unique
> >                    if rfieldname in rtable._primarykey or
> > rfield.unique:
>
> > The other is to assume all tables have the ._primarykey attribute and
> > use it without testing for existence, e.g.:
>
> >            if not orderby and tablenames:
> >                sql_o += ' ORDER BY %s' % ', '.join(['%s.%s'%(t,x) for
> > t in tablenames for x in (self.db[t]._primarykey or ['id'])])
>
> > ...which simply won't run if t._primarykey doesn't exist.
>
> > Possible fixes:
>
> > 1. Use defaulted access: self.db[t].get("_primarykey")
>
> > 2. Always set ._primarykey:
>
> >       elif primarykey:
> >            self._primarykey = primarykey
> >            new_fields = []
> >        else:
> >            new_fields = [ Field('id', 'id') ]
> > +           self._primarykey = ["id"]
>
> > I haven't spent near enough time in the DAL to know which is best.
> > Thoughts?
>
> I think current dal.py approach is wrong, having a distinction on
> normal vs keyed tables raises this types of issues, adds unnecessary
> complexity to the code and model design, etc.
>
> IIRC Massimo said that assuming autonumeric id as primary keys was a
> mistake taken from other frameworks, and it is preventing using NOSQL
> and full power of some relational databases.
>
> Also, it makes more difficult to do lazy table definitions, migrations
> and fixtures.
>
> There is a thread about this in web2py-developers, maybe you can look
> there for further information.
>
> Best regards,
>
> Mariano Reingarthttp://www.sistemasagiles.com.arhttp://reingart.blogspot.com

Reply via email to