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 -

