static sql_rel * rel_create_trigger(mvc *sql, char *sname, char *tname, char *triggername, int time, int orientation, int event, char *old_name, char *new_name, char *condition, char *query) { sql_rel *rel = rel_create(sql->sa); list *exps = new_exp_list(sql->sa); append(exps, exp_atom_str(sql->sa, sname, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, tname, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, triggername, sql_bind_localtype("str") )); append(exps, exp_atom_int(sql->sa, time)); append(exps, exp_atom_int(sql->sa, orientation)); append(exps, exp_atom_int(sql->sa, event)); append(exps, exp_atom_str(sql->sa, old_name, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, new_name, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, condition, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, query, sql_bind_localtype("str") )); rel->l = NULL; rel->r = NULL; rel->op = op_ddl; rel->flag = DDL_CREATE_TRIGGER; rel->exps = exps; rel->card = CARD_MULTI; rel->nrcols = 0; return rel; }
void rel_demux (const struct config_common *cc, const struct sockaddr_storage *ss, packet_t *pkt, size_t len) { assert(cc); assert(ss); assert(pkt); assert(len >= 0); rel_t *r; for (r = rel_list; r != NULL; r = r->next) { if (addreq(ss, &r->ss)) { rel_recvpkt(r, pkt, len); return; } } /* Before we create a new rel_t, we need to check * that this packet has a seqno == 1, otherwise * we're starting a flow part way in, and that's * against the rules. */ if (ntohl(pkt->seqno) != 1) { return; } /* If we reach here, then we need a new rel_t * for this connection, so we add it at the * head of the linked list of rel_t objects. */ rel_t *new_r = rel_create (NULL, ss, cc); rel_recvpkt(new_r, pkt, len); }
/* This function only gets called when the process is running as a * server and must handle connections from multiple clients. You have * to look up the rel_t structure based on the address in the * sockaddr_storage passed in. If this is a new connection (sequence * number 1), you will need to allocate a new conn_t using rel_create * (). (Pass rel_create NULL for the conn_t, so it will know to * allocate a new connection.) */ void rel_demux (const struct config_common *cc, const struct sockaddr_storage *ss, packet_t *pkt, size_t len) { if (!check_valid(pkt, len)) return; rel_t * r = rel_list; while (r) { if (r->ss && addreq(ss, r->ss)) { break; } r = r->next; } if (!r) { if (ntohl(pkt->seqno) == 1) { r = rel_create(NULL, ss, cc); } else { return; } } rel_recvpkt(r, pkt, len); }
static sql_rel * rel_psm_block(sql_allocator *sa, list *l) { if (l) { sql_rel *r = rel_create(sa); r->op = op_ddl; r->flag = DDL_PSM; r->exps = l; return r; } return NULL; }
static sql_rel* rel_create_function(sql_allocator *sa, char *sname, sql_func *f) { sql_rel *rel = rel_create(sa); list *exps = new_exp_list(sa); append(exps, exp_atom_clob(sa, sname)); append(exps, exp_atom_ptr(sa, f)); rel->l = NULL; rel->r = NULL; rel->op = op_ddl; rel->flag = DDL_CREATE_FUNCTION; rel->exps = exps; rel->card = 0; rel->nrcols = 0; return rel; }
static sql_rel * rel_drop_trigger(mvc *sql, char *sname, char *tname) { sql_rel *rel = rel_create(sql->sa); list *exps = new_exp_list(sql->sa); append(exps, exp_atom_str(sql->sa, sname, sql_bind_localtype("str") )); append(exps, exp_atom_str(sql->sa, tname, sql_bind_localtype("str") )); rel->l = NULL; rel->r = NULL; rel->op = op_ddl; rel->flag = DDL_DROP_TRIGGER; rel->exps = exps; rel->card = CARD_MULTI; rel->nrcols = 0; return rel; }
static sql_rel * rel_trans(mvc *sql, int trans_type, int nr, char *name) { sql_rel *rel = rel_create(sql->sa); list *exps = new_exp_list(sql->sa); append(exps, exp_atom_int(sql->sa, nr)); if (name) append(exps, exp_atom_clob(sql->sa, name)); rel->l = NULL; rel->r = NULL; rel->op = op_ddl; rel->flag = trans_type; rel->exps = exps; rel->card = 0; rel->nrcols = 0; return rel; }
static sql_rel* rel_drop_function(sql_allocator *sa, char *sname, char *name, int nr, int type, int action) { sql_rel *rel = rel_create(sa); list *exps = new_exp_list(sa); append(exps, exp_atom_clob(sa, sname)); append(exps, exp_atom_clob(sa, name)); append(exps, exp_atom_int(sa, nr)); append(exps, exp_atom_int(sa, type)); append(exps, exp_atom_int(sa, action)); rel->l = NULL; rel->r = NULL; rel->op = op_ddl; rel->flag = DDL_DROP_FUNCTION; rel->exps = exps; rel->card = 0; rel->nrcols = 0; return rel; }