OK, will do.

On Jul 12, 11:19 am, mdipierro <[email protected]> wrote:
> Please propose a patch.
>
> On 10 Lug, 13:13, dlypka <[email protected]> wrote:
>
>
>
> > # I believe the new '_last_reference' property still needs a
> > 'nativeRef' type
> > # added to web2py in order to take full advantage of it:
> > #
>
> > # For running web2py on Google App Engine:
> > # I coded and successfully tested a GAE-specific proof of concept as
> > follows:
>
> > db.define_table('ParentTable',
> >                # NOTE: web2py provides the 'id' column automatically
> >                 db.Field('name','string', length=50), # NOTE! for GAE you 
> > must
> > specify 'string', not 'text'!!
> >                 db.Field('gaeRef', gae.ReferenceProperty())
> >                 # 
> > Seehttp://www.mail-archive.com/[email protected]/msg05177.html
> >               )
>
> > db.define_table('ChildTable',
> >                # NOTE: web2py provides the 'id' column automatically
> >                 db.Field('idParent','reference ParentTable'),
> >                 db.Field('age','integer'),
> >                 db.Field('name','string', length=50), # NOTE! for GAE you 
> > must
> > specify 'string', not 'text'!!
> >                 db.Field('parentLink',
> > gae.ReferenceProperty(db.ParentTable._tableobj, required=True,
> > collection_name='ChildCollection')),
> >                 db.Field('gaeRef', gae.ReferenceProperty())
> >                )
>
> > # To support this, I patched gql.py around line 700 in method
> > 'select':
> > def select(self, *fields, **attributes):
> >       :
> >       :
> >         rows = []
> >         lastField = fields[len(fields)-1] # dlypka
> >         for item in items:
> >             new_item = []
> >             for t in fields:
> >                 if t == 'id':
> >                     new_item.append(int(item.key().id()))
> >                 else:
> >                     new_item.append(getattr(item, t))
> >             if lastField == 'gaeRef': # dlypka
> >                 new_item[len(new_item)-1] = item  # dlypka
> >             rows.append(new_item)
> >         colnames = ['%s.%s' % (tablename, t) for t in fields]
>
> > #
> > ---------------------------------------------------------------------------­-------------
>
> > # Proposal:
> > #  In place of this patch, I would prefer that web2py add a new field
> > type
> > #  named 'nativeRef', and gql.py method 'select' should store the
> > value of 'item' in such columns.
>
> > # With the 'nativeRef' type added to web2py, the proof of concept
> > would be as follows:
>
> >       db.define_table('ParentTable',
> >                       db.Field('name','string', length=50), # NOTE! for GAE 
> > you must
> > specify 'string', not 'text'!!
> >                       db.Field('gaeRef', 'nativeRef')
> >                     )
>
> >       db.define_table('ChildTable',
> >                       db.Field('idParent','reference ParentTable'),
> >                       db.Field('age','integer'),
> >                       db.Field('name','string', length=50), # NOTE! for GAE 
> > you must
> > specify 'string', not 'text'!!
> >                       db.Field('parentLink',
> > gae.ReferenceProperty(db.ParentTable._tableobj, required=True,
> > collection_name='ChildCollection')),
> >                       db.Field('gaeRef', 'nativeRef')
> >                      )
>
> >     myParent = db.ParentTable.insert(name='Bill')
>
> >     myChild = db.ChildTable.insert(idParent = myParentid.id,
> >                                    age = 9,
> >                                    name = 'Johnny',
> >                                    parentLink =
> > myParent._table._last_reference)
>
> >     # Later, you can use web2py queries mixed with a native GAE
> > Reference to find the children
> >     # with very high performance because the chidren are retrieved in
> > the parent query:
>
> >     rows = db(db.ParentTable.name == 'Bill' ).select()
>
> >     myParentFromQuery = rows[0]
>
> >     for child in myParentFromQuery.gaeRef.ChildCollection:
> >         myChildName = child.name
> >         myChildAge = child.age
>
> > # ----------------- End of Proof of Concept
> > ------------------------------------------ Hide quoted text -
>
> - Show quoted text -

Reply via email to