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