Changeset: 7e403eb4734e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e403eb4734e
Modified Files:
clients/Tests/exports.stable.out
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out
sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
sql/test/mergetables/Tests/mergequery.stable.out
sql/test/pg_regress/Tests/strings.stable.err.int128
sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:
removed properties h/t origin
diffs (truncated from 1981 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2173,7 +2173,6 @@ int hasSideEffects(InstrPtr p, int stric
str hashRef;
int have_hge;
str hgeRef;
-int horiginProp;
str identityRef;
str ifthenelseRef;
str ilikeRef;
@@ -2584,7 +2583,6 @@ timestamp *timestamp_nil;
int timestamp_tostr(str *buf, int *len, const timestamp *val);
int timestamp_tz_fromstr(const char *buf, int *len, timestamp **ret);
int timestamp_tz_tostr(str *buf, int *len, const timestamp *val, const tzone
*timezone);
-int toriginProp;
void trimMalBlk(MalBlkPtr mb);
void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb);
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
@@ -34,6 +34,10 @@ typedef struct matlist {
mat_t *v;
int top;
int size;
+
+ int *horigin;
+ int *torigin;
+ int vsize;
} matlist_t;
static mat_type_t
@@ -141,84 +145,99 @@ mat_pack(MalBlkPtr mb, mat_t *mat, int m
}
static void
-setPartnr(MalBlkPtr mb, int ivar, int ovar, int pnr)
+checksize(matlist_t *ml, int v)
+{
+ if (v >= ml->vsize) {
+ int sz = ml->vsize, i;
+
+ 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->horigin[i] = ml->torigin[i] = -1;
+ }
+}
+
+static void
+setPartnr(matlist_t *ml, int ivar, int ovar, int pnr)
{
int tpnr = -1;
- VarPtr partnr = (ivar >= 0)?varGetProp(mb, ivar, toriginProp):NULL;
- ValRecord val;
- if (partnr) {
- varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
- tpnr = partnr->value.val.ival;
- }
- val.val.ival = pnr;
- val.vtype = TYPE_int;
- varSetProp(mb, ovar, horiginProp, op_eq, &val);
- (void)tpnr;
+ checksize(ml, ivar);
+ checksize(ml, ovar);
+ if (ivar >= 0)
+ tpnr = ml->torigin[ivar];
+ if (tpnr >= 0)
+ ml->torigin[ovar] = tpnr;
+ ml->horigin[ovar] = pnr;
//printf("%d %d ", pnr, tpnr);
}
static void
-propagatePartnr(MalBlkPtr mb, int ivar, int ovar, int pnr)
+propagatePartnr(matlist_t *ml, int ivar, int ovar, int pnr)
{
/* prop head ids to tail */
int tpnr = -1;
- VarPtr partnr = varGetProp(mb, ivar, horiginProp);
- ValRecord val;
- val.val.ival = pnr;
- val.vtype = TYPE_int;
- if (partnr) {
- varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
- tpnr = partnr->value.val.ival;
- }
- varSetProp(mb, ovar, horiginProp, op_eq, &val);
- (void)tpnr;
+ checksize(ml, ivar);
+ checksize(ml, ovar);
+ if (ivar >= 0)
+ tpnr = ml->horigin[ivar];
+ if (tpnr >= 0)
+ ml->torigin[ovar] = tpnr;
+ ml->horigin[ovar] = pnr;
//printf("%d %d ", pnr, tpnr);
}
static void
-propagateMirror(MalBlkPtr mb, int ivar, int ovar)
+propagateMirror(matlist_t *ml, int ivar, int ovar)
{
/* prop head ids to head and tail */
- VarPtr partnr = varGetProp(mb, ivar, horiginProp);
+ int tpnr;
- if (partnr) {
- varSetProp(mb, ovar, toriginProp, op_eq, &partnr->value);
- varSetProp(mb, ovar, horiginProp, op_eq, &partnr->value);
+ checksize(ml, ivar);
+ checksize(ml, ovar);
+ tpnr = ml->horigin[ivar];
+ if (tpnr >= 0) {
+ ml->horigin[ovar] = tpnr;
+ ml->torigin[ovar] = tpnr;
}
}
static int
-overlap( MalBlkPtr mb, int lv, int rv, int lnr, int rnr, int ontails)
+overlap(matlist_t *ml, int lv, int rv, int lnr, int rnr, int ontails)
{
- VarPtr lpartnr = varGetProp(mb, lv, toriginProp);
- VarPtr rpartnr = varGetProp(mb, rv, (ontails)?toriginProp:horiginProp);
+ int lpnr, rpnr;
- if (!lpartnr && !rpartnr)
+ checksize(ml, lv);
+ checksize(ml, rv);
+ lpnr = ml->torigin[lv];
+ rpnr = (ontails)?ml->torigin[rv]:ml->horigin[rv];
+
+ if (lpnr < 0 && rpnr < 0)
return lnr == rnr;
- if (!rpartnr)
- return lpartnr->value.val.ival == rnr;
- if (!lpartnr)
- return rpartnr->value.val.ival == lnr;
- return lpartnr->value.val.ival == rpartnr->value.val.ival;
+ if (rpnr < 0)
+ return lpnr == rnr;
+ if (lpnr < 0)
+ return rpnr == lnr;
+ return lpnr == rpnr;
}
static void
-mat_set_prop( MalBlkPtr mb, InstrPtr p)
+mat_set_prop(matlist_t *ml, MalBlkPtr mb, InstrPtr p)
{
int k, tpe = getArgType(mb, p, 0);
tpe = getColumnType(tpe);
for(k=1; k < p->argc; k++) {
- setPartnr(mb, -1, getArg(p,k), k);
+ setPartnr(ml, -1, getArg(p,k), k);
if (tpe == TYPE_oid)
- propagateMirror(mb, getArg(p,k), getArg(p,k));
+ propagateMirror(ml, getArg(p,k), getArg(p,k));
}
}
static InstrPtr
-mat_delta(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int o, int e,
int mvar, int nvar, int ovar, int evar)
+mat_delta(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n,
int o, int e, int mvar, int nvar, int ovar, int evar)
{
int tpe, k, j, is_subdelta = (getFunctionId(p) == subdeltaRef);
InstrPtr r = NULL;
@@ -236,7 +255,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
int nr = 1;
for(k=1; k < mat[e].mi->argc; k++) {
for(j=1; j < mat[m].mi->argc; j++) {
- if (overlap(mb, getArg(mat[e].mi, k),
getArg(mat[m].mi, j), k, j, 0)){
+ if (overlap(ml, getArg(mat[e].mi, k),
getArg(mat[m].mi, j), k, j, 0)){
InstrPtr q = copyInstruction(p);
/* remove last argument */
@@ -254,7 +273,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
getArg(q, ovar) = getArg(mat[o].mi, j);
getArg(q, evar) = getArg(mat[e].mi, k);
pushInstruction(mb, q);
- setPartnr(mb, getArg(mat[m].mi, j),
getArg(q,0), nr);
+ setPartnr(ml, getArg(mat[m].mi, j),
getArg(q,0), nr);
r = pushArgument(mb, r, getArg(q, 0));
nr++;
@@ -282,7 +301,7 @@ mat_delta(MalBlkPtr mb, InstrPtr p, mat_
if (e >= 0)
getArg(q, evar) = getArg(mat[e].mi, k);
pushInstruction(mb, q);
- setPartnr(mb, is_subdelta?getArg(mat[m].mi, k):-1,
getArg(q,0), k);
+ setPartnr(ml, is_subdelta?getArg(mat[m].mi, k):-1,
getArg(q,0), k);
r = pushArgument(mb, r, getArg(q, 0));
}
}
@@ -343,18 +362,18 @@ mat_apply1(MalBlkPtr mb, InstrPtr p, mat
ident_var = getArg(q, 1);
pushInstruction(mb, q);
if (is_mirror || is_identity) {
- propagateMirror(mb, getArg(mat[m].mi, k), getArg(q,0));
+ propagateMirror(ml, getArg(mat[m].mi, k), getArg(q,0));
} else if (is_select)
- propagatePartnr(mb, getArg(mat[m].mi, k), getArg(q,0),
k);
+ propagatePartnr(ml, getArg(mat[m].mi, k), getArg(q,0),
k);
else
- setPartnr(mb, -1, getArg(q,0), k);
+ setPartnr(ml, -1, getArg(q,0), k);
r = pushArgument(mb, r, getArg(q, 0));
}
return r;
}
static InstrPtr
-mat_apply2(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int mvar, int
nvar)
+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;
@@ -375,16 +394,16 @@ mat_apply2(MalBlkPtr mb, InstrPtr p, mat
getArg(q, nvar) = getArg(mat[n].mi, k);
pushInstruction(mb, q);
if (is_select)
- setPartnr(mb, getArg(q,2), getArg(q,0), k);
+ setPartnr(ml, getArg(q,2), getArg(q,0), k);
else
- setPartnr(mb, -1, getArg(q,0), k);
+ setPartnr(ml, -1, getArg(q,0), k);
r = pushArgument(mb, r, getArg(q, 0));
}
return r;
}
static InstrPtr
-mat_apply3(MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n, int o, int
mvar, int nvar, int ovar)
+mat_apply3(matlist_t *ml, MalBlkPtr mb, InstrPtr p, mat_t *mat, int m, int n,
int o, int mvar, int nvar, int ovar)
{
int tpe, k;
InstrPtr r = NULL;
@@ -405,7 +424,7 @@ mat_apply3(MalBlkPtr mb, InstrPtr p, mat
getArg(q, nvar) = getArg(mat[n].mi, k);
getArg(q, ovar) = getArg(mat[o].mi, k);
pushInstruction(mb, q);
- setPartnr(mb, -1, getArg(q,0), k);
+ setPartnr(ml, -1, getArg(q,0), k);
r = pushArgument(mb, r, getArg(q, 0));
}
return r;
@@ -436,7 +455,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
getArg(s,0) = newTmpVariable(mb, tpe);
for (j=1; j<mat[n].mi->argc; j++) {
- if (overlap(mb, getArg(mat[m].mi, k),
getArg(mat[n].mi, j), -1, -2, 1)){
+ if (overlap(ml, getArg(mat[m].mi, k),
getArg(mat[n].mi, j), -1, -2, 1)){
s =
pushArgument(mb,s,getArg(mat[n].mi,j));
}
}
@@ -445,7 +464,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
getArg(q,0) = newTmpVariable(mb, tpe);
getArg(q,1) = getArg(mat[m].mi,k);
getArg(q,2) = getArg(s,0);
- setPartnr(mb, getArg(mat[m].mi,k), getArg(q,0), nr);
+ setPartnr(ml, getArg(mat[m].mi,k), getArg(q,0), nr);
pushInstruction(mb,q);
r = pushArgument(mb,r,getArg(q,0));
@@ -460,7 +479,7 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
getArg(q,1) = getArg(mat[m].mi, k);
pushInstruction(mb,q);
- setPartnr(mb, getArg(q, 2), getArg(q,0), k);
+ setPartnr(ml, getArg(q, 2), getArg(q,0), k);
r = pushArgument(mb, r, getArg(q,0));
}
}
@@ -485,7 +504,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
int nr = 1;
for(k=1; k<mat[m].mi->argc; k++) {
for (j=1; j<mat[n].mi->argc; j++) {
- if (overlap(mb, getArg(mat[m].mi, k),
getArg(mat[n].mi, j), k, j, 0)){
+ if (overlap(ml, getArg(mat[m].mi, k),
getArg(mat[n].mi, j), k, j, 0)){
InstrPtr q = copyInstruction(p);
getArg(q,0) = newTmpVariable(mb, tpe);
@@ -493,7 +512,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
getArg(q,2) = getArg(mat[n].mi,j);
pushInstruction(mb,q);
- setPartnr(mb, getArg(mat[n].mi, j),
getArg(q,0), nr);
+ setPartnr(ml, getArg(mat[n].mi, j),
getArg(q,0), nr);
r = pushArgument(mb,r,getArg(q,0));
nr++;
@@ -510,7 +529,7 @@ mat_leftfetchjoin(MalBlkPtr mb, InstrPtr
getArg(q,1) = getArg(mat[m].mi, k);
pushInstruction(mb,q);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list