Changeset: d847b54edf6a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d847b54edf6a
Modified Files:
monetdb5/optimizer/opt_mergetable.c
Branch: Jul2017
Log Message:
faster check for mat's
diffs (66 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
@@ -32,6 +32,7 @@ typedef struct mat {
typedef struct matlist {
mat_t *v;
+ int *vars; /* result variable is a mat */
int top;
int size;
@@ -50,11 +51,10 @@ mat_type( mat_t *mat, int n)
}
static int
-is_a_mat(int idx, matlist_t *ml){
- int i;
- for(i =0; i<ml->top; i++)
- if (!ml->v[i].packed && ml->v[i].mv == idx)
- return i;
+is_a_mat(int idx, matlist_t *ml)
+{
+ if (ml->vars[idx] && !ml->v[ml->vars[idx]].packed)
+ return ml->vars[idx];
return -1;
}
@@ -112,6 +112,7 @@ mat_add_var(matlist_t *ml, InstrPtr q, I
dst->pm = parentmat;
dst->packed = 0;
dst->pushed = pushed;
+ ml->vars[var] = ml->top;
++ml->top;
}
@@ -159,8 +160,11 @@ checksize(matlist_t *ml, int v)
ml->vsize *= 2;
ml->horigin = (int*) GDKrealloc(ml->horigin, sizeof(int)*
ml->vsize);
ml->torigin = (int*) GDKrealloc(ml->torigin, sizeof(int)*
ml->vsize);
- for (i = sz; i < ml->vsize; i++)
+ ml->vars = (int*) GDKrealloc(ml->vars, sizeof(int)* ml->vsize);
+ for (i = sz; i < ml->vsize; i++) {
ml->horigin[i] = ml->torigin[i] = -1;
+ ml->vars[i] = 0;
+ }
}
}
@@ -1546,7 +1550,8 @@ OPTmergetableImplementation(Client cntxt
ml.vsize = mb->vsize;
ml.horigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
ml.torigin = (int*) GDKmalloc(sizeof(int)* ml.vsize);
- if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL) {
+ ml.vars = (int*) GDKzalloc(sizeof(int)* ml.vsize);
+ if ( ml.v == NULL || ml.horigin == NULL || ml.torigin == NULL ||
ml.vars == NULL) {
goto cleanup;
}
for (i=0; i<ml.vsize; i++)
@@ -1867,6 +1872,7 @@ cleanup:
if (ml.v) GDKfree(ml.v);
if (ml.horigin) GDKfree(ml.horigin);
if (ml.torigin) GDKfree(ml.torigin);
+ if (ml.vars) GDKfree(ml.vars);
/* Defense line against incorrect plans */
if( actions > 0){
chkTypes(cntxt->fdout, cntxt->nspace, mb, FALSE);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list