I've got the same problem. I have a field with type decimal(12,4), I can 
add a number to this field but not subtract. So instead of
db(db.client_service.id == id).update(minutes_done = 
db.client_service.minutes_done 
- minutes)

I have to write
minutes = -minutes
db(db.client_service.id == id).update(minutes_done = 
db.client_service.minutes_done 
+ minutes)

as a workaround. that makes the code much harder to read. I see no reason 
why the first query should not be possible. Any chance this will be fixed?

Alex

Am Mittwoch, 6. März 2013 19:30:22 UTC+1 schrieb Cliff Kachinske:
>
> I see what the code is doing.
>
> Would this work?
>
> if db._adapter.driver.__name__ in ('sqlite'): # maybe others?
>     if self.type in ('integer','bigint'):
>                 result_type = 'integer'
> elif self.type in ['date','time','datetime','double','float']:
>                 result_type = 'double'
> else:
>                 raise SyntaxError("subtraction operation not supported for 
> type")
> else:
>     result_type = self.type
>
>
>
> On Wednesday, March 6, 2013 11:55:20 AM UTC-5, Massimo Di Pierro wrote:
>>
>> According to the code:
>>
>> if self.type in ('integer','bigint'):
>>             result_type = 'integer'
>> elif self.type in ['date','time','datetime','double','float']:
>>             result_type = 'double'
>> else:
>>             raise SyntaxError("subtraction operation not supported for 
>> type")
>>
>> what is the type of db.production_jobs.quantity_on_hand?
>>
>> On Wednesday, 6 March 2013 08:45:20 UTC-6, Cliff Kachinske wrote:
>>>
>>> V 2.4.2
>>>
>>> Apparently I can add a negative number in an update expression but I cannot 
>>> subtract a positive number.  
>>>
>>>
>>> Snippet:
>>>
>>> delta = new_allocation - record.quantity_allocated 
>>> db(db.production_jobs.id==record.production_job_id).update(
>>>         quantity_on_hand=db.production_jobs.quantity_on_hand - delta # 
>>> subtraction.  DAL will not like it
>>>         )
>>>
>>> Snippet raises this exception:
>>>
>>> File 
>>> "/home/cjk/pybin/w-2-4-2/web2py/applications/Inventory/controllers/customer_order_product_lots.py",
>>>  line 70, in update_lot_record
>>>  quantity_on_hand=db.production_jobs.quantity_on_hand - delta
>>>  File "/home/cjk/pybin/w-2-4-2/web2py/gluon/dal.py", line 8820, in __sub__
>>>  raise SyntaxError("subtraction operation not supported for type")
>>> SyntaxError: subtraction operation not supported for type
>>>
>>> Hackish workaround:
>>>
>>> delta = -(new_allocation - record.quantity_allocated) # flip value to 
>>> negative
>>> db(db.production_jobs.id==record.production_job_id).update(
>>>         quantity_on_hand=db.production_jobs.quantity_on_hand + delta # add 
>>> negative number.  DAL okay with this
>>>         )
>>>
>>>
>>> Is this the expected behavior?
>>>
>>> Or am I missing something?
>>>
>>>
>>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to