The problem is still there with nightly build.


On Monday, September 24, 2012 10:18:38 AM UTC-5, Massimo Di Pierro wrote:
>
> Please try the nightly build and let us know if the problem is still there.
>
> Massimo
>
> On Monday, 24 September 2012 07:49:26 UTC-5, VP wrote:
>>
>> As indicated in the title, I'm using 2.0.9, which is latest as of now.
>>
>>
>> On Sunday, September 23, 2012 4:41:15 PM UTC-5, Massimo Di Pierro wrote:
>>>
>>> What version are you using?
>>>
>>> This is what I get:
>>>
>>> >>> db=DAL()
>>> >>> product = db.define_table('product', Field('cost1'), Field('cost2'), 
>>> Field('total', compute = lambda r: r['cost1'] + r['cost2']))
>>> >>> product.insert(cost1=10, cost2=20)
>>> 1
>>> >>> p = db.product(1)
>>> >>> p.update_record(cost1=5)
>>> <Row {'update_record': <gluon.dal.RecordUpdater object at 0x1019bc250>, 
>>> 'cost1': 5, 'cost2': '20', 'total': '30', 'id': 1, 'delete_record': 
>>> <gluon.dal.RecordDeleter object at 0x1019bc290>}>
>>> >>> print db.product[1].total
>>> 30
>>>
>>> On Saturday, 22 September 2012 20:36:44 UTC-5, VP wrote:
>>>>
>>>> I figured out what I would call a bug.
>>>>
>>>> I'll give an example:
>>>>
>>>> Let's say we have this table:
>>>>
>>>>
>>>> product = db.define_table('product', Field('cost1'), Field('cost2'), 
>>>> Field('total', compute = lambda r: r['cost1'] + r['cost2']))
>>>>
>>>>
>>>> And if you do this:
>>>>
>>>> product.insert(cost1=10, cost2=20)
>>>> p = db.product(1)
>>>> p.update_record(cost1=5)
>>>>
>>>>
>>>> This update won't work.  What is worse is that it fails silently.   The 
>>>> reason it won't work is that the row input of the lambda does not have 
>>>> "cost2" in it.
>>>>
>>>> If, however, you do this:
>>>>
>>>> p.update_record(cost1=5, cost2=p.cost2)
>>>>
>>>> Then it will work, because now the parameter r (i.e. the row) has both 
>>>> cost1 and cost2.
>>>>
>>>>
>>>>
>>>> I think it'll be a little tricky for you to fix this, because you 
>>>> probably want update to have only relevant fields so that saving to the 
>>>> database is effective.   However, this behavior clearly is not desirable.
>>>>
>>>>
>>>>
>>>> On Saturday, September 22, 2012 5:23:43 PM UTC-5, Massimo Di Pierro 
>>>> wrote:
>>>>>
>>>>> Can you show us an example?
>>>>>
>>>>> computed fields usually do not work when there is not enough 
>>>>> information to compute. The information must be in the arguments of 
>>>>> update_record or update. It will not retrive the info from the database.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Saturday, 22 September 2012 15:43:59 UTC-5, VP wrote:
>>>>>>
>>>>>> - sqlite
>>>>>> - 2 compute fields do not seem to get call on update using both 
>>>>>> update_record and db().update
>>>>>> - They do work on crud/form updates though.
>>>>>>
>>>>>

-- 



Reply via email to