int pgqtriga_make_sql(PgqTriggerEvent *ev, StringInfo sql) { TriggerData *tg = ev->tgdata; TupleDesc tupdesc; int i; int attcnt; int need_event = 1; tupdesc = tg->tg_relation->rd_att; /* * Count number of active columns */ for (i = 0, attcnt = 0; i < tupdesc->natts; i++) { if (tupdesc->attrs[i]->attisdropped) continue; attcnt++; } /* * Determine cmdtype and op_data depending on the command type */ if (TRIGGER_FIRED_BY_INSERT(tg->tg_event)) { process_insert(ev, sql); } else if (TRIGGER_FIRED_BY_UPDATE(tg->tg_event)) { need_event = process_update(ev, sql); } else if (TRIGGER_FIRED_BY_DELETE(tg->tg_event)) { process_delete(ev, sql); } else elog(ERROR, "logtriga fired for unhandled event"); return need_event; }
//called on heap_write static ssize_t heap_write(struct file *file, const char __user * in, size_t size, loff_t * off){ //printk(KERN_INFO"heap write call\n"); struct heap * h = file->private_data; if(size > _element_size) return -EFBIG; if (mutex_lock_interruptible(&h->lock)) return -ERESTARTSYS; if(h->cur_size == h->max_size) heap_pop(h); if (copy_from_user(h->data[h->cur_size],in, size)) return - EFAULT; process_insert(h); mutex_unlock(&h->lock); //printk(KERN_INFO"heap write done ok %i\n",h->cur_size); return size; }