Does this break backward compatibility? If so, should we make caching the 
full Rows object an option (maybe just via the new "cacheable" argument)?

Anthony

On Saturday, September 8, 2012 10:06:56 AM UTC-4, Massimo Di Pierro wrote:
>
> Short answer:
>
> if you cache the select, subqueries are missing. So you have to replace
>
>  email = row.emails.select().first()
>
> with
>
>  email = db(db.emails.studio==row.id).select().first()
>
>
> This is probably the only change of behavior and it is due to the need of 
> speedup. before cache was caching value but not the full object. We 
> achieved a 100x speedup by caching the final rows object. The problem is 
> that subselects, update_record and delete_record are methods of the rows 
> and they are not serializable, therefore they are missing when the rows are 
> cached.
>
> Massimo
>
>
> On Saturday, 8 September 2012 08:34:46 UTC-5, Jose wrote:
>>
>> Hi all
>>
>> In Version 2.0.0 (2012-06-04 18:49:33) dev works well
>>
>> Model:
>>
>> tb_studio = db.define_table('studio',
>>     Field('name', label=T('Name')),
>>     #...
>>     format='%(name)s',
>>     migrate=MIGRATE
>> )
>>
>> tb_emails = db.define_table('emails',
>>     Field('studio', tb_studio, readable=False, writable=False, default=1),
>>     Field('email', label=T('Email')),
>>     migrate=MIGRATE
>> )
>>
>> Controller
>>
>> def bg_studio():
>>     row = db(tb_studio.id==1).select(cache=(cache.ram, 60)).first()
>>     email = row.emails.select().first()    
>>
>>     return dict(row=row, email=email)
>>
>>
>> In Version 2.0.8 (2012-09-07 09:38:35) stable, error occurs:
>>
>> File "/usr/home/jose/web2py/applications/dm/controllers/default.py" 
>> <http://127.0.0.1:8000/admin/default/edit/dm/controllers/default.py>, line 
>> 45, in bg_studio
>>     email = row.emails.select().first()
>> AttributeError: 'Row' object has no attribute 'emails'
>>
>> Jose
>>
>

-- 



Reply via email to