Changeset: 008005f1b242 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=008005f1b242
Added Files:
sql/test/json/Tests/components.stable.err
sql/test/json/Tests/components.stable.out
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_gencode.h
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/backends/monet5/sql_user.c
sql/common/sql_types.c
sql/common/sql_types.h
sql/include/sql_catalog.h
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_psm.c
sql/server/rel_psm.h
sql/server/rel_select.c
sql/server/rel_updates.c
sql/server/rel_xml.c
sql/server/sql_env.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_parser.y
sql/server/sql_semantic.c
sql/storage/sql_storage.h
sql/storage/store.c
sql/test/ADT2006/Tests/bram.stable.out
sql/test/BugDay_2005-10-06_2.9.3/Tests/CrashMe_SQL_server_crash-2.SF-921673.stable.out
sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--optimizers.stable.out
sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908--performance.stable.out
sql/test/BugTracker-2009/Tests/dumping_tables.SF-2776908.stable.out
sql/test/BugTracker-2009/Tests/join_topn.SF-2654133.stable.out
sql/test/BugTracker-2010/Tests/limit_in_prepare.Bug-2552.stable.out
sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.out
sql/test/BugTracker-2013/Tests/qualified_aggrname.Bug-3332.stable.out
sql/test/BugTracker-2013/Tests/swapped_likejoin.Bug-3375.stable.out
sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
sql/test/Tests/systemfunctions.stable.out
sql/test/bugs/Tests/innerjoin_multiple-bug-sf-943661.stable.out
sql/test/json/Tests/bulklength.sql
sql/test/json/Tests/bulklength.stable.out
sql/test/json/Tests/bulkvalid.sql
sql/test/json/Tests/bulkvalid.stable.out
sql/test/json/Tests/coercions.sql
sql/test/json/Tests/coercions.stable.out
sql/test/json/Tests/components.sql
sql/test/leaks/Tests/check0.stable.out
sql/test/leaks/Tests/check1.stable.out
sql/test/leaks/Tests/check2.stable.out
sql/test/leaks/Tests/check3.stable.out
sql/test/leaks/Tests/check4.stable.out
sql/test/leaks/Tests/check5.stable.out
sql/test/leaks/Tests/drop3.stable.out
sql/test/leaks/Tests/select1.stable.out
sql/test/leaks/Tests/select2.stable.out
sql/test/leaks/Tests/temp1.stable.out
sql/test/leaks/Tests/temp2.stable.out
sql/test/leaks/Tests/temp3.stable.out
sql/test/mapi/Tests/php_monetdb.stable.out
Branch: default
Log Message:
cleanup of function/argument storage.
Table results are now cleanly stored in the args table.
args has a new column inout.
functions has 2 new columns varres/vararg for variable results/arguments.
The later (variable arguments) still needs more work to be functional.
diffs (truncated from 5915 to 300 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -301,7 +301,10 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
stmt *r = exp_bin(sql, e->l, left, right, grp, ext,
cnt, sel);
return stmt_assign(sql->sa, e->name, r,
GET_PSM_LEVEL(e->flag));
} else if (e->flag & PSM_VAR) {
- return stmt_var(sql->sa, e->name, &e->tpe, 1,
GET_PSM_LEVEL(e->flag));
+ if (e->f) /* TODO TABLE */
+ return stmt_vars(sql->sa, e->name, e->f, 1,
GET_PSM_LEVEL(e->flag));
+ else
+ return stmt_var(sql->sa, e->name, &e->tpe, 1,
GET_PSM_LEVEL(e->flag));
} else if (e->flag & PSM_RETURN) {
sql_exp *l = e->l;
stmt *r = exp_bin(sql, l, left, right, grp, ext, cnt,
sel);
@@ -758,78 +761,77 @@ stmt_dels( mvc *sql, sql_table *t)
}
+#if 0
static stmt *
-check_table_types(mvc *sql, sql_table *ct, stmt *s, check_type tpe)
+check_table_types(mvc *sql, list *types, stmt *s, check_type tpe)
{
- char *tname;
+ //char *tname;
stmt *tab = s;
int temp = 0;
if (s->type != st_table) {
- char *t = (ct->type==tt_generated)?"table":"unknown";
return sql_error(
sql, 03,
- "single value and complex type '%s' are not equal", t);
+ "single value and complex type are not equal");
}
tab = s->op1;
temp = s->flag;
if (tab->type == st_var) {
- sql_table *tbl = tail_type(tab)->comp_type;
+ sql_table *tbl = NULL;//tail_type(tab)->comp_type;
stmt *dels = stmt_dels(sql, tbl);
node *n, *m;
list *l = sa_list(sql->sa);
stack_find_var(sql, tab->op1->op4.aval->data.val.sval);
- for (n = ct->columns.set->h, m = tbl->columns.set->h;
+ for (n = types->h, m = tbl->columns.set->h;
n && m; n = n->next, m = m->next)
{
- sql_column *c = n->data;
+ sql_subtype *ct = n->data;
sql_column *dtc = m->data;
stmt *dtcs = stmt_col(sql, dtc, dels);
- stmt *r = check_types(sql, &c->type, dtcs, tpe);
+ stmt *r = check_types(sql, ct, dtcs, tpe);
if (!r)
return NULL;
- r = stmt_alias(sql->sa, r, tbl->base.name,
c->base.name);
+ //r = stmt_alias(sql->sa, r, tbl->base.name,
c->base.name);
list_append(l, r);
}
return stmt_table(sql->sa, stmt_list(sql->sa, l), temp);
} else if (tab->type == st_list) {
node *n, *m;
list *l = sa_list(sql->sa);
- for (n = ct->columns.set->h, m = tab->op4.lval->h;
+ for (n = types->h, m = tab->op4.lval->h;
n && m; n = n->next, m = m->next)
{
- sql_column *c = n->data;
- stmt *r = check_types(sql, &c->type, m->data, tpe);
+ sql_subtype *ct = n->data;
+ stmt *r = check_types(sql, ct, m->data, tpe);
if (!r)
return NULL;
- tname = table_name(sql->sa, r);
- r = stmt_alias(sql->sa, r, tname, c->base.name);
+ //tname = table_name(sql->sa, r);
+ //r = stmt_alias(sql->sa, r, tname, c->base.name);
list_append(l, r);
}
return stmt_table(sql->sa, stmt_list(sql->sa, l), temp);
} else { /* single column/value */
- sql_column *c;
stmt *r;
- sql_subtype *st = tail_type(tab);
-
- if (list_length(ct->columns.set) != 1) {
+ sql_subtype *st = tail_type(tab), *ct;
+
+ if (list_length(types) != 1) {
stmt *res = sql_error(
sql, 03,
- "single value of type %s and complex type '%s'
are not equal",
- st->type->sqlname,
- (ct->type==tt_generated)?"table":"unknown"
+ "single value of type %s and complex type are
not equal",
+ st->type->sqlname
);
return res;
}
- c = ct->columns.set->h->data;
- r = check_types(sql, &c->type, tab, tpe);
- tname = table_name(sql->sa, r);
- r = stmt_alias(sql->sa, r, tname, c->base.name);
+ ct = types->h->data;
+ r = check_types(sql, ct, tab, tpe);
+ //tname = table_name(sql->sa, r);
+ //r = stmt_alias(sql->sa, r, tname, c->base.name);
return stmt_table(sql->sa, r, temp);
}
}
+#endif
static void
sql_convert_arg(mvc *sql, int nr, sql_subtype *rt)
@@ -895,8 +897,10 @@ check_types(mvc *sql, sql_subtype *ct, s
int c = 0;
sql_subtype *t = NULL, *st = NULL;
- if (ct->comp_type)
- return check_table_types(sql, ct->comp_type, s, tpe);
+ /*
+ if (ct->types)
+ return check_table_types(sql, ct->types, s, tpe);
+ */
st = tail_type(s);
if ((!st || !st->type) && stmt_set_type_param(sql, ct, s) == 0) {
@@ -962,10 +966,12 @@ sql_unop_(mvc *sql, sql_schema *s, char
f = NULL;
}
if (f) {
+ /*
if (f->func->res.scale == INOUT) {
f->res.digits = rt->digits;
f->res.scale = rt->scale;
}
+ */
return stmt_unop(sql->sa, rs, f);
} else if (rs) {
char *type = tail_type(rs)->type->sqlname;
@@ -1172,12 +1178,8 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
if (op) {
int i;
sql_subfunc *f = op->f;
- sql_table *t = f->res.comp_type;
stmt *psub = NULL;
- if (!t)
- t = f->func->res.comp_type;
-
if (rel->l) { /* first construct the sub relation */
sql_rel *l = rel->l;
if (l->op == op_ddl) {
@@ -1193,19 +1195,30 @@ rel2bin_table( mvc *sql, sql_rel *rel, l
}
psub = exp_bin(sql, op, sub, NULL, NULL, NULL, NULL, NULL); /*
table function */
- if (!t || !psub) {
+ if (!f || !psub) {
assert(0);
return NULL;
}
l = sa_list(sql->sa);
- for(i = 0, n = t->columns.set->h; n; n = n->next, i++ ) {
- sql_column *c = n->data;
- stmt *s = stmt_rs_column(sql->sa, psub, i, &c->type);
- char *nme = c->base.name;
- char *rnme = exp_find_rel_name(op);
-
- s = stmt_alias(sql->sa, s, rnme, nme);
- list_append(l, s);
+ if (f->func->varres) {
+ for(i=0, en = rel->exps->h, n = f->res->h; en; en =
en->next, n = n->next, i++ ) {
+ sql_exp *exp = en->data;
+ sql_subtype *st = n->data;
+ char *rnme = exp->rname?exp->rname:exp->l;
+ stmt *s = stmt_rs_column(sql->sa, psub, i, st);
+
+ s = stmt_alias(sql->sa, s, rnme, exp->name);
+ list_append(l, s);
+ }
+ } else {
+ for(i = 0, n = f->func->res->h; n; n = n->next, i++ ) {
+ sql_arg *a = n->data;
+ stmt *s = stmt_rs_column(sql->sa, psub, i,
&a->type);
+ char *rnme = exp_find_rel_name(op);
+
+ s = stmt_alias(sql->sa, s, rnme, a->name);
+ list_append(l, s);
+ }
}
if (sub && sub->nrcols) { /* add sub */
list_merge(l, sub->op4.lval, NULL);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -841,8 +841,6 @@ drop_func(mvc *sql, char *sname, char *n
if (!action && mvc_check_dependency(sql, func->base.id,
!IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
return sql_message("DROP %s%s: there are
database objects dependent on %s%s %s;", KF, F, kf, f, func->base.name);
- if (is_func && func->res.comp_type)
- mvc_drop_table(sql, func->res.comp_type->s,
func->res.comp_type, 0);
mvc_drop_func(sql, s, func, action);
}
} else {
@@ -881,7 +879,7 @@ create_func(mvc *sql, char *sname, sql_f
return sql_message("3F000!CREATE %s%s: no such schema '%s'",
KF, F, sname);
if (!s)
s = cur_schema(sql);
- nf = mvc_create_func(sql, NULL, s, f->base.name, f->ops, &f->res,
f->type, f->mod, f->imp, f->query);
+ nf = mvc_create_func(sql, NULL, s, f->base.name, f->ops, f->res,
f->type, f->mod, f->imp, f->query, f->varres, f->vararg);
if (nf && nf->query) {
char *buf;
sql_rel *r = NULL;
@@ -1323,7 +1321,7 @@ sql_variables(Client cntxt, MalBlkPtr mb
if (vars == NULL)
throw(SQL, "sql.variables", MAL_MALLOC_FAIL);
BATseqbase(vars, 0);
- for (i = 0; i < m->topvars && m->vars[i].s; i++)
+ for (i = 0; i < m->topvars && !m->vars[i].frame; i++)
BUNappend(vars, m->vars[i].name, FALSE);
*res = vars->batCacheid;
BBPkeepref(vars->batCacheid);
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -222,21 +222,35 @@ dump_cols(MalBlkPtr mb, list *l, InstrPt
}
static InstrPtr
-table_func_create_result(MalBlkPtr mb, InstrPtr q, sql_table *f)
+table_func_create_result(MalBlkPtr mb, InstrPtr q, sql_func *f, list *restypes)
{
node *n;
int i;
- for (i = 0, n = f->columns.set->h; n; n = n->next, i++) {
- sql_column *c = n->data;
- int type = c->type.type->localtype;
+ if (f->varres) {
+ for (i = 0, n = restypes->h; n; n = n->next, i++) {
+ sql_subtype *st = n->data;
+ int type = st->type->localtype;
- type = newBatType(TYPE_oid, type);
- if (i)
- q = pushReturn(mb, q, newTmpVariable(mb, type));
- else
- setVarType(mb, getArg(q, 0), type);
- setVarUDFtype(mb, getArg(q, i));
+ type = newBatType(TYPE_oid, type);
+ if (i)
+ q = pushReturn(mb, q, newTmpVariable(mb, type));
+ else
+ setVarType(mb, getArg(q, 0), type);
+ setVarUDFtype(mb, getArg(q, i));
+ }
+ } else {
+ for (i = 0, n = f->res->h; n; n = n->next, i++) {
+ sql_arg *a = n->data;
+ int type = a->type.type->localtype;
+
+ type = newBatType(TYPE_oid, type);
+ if (i)
+ q = pushReturn(mb, q, newTmpVariable(mb, type));
+ else
+ setVarType(mb, getArg(q, 0), type);
+ setVarUDFtype(mb, getArg(q, i));
+ }
}
return q;
}
@@ -521,17 +535,19 @@ range_join_convertable(stmt *s, stmt **b
if (tt > TYPE_lng)
return 0;
+ /*
if (s->op2->type == st_binop) {
bl = s->op2->op1;
l = s->op2->op2;
- } else if (s->op2->type == st_Nop && list_length(s->op2->op1->op4.lval)
== 2) {
+ } else */if (s->op2->type == st_Nop &&
list_length(s->op2->op1->op4.lval) == 2) {
bl = s->op2->op1->op4.lval->h->data;
l = s->op2->op1->op4.lval->t->data;
}
+/*
if (s->op3->type == st_binop) {
bh = s->op3->op1;
h = s->op3->op2;
- } else if (s->op3->type == st_Nop && list_length(s->op3->op1->op4.lval)
== 2) {
+ } else */ if (s->op3->type == st_Nop &&
list_length(s->op3->op1->op4.lval) == 2) {
bh = s->op3->op1->op4.lval->h->data;
h = s->op3->op1->op4.lval->t->data;
}
@@ -621,6 +637,9 @@ multiplexN(MalBlkPtr mb, char *mod, char
return q;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list