I think we have something like this without introducing a special syntax for GAE based on lambda. In fact on non-gae you can now do
row.update_record(count=db.table.count+1) The same could work on GAE with your code below. massimo On Jan 9, 1:11 pm, Robin B <[email protected]> wrote: > To perform certain actions on GAE you need transactions, eg. > atomically increment a counter. > > This is what it would look like: > > row.update_record(count=lambda r: r.count+1) > > The GAE driver would check attributes for lambdas and invoke a > transaction when a lambda is present, the other SQL drivers could be > modified to be tolerant of lambdas and pass the current row into the > lambda and will get the correct outcome. > > The transaction would work something like this in gql.py: > > from google.appengine.ext import db as google_db > > def update_record_txn(attrs,table_obj): > record = table_obj.get_by_id(attrs.id) > for k,v in attrs: > if isinstance(v,lambda x: x): > v = v(record) > setattr(record,k,v) > record.put() > return record > > try: > return google_db.run_in_transaction(update_record_txn, > row,table_obj) > except: > pass > # could handle TransactionFailedError() caused by contention > > This would be backwards compatible. > > Thoughts? > > Robin --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

