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; }
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; }
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_trigger(mvc *sql, const char *sname, const char *tname, int if_exists) { sql_rel *rel = rel_create(sql->sa); list *exps = new_exp_list(sql->sa); if(!rel || !exps) return NULL; 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_int(sql->sa, if_exists)); 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 * psm_analyze(mvc *sql, char *analyzeType, dlist *qname, dlist *columns, symbol *sample, int minmax ) { exp_kind ek = {type_value, card_value, FALSE}; sql_exp *sample_exp = NULL, *call, *mm_exp = NULL; const char *sname = NULL, *tname = NULL; list *tl = sa_list(sql->sa); list *exps = sa_list(sql->sa), *analyze_calls = sa_list(sql->sa); sql_subfunc *f = NULL; append(exps, mm_exp = exp_atom_int(sql->sa, minmax)); append(tl, exp_subtype(mm_exp)); if (sample) { sql_subtype *tpe = sql_bind_localtype("lng"); sample_exp = rel_value_exp( sql, NULL, sample, 0, ek); if (sample_exp) sample_exp = rel_check_type(sql, tpe, sample_exp, type_cast); } else { sample_exp = exp_atom_lng(sql->sa, 0); } append(exps, sample_exp); append(tl, exp_subtype(sample_exp)); assert(qname); if (qname) { if (qname->h->next) sname = qname_schema(qname); else sname = qname_table(qname); if (!sname) sname = cur_schema(sql)->base.name; if (qname->h->next) tname = qname_table(qname); } /* call analyze( [schema, [ table ]], opt_sample_size, opt_minmax ) */ if (sname) { sql_exp *sname_exp = exp_atom_clob(sql->sa, sname); append(exps, sname_exp); append(tl, exp_subtype(sname_exp)); } if (tname) { sql_exp *tname_exp = exp_atom_clob(sql->sa, tname); append(exps, tname_exp); append(tl, exp_subtype(tname_exp)); if (columns) append(tl, exp_subtype(tname_exp)); } if (!columns) { f = sql_bind_func_(sql->sa, mvc_bind_schema(sql, "sys"), analyzeType, tl, F_PROC); if (!f) return sql_error(sql, 01, SQLSTATE(42000) "Analyze procedure missing"); call = exp_op(sql->sa, exps, f); append(analyze_calls, call); } else { dnode *n; if (!sname || !tname) return sql_error(sql, 01, SQLSTATE(42000) "Analyze schema or table name missing"); f = sql_bind_func_(sql->sa, mvc_bind_schema(sql, "sys"), analyzeType, tl, F_PROC); if (!f) return sql_error(sql, 01, SQLSTATE(42000) "Analyze procedure missing"); for( n = columns->h; n; n = n->next) { const char *cname = n->data.sval; list *nexps = list_dup(exps, NULL); sql_exp *cname_exp = exp_atom_clob(sql->sa, cname); append(nexps, cname_exp); /* call analyze( opt_minmax, opt_sample_size, sname, tname, cname) */ call = exp_op(sql->sa, nexps, f); append(analyze_calls, call); } } return rel_psm_block(sql->sa, analyze_calls); }