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

Reply via email to