[web2py] Re: Web2py with postgresql and DB triggers

2014-06-13 Thread Massimo Di Pierro
What does "#now do something with newreorderrow" do? 

On Thursday, 12 June 2014 14:12:45 UTC-5, Chris Farrar wrote:
>
> Hi,
>
> I'm struggling with a strange issue.
>
> I have a web2py application with a simple data model.  I have a table 
> called "reorder".  The user is able to interact with "reorder" using a 
> SQLFORM.grid.   I have implemented the oncreate call back.  My oncreate 
> callback gets the id of the newly inserted reorder record then does 
> something with it.
>
>
> def oncreatereorderhandler(form):
> myid = form.vars.id
> newreorderrow = db.reorder(myid)
> #now do something with newreorderrow
>
>
> Generally this works well.  form.vars.id correctly corresponds to the id 
> of the newly inserted row and life is happy.  The problem occurs when I put 
> a database trigger on the reorder table that fires after the insert. 
>  Whenever this trigger is on the database the value of form.vars.id is 
> nonsense.  The actual id of the inserted row is fine it's just that the 
> value of form.vars.id in now way corresponds to it.  For example, after 
> the trigger is added, the values of form.vars.id will be 4 for the very 
> next insert.  For every insert after the value will increment by 3 (eg 4, 
> 7, 10, 13, etc).  When I remove the trigger everything returns to normal.  
>
> How is form.vars.id populated and how would a DB trigger interfere?
>
> Here's the trigger and associated procedure.   It was generated by 
> symmetricds.
>
> CREATE TRIGGER sym_on_i_for_rrdr_trggr_crp
>   AFTER INSERT
>   ON reorder
>   FOR EACH ROW
>   EXECUTE PROCEDURE fsym_on_i_for_rrdr_trggr_crp();
>
>
> -- Function: fsym_on_i_for_rrdr_trggr_crp()
>
> -- DROP FUNCTION fsym_on_i_for_rrdr_trggr_crp();
>
> CREATE OR REPLACE FUNCTION fsym_on_i_for_rrdr_trggr_crp()
>   RETURNS trigger AS
> $BODY$ 
>   
>  begin 
> 
>if 1=1 and 
> "public".sym_triggers_disabled() = 0 then   
> 
>   insert into "public".sym_data 
> 
> (table_name, 
> event_type, trigger_hist_id, row_data, channel_id, transaction_id, 
> source_node_id, external_data, create_time) 
>values( 
> 
> 
>  'reorder', 
> 
>  'I',   
> 
> 
> 8, 
> 
>   
>   case when new."uuid" is null then '' else '"' || 
> replace(replace(cast(new."uuid" as varchar),$$\$$,$$\\$$),'"',$$\"$$) || 
> '"' end||','||
>   case when new."id" is null then '' else '"' || 
> cast(cast(new."id" as numeric) as varchar) || '"' end||','||
>   case when new."modified_on" is null then '' else '"' || 
> to_char(new."modified_on", '-MM-DD HH24:MI:SS.US') || '"' end||','||
>   case when new."productid" is null then '' else '"' || 
> replace(replace(cast(new."productid" as varchar),$$\$$,$$\\$$),'"',$$\"$$) 
> || '"' end||','||
>   case when new."reorderquantity" is null then '' else '"' || 
> cast(cast(new."reorderquantity" as numeric) as varchar) || '"' end||','||
>   case when new."receivedquantity" is null then '' else '"' || 
> cast(cast(new."receivedquantity" as numeric) as varchar) || '"' end||','||
>   case when new."reorderdate" is null then '' else '"' || 
> to_char(new."reorderdate", '-MM-DD HH24:MI:SS.US') || '"' end||','||
>   case when new."expectedreceivedate" is null then '' else '"' || 
> to_char(new."expectedreceivedate", '-MM-DD HH24:MI:SS.US') || '"' 
> end||','||
>   case when new."vendorso" is null then '' else '"' || 
> replace(replace(cast(new."vendorso" as varchar),$$\$$,$$\\$$),'"',$$\"$$) 
> || '"' end||','||
>   case when new."customerpo" is null then '' else '"' || 
> repla

[web2py] Re: Web2py with postgresql and DB triggers

2014-06-14 Thread Chris Farrar
Hi Massimo,

I'm simply recording in another table that an insert has been made in the 
reorder table.

Here's the full function:

def oncreatereorderhandler(form):
myid = form.vars.id
newreorderrow = db.reorder(myid)

#now do something with newreorderrow
db.trans.insert(ProductID=newreorderrow.uuid, TransactionType='New 
Reorder',
Quantity=form.vars.Quantity, Notes='Initial Stock', 
UserID=auth.user.uuid
,TransactionTime=datetime.now())


Thanks for your help!


On Friday, June 13, 2014 12:53:09 PM UTC-4, Massimo Di Pierro wrote:
>
> What does "#now do something with newreorderrow" do? 
>
> On Thursday, 12 June 2014 14:12:45 UTC-5, Chris Farrar wrote:
>>
>> Hi,
>>
>> I'm struggling with a strange issue.
>>
>> I have a web2py application with a simple data model.  I have a table 
>> called "reorder".  The user is able to interact with "reorder" using a 
>> SQLFORM.grid.   I have implemented the oncreate call back.  My oncreate 
>> callback gets the id of the newly inserted reorder record then does 
>> something with it.
>>
>>
>> def oncreatereorderhandler(form):
>> myid = form.vars.id
>> newreorderrow = db.reorder(myid)
>> #now do something with newreorderrow
>>
>>
>> Generally this works well.  form.vars.id correctly corresponds to the id 
>> of the newly inserted row and life is happy.  The problem occurs when I put 
>> a database trigger on the reorder table that fires after the insert. 
>>  Whenever this trigger is on the database the value of form.vars.id is 
>> nonsense.  The actual id of the inserted row is fine it's just that the 
>> value of form.vars.id in now way corresponds to it.  For example, after 
>> the trigger is added, the values of form.vars.id will be 4 for the very 
>> next insert.  For every insert after the value will increment by 3 (eg 4, 
>> 7, 10, 13, etc).  When I remove the trigger everything returns to normal.  
>>
>> How is form.vars.id populated and how would a DB trigger interfere?
>>
>> Here's the trigger and associated procedure.   It was generated by 
>> symmetricds.
>>
>> CREATE TRIGGER sym_on_i_for_rrdr_trggr_crp
>>   AFTER INSERT
>>   ON reorder
>>   FOR EACH ROW
>>   EXECUTE PROCEDURE fsym_on_i_for_rrdr_trggr_crp();
>>
>>
>> -- Function: fsym_on_i_for_rrdr_trggr_crp()
>>
>> -- DROP FUNCTION fsym_on_i_for_rrdr_trggr_crp();
>>
>> CREATE OR REPLACE FUNCTION fsym_on_i_for_rrdr_trggr_crp()
>>   RETURNS trigger AS
>> $BODY$   
>> 
>>  begin 
>> 
>>if 1=1 and 
>> "public".sym_triggers_disabled() = 0 then   
>> 
>>   insert into "public".sym_data 
>> 
>> (table_name, 
>> event_type, trigger_hist_id, row_data, channel_id, transaction_id, 
>> source_node_id, external_data, create_time) 
>>values( 
>> 
>> 
>>  'reorder', 
>> 
>>  'I',   
>> 
>> 
>> 8, 
>> 
>>   
>>   case when new."uuid" is null then '' else '"' || 
>> replace(replace(cast(new."uuid" as varchar),$$\$$,$$\\$$),'"',$$\"$$) || 
>> '"' end||','||
>>   case when new."id" is null then '' else '"' || 
>> cast(cast(new."id" as numeric) as varchar) || '"' end||','||
>>   case when new."modified_on" is null then '' else '"' || 
>> to_char(new."modified_on", '-MM-DD HH24:MI:SS.US') || '"' end||','||
>>   case when new."productid" is null then '' else '"' || 
>> replace(replace(cast(new."productid" as varchar),$$\$$,$$\\$$),'"',$$\"$$) 
>> || '"' end||','||
>>   case when new."reorderquantity" is null then '' else '"' || 
>> cast(cast(new."reorderquantity" as numeric) as varchar) || '"' end||','||
>>   ca