I know GAE cannot do direct JOINS.
However, a modification in the table layout or a workaround on DAL
level should be possible I think (but I haven't had the time yet to
figure that one out yet).


On May 19, 9:10 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> Because the example we provide uses a JOIN and GAE cannot do JOINS.
>
> Massimo
>
> On May 19, 1:57 pm, Hans Donner <hans.don...@pobox.com> wrote:
>
> > Trying to make the web2py examples run out of the box on google apps
> > engine (sdk). It now runs almost all examples, only the purchase part
> > of the database not yet, anyone a suggestion for this?
>
> > The fixing might be a bit quick&dirty, but I was after the results.
>
> > Index: applications/examples/controllers/database_examples.py
> > ===================================================================
> > --- applications/examples/controllers/database_examples.py      (revision
> > 953)
> > +++ applications/examples/controllers/database_examples.py      (working
> > copy)
> > @@ -100,9 +100,13 @@
>
> >      # ## now get a list of all purchases
>
> > -    records = db(purchased).select(db.users.name,
> > -                                   db.purchases.quantity,
> > -                                   db.products.name)
> > +    # quick fix to make it runnable on gae
> > +    if purchased:
> > +        records = db(purchased).select(db.users.name,
> > +                                       db.purchases.quantity,
> > +                                       db.products.name)
> > +    else:
> > +        records = db().select(db.users.ALL))
> >      return dict(form=form, records=SQLTABLE(records), vars=form.vars,
> >                  vars2=request.vars)
>
> > Index: applications/examples/models/db.py
> > ===================================================================
> > --- applications/examples/models/db.py  (revision 953)
> > +++ applications/examples/models/db.py  (working copy)
> > @@ -33,8 +33,12 @@
> >                  SQLField('product_id', db.products), SQLField
> > ('quantity'
> >                  , 'integer'))
>
> > -purchased = (db.users.id == db.purchases.buyer_id) & (db.products.id
> > -         == db.purchases.product_id)
> > +from gluon.settings import settings
> > +if not settings.web2py_runtime_gae:
> > +    purchased = (db.users.id == db.purchases.buyer_id) &
> > (db.products.id
> > +                 == db.purchases.product_id)
> > +else:
> > +    purchased = None
>
> >  db.users.name.requires = IS_NOT_EMPTY()
> >  db.users.email.requires = [IS_EMAIL(), IS_NOT_IN_DB(db,
> > 'users.email')]
> > Index: gluon/cache.py
> > ===================================================================
> > --- gluon/cache.py      (revision 953)
> > +++ gluon/cache.py      (working copy)
> > @@ -160,11 +160,21 @@
> >  class Cache(object):
>
> >      def __init__(self, request):
> > -        self.ram = CacheInRam(request)
> > -        try:
> > -            self.disk = CacheOnDisk(request)
> > -        except IOError:
> > -            logging.warning('no cache.disk')
> > +
> > +        from gluon.settings import settings
> > +        if settings.web2py_runtime_gae:
> > +            from gluon.contrib.gae_memcache import MemcacheClient
> > +            self.ram=self.disk=MemcacheClient(request)
> > +        else:
> > +
> > +
> > +            self.ram = CacheInRam(request)
> > +            try:
> > +                self.disk = CacheOnDisk(request)
> > +            except IOError:
> > +                logging.warning('no cache.disk (IOError)')
> > +            except AttributeError:
> > +                logging.warning('no cache.disk (AttributeError)')
>
> >      def __call__(
> >          self,
> > Index: gluon/compileapp.py
> > ===================================================================
> > --- gluon/compileapp.py (revision 953)
> > +++ gluon/compileapp.py (working copy)
> > @@ -37,7 +37,8 @@
> >      logging.warning('unable to import py_compile')
> >  from rewrite import error_message_custom
>
> > -is_gae = settings.web2py_runtime in
> > ['gae:development','gae:production']
> > +#is_gae = settings.web2py_runtime in
> > ['gae:development','gae:production']
> > +is_gae = settings.web2py_runtime_gae
>
> >  TEST_CODE = \
> >      r"""
> > Index: gaehandler.py
> > ===================================================================
> > --- gaehandler.py       (revision 953)
> > +++ gaehandler.py       (working copy)
> > @@ -15,10 +15,15 @@
>
> >  from gluon.settings import settings
>
> > +
> > +
> > +
> >  if os.environ.get('SERVER_SOFTWARE','').startswith('Devel'):
> > -    (settings.web2py_runtime, debug) = ('gae:development', True)
> > +    (settings.web2py_runtime, settings.web2py_runtime_gae, debug) = \
> > +        ('gae:development', True, True)
> >  else:
> > -    (settings.web2py_runtime, debug) = ('gae:production', False)
> > +    (settings.web2py_runtime, settings.web2py_runtime_gae, debug) = \
> > +        ('gae:production', True, False)
>
> >  import gluon.main
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to