Thread

  1. I'm baffled

    hook <hook@kcp.com> — 2004-05-18T16:19:16Z

    I have a couple of 'c' object files that send mail when ever there in an 
    insert or delete to specified tables.
    The problem is that I get the mail message even if the insert fails!
    
    what am I doing wrong?
    
    
    thanks
    
    
    The function;
        create function insert_r1(text, text, text, text) returns int4
             as '/var/pgsql/insert_r1.so' LANGUAGE 'c' ;
    the rule:
      create rule partmaster_I as
        on insert to partmaster
           do select insert_R1(new.afpn, 'partmaster(insert)','','') as answer;
    
    the 'c' module:
    # include "internal/postgres_fe.h"
    # include <string.h>
    # include <unistd.h>
    
    int insert_r1(text *arg1, text *arg2, text *arg3, text *arg4)
    {
      char *table, *key, *mesg, *user;
      char host[20];
      FILE *fp;
     
      arg1->vl_dat[arg1->vl_len - VARHDRSZ] = '\0';
      arg2->vl_dat[arg2->vl_len - VARHDRSZ] = '\0';
      arg3->vl_dat[arg3->vl_len - VARHDRSZ] = '\0';
      arg4->vl_dat[arg4->vl_len - VARHDRSZ] = '\0';
    
      key   = strdup(arg1->vl_dat);
      table = strdup(arg2->vl_dat);
      mesg  = strdup(arg3->vl_dat);
      user  = strdup(arg4->vl_dat);
    
      gethostname(host, sizeof(host));
      system(" cat /tmp/newMsg >> /tmp/newMsg.arc");
      if ( (fp = fopen("/tmp/newMsg", "w+") ) == NULL)
        return(-1);
        fprintf(fp, "%s:: %s:(%s) Approval requested  - %s   %s\n", 
    host,table,key,mesg,user);
          fclose (fp);
    
        system("Mail -s \"Bmss \" hook@kcp.com     < /tmp/newMsg");
      return(0);
    }