I tried this (2.0.2) and I cannot reproduce the problem:

db = DAL(lazy_tables=True)

db.define_table('reviews_like',
                 Field('review_id', 'reference reviews'),
                 Field('helpful', 'boolean'))

db.define_table('reviews',
                Field('title'))

db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == ro\
w.reviews.id) & (db.reviews_like.helpful == True)).count() )
db.reviews.neg = Field.Lazy(lambda row: db((db.reviews_like.review_id == ro\
w.reviews.id) & (db.reviews_like.helpful == False)).count() )
id = db.reviews.insert(title='xxx')
db.reviews_like.insert(review_id=id, helpful=True)
print db(db.reviews_like.review_id==db.reviews.id).select()



On Thursday, 30 August 2012 11:16:27 UTC-5, Paolo wrote:
>
> Dear all, 
> I just updated web2py and after turning on the lazy_table I got:
>
> Traceback (most recent call last):
>   File "/home/paolo/Dropbox/git/web2py/gluon/restricted.py", line 209, in 
> restricted
>     exec ccode in environment
>   File 
> "/home/paolo/Dropbox/git/web2py/applications/bikend/views/load/reviewsFilter.html",
>  line 57, in <module>
>     var str = '{{=T('Route ')}}<small>NAME </small><b class="caret"> 
> </b>'.replace(/NAME/gi, $(this).text());
>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8810, in __call__
>     return self.method(self.row,*args,**kwargs)
>   File "/home/paolo/Dropbox/git/web2py/applications/bikend/models/db.py" 
> <http://127.0.0.1:8000/admin/default/edit/bikend/models/db.py>, line 427, in 
> <lambda>
>     db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == 
> row.reviews.id) & (db.reviews_like.helpful == True)).count() )
>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 8675, in count
>     return db._adapter.count(self.query,distinct)
>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1542, in count
>     self.execute(self._count(query, distinct))
>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1598, in execute
>     return self.log_execute(*a, **b)
>   File "/home/paolo/Dropbox/git/web2py/gluon/dal.py", line 1592, in 
> log_execute
>     ret = self.cursor.execute(*a, **b)
> ProgrammingError: Cannot operate on a closed database.
>
>
> The table involved in the error is defined as follows:
>
> db.define_table('reviews_like',
>                  Field('review_id', 'reference reviews'),  
>                  Field('helpful', 'boolean',
>                        widget = BuildRadioButtonWidget),
>                  Field('created_on', 'datetime', default=request.now,
>                        writable = False, readable = False),
>                  Field('user_id', db.auth_user, default=auth.user_id, 
>                        writable = False, readable = False)
> )
>
> db.define_table('reviews',
>                 Field('route_id', 'reference route', default=db.route.id),
>                 Field('rating', 'integer',requires=IS_IN_SET(range(1,6))),
>                 Field('title', 'string', 
> requires=(IS_NOT_EMPTY(error_message=T('Enter a 
> title')),IS_LENGTH(250,error_message=T('Warning, title too long')), 
> IS_LENGTH(minsize=3, error_message=T('Warning, title too short')))),
>                 Field('description', 'text', 
> requires=(IS_NOT_EMPTY(error_message=T('Please, enter a 
> description')),IS_LENGTH(250,error_message=T('Warning, description too 
> long')), IS_LENGTH(minsize=75, error_message=T('Warning, the description is 
> too short, reviews must be at least 75 characters long.')))),
>                 auth.signature,
>                 
> )
> db.reviews.route_id.readable = False
> db.reviews.route_id.writable = False
> db.reviews.rating.widget = starWidget
> db.reviews.pos = Field.Lazy(lambda row: db((db.reviews_like.review_id == 
> row.reviews.id) & (db.reviews_like.helpful == True)).count() )
> db.reviews.neg = Field.Lazy(lambda row: db((db.reviews_like.review_id == 
> row.reviews.id) & (db.reviews_like.helpful == False)).count() )
>
> what is wrong ?
>
> Cheers
> Paolo
>
>
>
>

-- 



Reply via email to