Changeset: 9da17b22c397 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9da17b22c397
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
        sql/backends/monet5/sql_gencode.c
        testing/Mdiff.c
Branch: sfcgal
Log Message:

Merge with default


diffs (175 lines):

diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -335,6 +335,8 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
        InstrPtr r = NULL, q;
        mat_t *mat = ml->v;
 
+       assert (p->retc == 1);
+
        /* Find the mat we overwrite */
        if (is_assign) {
                n = is_a_mat(getArg(p, 0), ml);
@@ -389,34 +391,45 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
        return r;
 }
 
-static InstrPtr
+static void
 mat_apply2(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, 
int mvar, int nvar)
 {
-       int tpe, k, is_select = isSubSelect(p);
-       InstrPtr r = NULL;
+       int k, is_select = isSubSelect(p);
+       InstrPtr *r = NULL;
 
-       //printf("# %s.%s(%d,%d)", getModuleId(p), getFunctionId(p), m, n);
-
-       r = newInstruction(mb, ASSIGNsymbol);
-       setModuleId(r,matRef);
-       setFunctionId(r,packRef);
-       getArg(r, 0) = getArg(p,0);
-       tpe = getArgType(mb,p,0);
+       r = (InstrPtr*) GDKmalloc(sizeof(InstrPtr)* p->retc);
+       for(k=0; k < p->retc; k++) {
+               r[k] = newInstruction(mb, ASSIGNsymbol);
+               setModuleId(r[k],matRef);
+               setFunctionId(r[k],packRef);
+               getArg(r[k],0) = getArg(p,k);
+       }
 
        for(k=1; k < mat[m].mi->argc; k++) {
+               int l, tpe;
                InstrPtr q = copyInstruction(p);
 
-               getArg(q, 0) = newTmpVariable(mb, tpe);
+               for(l=0; l < p->retc; l++) {
+                       tpe = getArgType(mb,p,l);
+                       getArg(q, l) = newTmpVariable(mb, tpe);
+               }
                getArg(q, mvar) = getArg(mat[m].mi, k);
                getArg(q, nvar) = getArg(mat[n].mi, k);
                pushInstruction(mb, q);
-               if (is_select)
-                       setPartnr(ml, getArg(q,2), getArg(q,0), k);
-               else
-                       setPartnr(ml, -1, getArg(q,0), k);
-               r = pushArgument(mb, r, getArg(q, 0));
+               for(l=0; l < p->retc; l++) {
+                       if (is_select)
+                               setPartnr(ml, getArg(q,p->retc+1), getArg(q,l), 
k);
+                       else
+                               setPartnr(ml, -1, getArg(q,l), k);
+                       r[l] = pushArgument(mb, r[l], getArg(q, l));
+               }
        }
-       return r;
+
+       for(k=0; k < p->retc; k++) {
+               mat_add_var(ml, r[k], NULL, getArg(r[k], 0), mat_type(ml->v, 
m),  -1, -1, 1);
+               pushInstruction(mb, r[k]);
+       }
+       GDKfree(r);
 }
 
 static void
@@ -433,8 +446,6 @@ mat_apply3(MalBlkPtr mb, InstrPtr p, mat
                getArg(r[k],0) = getArg(p,k);
        }
 
-       //printf("# %s.%s(%d,%d,%d)", getModuleId(p), getFunctionId(p), m, n, 
o);
-
        for(k = 1; k < ml->v[m].mi->argc; k++) {
                int l, tpe;
                InstrPtr q = copyInstruction(p);
@@ -705,6 +716,7 @@ mat_joinNxM(Client cntxt, MalBlkPtr mb, 
                int nr_mv1 = split, nr_mv2 = nr_mats-split;
 
                if (split < 0) {
+                       GDKfree(mats);
                        mb->errors++;
                        return ;
                }
@@ -756,6 +768,7 @@ mat_joinNxM(Client cntxt, MalBlkPtr mb, 
        }
        mat_add(ml, l, mat_none, getFunctionId(p));
        mat_add(ml, r, mat_none, getFunctionId(p));
+       GDKfree(mats);
 }
 
 
@@ -1868,8 +1881,7 @@ OPTmergetableImplementation(Client cntxt
                   (m=is_a_mat(getArg(p,fm), &ml)) >= 0 &&
                   (n=is_a_mat(getArg(p,fn), &ml)) >= 0){
                        assert(ml.v[m].mi->argc == ml.v[n].mi->argc); 
-                       if ((r = mat_apply2(&ml, mb, p, ml.v, m, n, fm, fn)) != 
NULL)
-                               mat_add(&ml, r, mat_type(ml.v, m), 
getFunctionId(p));
+                       mat_apply2(&ml, mb, p, ml.v, m, n, fm, fn);
                        actions++;
                        continue;
                }
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
@@ -3084,7 +3084,7 @@ backend_create_sql_func(backend *be, sql
        Symbol backup = NULL;
        stmt *s;
        int i, retseen = 0, sideeffects = 0, vararg = (f->varres || f->vararg), 
no_inline = 0;
-       sql_allocator *sa, *osa = m->sa;
+       sql_allocator *sa;
 
        /* nothing to do for internal and ready (not recompiling) functions */
        if (!f->sql || (!vararg && f->sql > 1))
@@ -3094,7 +3094,6 @@ backend_create_sql_func(backend *be, sql
        sa = sa_create();
        m->session->schema = f->s;
        s = sql_parse(m, sa, f->query, m_instantiate);
-       m->sa = osa;
        m->session->schema = schema;
        if (s && !f->sql) {     /* native function */
                sa_destroy(sa);
@@ -3190,8 +3189,7 @@ backend_create_sql_func(backend *be, sql
                curBlk->inlineProp =1;
        if (sideeffects)
                curBlk->unsafeProp = 1;
-       f->sa = sa;
-       m->sa = osa;
+       sa_destroy(sa);
        addQueryToCache(c);
        if (backup)
                c->curprg = backup;
diff --git a/testing/Mdiff.c b/testing/Mdiff.c
--- a/testing/Mdiff.c
+++ b/testing/Mdiff.c
@@ -53,7 +53,7 @@ main(int argc, char **argv)
        char DEFAULT[] = "-I'^#'";
 #endif
        char ignoreWHITE[] = " -b -B";
-       char *old_fn, *new_fn, *html_fn, *caption = EMPTY, *revision = EMPTY, 
*ignoreEXP = DEFAULT, *ignore, *function = "";
+       char *old_fn, *new_fn, *html_fn, *caption = EMPTY, *revision = EMPTY, 
*ignoreEXP = DEFAULT, *ignore = NULL, *function = EMPTY;
        int LWC = 1, context = 1, option, mindiff = 0, quiet = 0;
 
        while ((option = getopt(argc, argv, "hdqA:C:I:F:t:r:")) != EOF)
@@ -108,6 +108,10 @@ main(int argc, char **argv)
                case 'h':
                default:
                        showUsage(argv[0]);
+                       if (ignoreEXP != DEFAULT)
+                               free(ignoreEXP);
+                       if (function != EMPTY)
+                               free(function);
                        exit(1);
                }
 
@@ -142,6 +146,11 @@ main(int argc, char **argv)
                }
                break;
        }
+       free(ignore);
+       if (ignoreEXP != DEFAULT)
+               free(ignoreEXP);
+       if (function != EMPTY)
+               free(function);
 
        TRACE(fprintf(STDERR, "done.\n"));
        return 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to