Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
//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;
}