Changeset: 3af9813c28c6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3af9813c28c6 Modified Files: gdk/gdk_group.c monetdb5/optimizer/opt_pushselect.c sql/test/testdb-upgrade-chain/Tests/package.py sql/test/testdb/Tests/testdb-package.py Branch: default Log Message:
merged with Oct2014 diffs (110 lines): diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c --- a/gdk/gdk_group.c +++ b/gdk/gdk_group.c @@ -81,7 +81,7 @@ } \ } \ if (extents) \ - exts[ngrp] = b->hseqbase + (oid) (p - r); \ + exts[ngrp] = hseqb + (oid) (p - r); \ if (histo) \ cnts[ngrp] = 1; \ ngrps[p - r] = ngrp; \ @@ -369,7 +369,7 @@ BATgroup_internal(BAT **groups, BAT **ex int t; int (*cmp)(const void *, const void *); const oid *grps = NULL; - oid *restrict ngrps, ngrp, prev = 0; + oid *restrict ngrps, ngrp, prev = 0, hseqb = 0; oid *restrict exts = NULL; wrd *restrict cnts = NULL; BUN p, q, r; @@ -402,6 +402,7 @@ BATgroup_internal(BAT **groups, BAT **ex /* we want our output to go somewhere */ assert(groups != NULL); + hseqb = b->hseqbase; if (b->tkey || BATcount(b) <= 1 || (g && (g->tkey || BATtdense(g)))) { /* grouping is trivial: 1 element per group */ ALGODEBUG fprintf(stderr, "#BATgroup(b=%s#" BUNFMT "," @@ -784,6 +785,7 @@ BATgroup_internal(BAT **groups, BAT **ex BAT *b2 = BBPdescriptor(-parent); lo = (BUN) ((b->T->heap.base - b2->T->heap.base) >> b->T->shift) + BUNfirst(b); hi = lo + BATcount(b); + hseqb = b->hseqbase; b = b2; bi = bat_iterator(b); } else { diff --git a/monetdb5/optimizer/opt_pushselect.c b/monetdb5/optimizer/opt_pushselect.c --- a/monetdb5/optimizer/opt_pushselect.c +++ b/monetdb5/optimizer/opt_pushselect.c @@ -114,6 +114,20 @@ lastbat_arg(MalBlkPtr mb, InstrPtr p) return 0; } +/* check for updates inbetween assignment to variables newv and oldv */ +static int +no_updates(InstrPtr *old, int *vars, int oldv, int newv) +{ + while(newv > oldv) { + InstrPtr q = old[vars[newv]]; + + if (isUpdateInstruction(q)) + return 0; + newv = getArg(q, 1); + } + return 1; +} + int OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -170,9 +184,10 @@ OPTpushselectImplementation(Client cntxt InstrPtr q = old[vars[subselects.tid[s]]]; int Qsname = getArg(q, 2), Qtname = getArg(q, 3); - if ((sname == Qsname && tname == Qtname) || + if (no_updates(old, vars, getArg(q,1), getArg(p,1)) && + ((sname == Qsname && tname == Qtname) || (0 && strcmp(getVarConstant(mb, sname).val.sval, getVarConstant(mb, Qsname).val.sval) == 0 && - strcmp(getVarConstant(mb, tname).val.sval, getVarConstant(mb, Qtname).val.sval) == 0)) { + strcmp(getVarConstant(mb, tname).val.sval, getVarConstant(mb, Qtname).val.sval) == 0))) { clrFunction(p); p->retc = 1; p->argc = 2; diff --git a/sql/test/testdb-upgrade-chain/Tests/package.py b/sql/test/testdb-upgrade-chain/Tests/package.py --- a/sql/test/testdb-upgrade-chain/Tests/package.py +++ b/sql/test/testdb-upgrade-chain/Tests/package.py @@ -9,7 +9,13 @@ if not os.path.exists(db): print >> sys.stderr, 'database directory %s does not exist' % db sys.exit(1) -f = open(os.path.join(db, 'bat', 'BACKUP', 'BBP.dir'), 'rU') +try: + f = open(os.path.join(db, 'bat', 'BACKUP', 'SUBCOMMIT', 'BBP.dir'), 'rU') +except IOError: + try: + f = open(os.path.join(db, 'bat', 'BACKUP', 'BBP.dir'), 'rU') + except IOError: + f = open(os.path.join(db, 'bat', 'BBP.dir'), 'rU') hdr = f.readline() ptroid = f.readline() ptr, oid = ptroid.split() diff --git a/sql/test/testdb/Tests/testdb-package.py b/sql/test/testdb/Tests/testdb-package.py --- a/sql/test/testdb/Tests/testdb-package.py +++ b/sql/test/testdb/Tests/testdb-package.py @@ -8,7 +8,13 @@ if not os.path.exists(db): print >> sys.stderr, 'database directory %s does not exist' % db sys.exit(1) -f = open(os.path.join(db, 'bat', 'BACKUP', 'BBP.dir'), 'rU') +try: + f = open(os.path.join(db, 'bat', 'BACKUP', 'SUBCOMMIT', 'BBP.dir'), 'rU') +except IOError: + try: + f = open(os.path.join(db, 'bat', 'BACKUP', 'BBP.dir'), 'rU') + except IOError: + f = open(os.path.join(db, 'bat', 'BBP.dir'), 'rU') hdr = f.readline() ptroid = f.readline() ptr, oid = ptroid.split() _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list