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

Reply via email to