Changeset: 0191e39979ca for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0191e39979ca
Added Files:
        java/tests/BugDecimalRound_Bug_3561.java
        sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.bat
        sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.sh
        sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.stable.err
        sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.stable.out
Removed Files:
        monetdb5/mal/Tests/tst104.malC
        monetdb5/mal/Tests/tst104.stable.err
        monetdb5/mal/Tests/tst104.stable.out
        monetdb5/mal/Tests/tst105.malC
        monetdb5/mal/Tests/tst105.stable.err
        monetdb5/mal/Tests/tst105.stable.out
        monetdb5/mal/Tests/tst105a.malC
        monetdb5/mal/Tests/tst105a.stable.err
        monetdb5/mal/Tests/tst105a.stable.out
        monetdb5/mal/Tests/tst106.malC
        monetdb5/mal/Tests/tst106.stable.err
        monetdb5/mal/Tests/tst106.stable.out
        monetdb5/mal/Tests/tst150.malC
        monetdb5/mal/Tests/tst150.stable.err
        monetdb5/mal/Tests/tst150.stable.out
Modified Files:
        clients/R/Tests/survey.R
        clients/R/Tests/survey.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        gdk/gdk.h
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_join.c
        gdk/gdk_private.h
        gdk/gdk_search.c
        gdk/gdk_select.c
        gdk/gdk_system.c
        gdk/gdk_utils.c
        java/tests/Makefile.ag
        java/tests/build.xml
        monetdb5/mal/Tests/All
        monetdb5/mal/Tests/dynamicload.stable.err
        monetdb5/mal/Tests/tst102.malC
        monetdb5/mal/Tests/tst102.stable.err
        monetdb5/mal/Tests/tst115.malC
        monetdb5/mal/Tests/tst115.stable.err
        monetdb5/mal/mal.c
        monetdb5/mal/mal_parser.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_scenario.c
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_scenario.c
        sql/jdbc/tests/Tests/All
        sql/server/sql_mvc.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_utils.c
        sql/storage/bat/bat_utils.h
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check0.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
        sql/test/leaks/Tests/drop3.stable.out.int128
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select1.stable.out.int128
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/select2.stable.out.int128
        sql/test/leaks/Tests/temp1.stable.out
        sql/test/leaks/Tests/temp1.stable.out.int128
        sql/test/leaks/Tests/temp2.stable.out.int128
        sql/test/leaks/Tests/temp3.stable.out
        sql/test/leaks/Tests/temp3.stable.out.int128
        testing/Mtest.py.in
Branch: embedded
Log Message:

merge with default


diffs (truncated from 2768 to 300 lines):

diff --git a/clients/R/Tests/survey.R b/clients/R/Tests/survey.R
--- a/clients/R/Tests/survey.R
+++ b/clients/R/Tests/survey.R
@@ -69,3 +69,4 @@ cat("#~EndVariableOutput~#\n")
 
 
 print("SUCCESS")
+dbDisconnect(db)
diff --git a/clients/R/Tests/survey.stable.out 
b/clients/R/Tests/survey.stable.out
--- a/clients/R/Tests/survey.stable.out
+++ b/clients/R/Tests/survey.stable.out
@@ -172,6 +172,7 @@ 2     223 757 33.847     2
 [1] TRUE
 #~EndVariableOutput~#
 [1] "SUCCESS"
+[1] TRUE
 
 # 14:26:26 >  
 # 14:26:26 >  "Done."
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -48403,6 +48403,8 @@ pattern fits.listdir(dirname:str):void
 address FITSdir;
 comment Attach all FITS files in the directory
 
+pattern gadget.attachall(str:any...):void 
+address SQLsession;
 pattern generator.join(b:bat[:hge],gen:bat[:hge]) (l:bat[:oid],r:bat[:oid]) 
 address VLTgenerator_join;
 comment Overloaded join operation
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2459,6 +2459,7 @@ VALptr(const ValRecord *v)
 
 typedef struct threadStruct {
        int tid;                /* logical ID by MonetDB; val == index into 
this array + 1 (0 is invalid) */
+       int waitfor;            /* waitfor on exit */
        MT_Id pid;              /* physical thread id (pointer-sized) from the 
OS thread library */
        str name;
        ptr data[THREADDATA];
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -117,11 +117,15 @@ ALIGNsetH(BAT *b1, BAT *b2)
        b1->hrevsorted = BAThrevordered(b2);
        b1->halign = b2->halign;
        b1->batDirtydesc = TRUE;
-       b1->H->norevsorted = (BUN) (b2->H->norevsorted + diff);
-       b1->H->nokey[0] = (BUN) (b2->H->nokey[0] + diff);
-       b1->H->nokey[1] = (BUN) (b2->H->nokey[1] + diff);
-       b1->H->nosorted = (BUN) (b2->H->nosorted + diff);
-       b1->H->nodense = (BUN) (b2->H->nodense + diff);
+       b1->H->norevsorted = b2->H->norevsorted ? (BUN) (b2->H->norevsorted + 
diff) : 0;
+       if (b2->H->nokey[0] != b2->H->nokey[1]) {
+               b1->H->nokey[0] = (BUN) (b2->H->nokey[0] + diff);
+               b1->H->nokey[1] = (BUN) (b2->H->nokey[1] + diff);
+       } else {
+               b1->H->nokey[0] = b1->H->nokey[1] = 0;
+       }
+       b1->H->nosorted = b2->H->nosorted ? (BUN) (b2->H->nosorted + diff): 0;
+       b1->H->nodense = b2->H->nodense ? (BUN) (b2->H->nodense + diff) : 0;
 }
 
 /*
@@ -529,15 +533,37 @@ VIEWbounds(BAT *b, BAT *view, BUN l, BUN
                h = BATcount(b);
        if (h < l)
                h = l;
+       cnt = h - l;
        l += BUNfirst(b);
        view->batFirst = view->batDeleted = view->batInserted = 0;
-       cnt = h - l;
        view->H->heap.base = NULL;
        view->H->heap.size = 0;
        view->T->heap.base = view->ttype ? BUNtloc(bi, l) : NULL;
        view->T->heap.size = tailsize(view, cnt);
        BATsetcount(view, cnt);
        BATsetcapacity(view, cnt);
+       view->H->nosorted = view->H->norevsorted = view->H->nodense = 0;
+       view->H->nokey[0] = view->H->nokey[1] = 0;
+       if (view->T->nosorted > l && view->T->nosorted < l + cnt)
+               view->T->nosorted -= l;
+       else
+               view->T->nosorted = 0;
+       if (view->T->norevsorted > l && view->T->norevsorted < l + cnt)
+               view->T->norevsorted -= l;
+       else
+               view->T->norevsorted = 0;
+       if (view->T->nodense > l && view->T->nodense < l + cnt)
+               view->T->nodense -= l;
+       else
+               view->T->nodense = 0;
+       if (view->T->nokey[0] >= l && view->T->nokey[0] < l + cnt &&
+           view->T->nokey[1] >= l && view->T->nokey[1] < l + cnt &&
+           view->T->nokey[0] != view->T->nokey[1]) {
+               view->T->nokey[0] -= l;
+               view->T->nokey[1] -= l;
+       } else {
+               view->T->nokey[0] = view->T->nokey[1] = 0;
+       }
 }
 
 /*
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -484,6 +484,10 @@ BATclear(BAT *b, int force)
        BATseqbase(BATmirror(b), 0);
        b->batDirty = TRUE;
        BATsettrivprop(b);
+       b->H->nosorted = b->H->norevsorted = b->H->nodense = 0;
+       b->H->nokey[0] = b->H->nokey[1] = 0;
+       b->T->nosorted = b->T->norevsorted = b->T->nodense = 0;
+       b->T->nokey[0] = b->T->nokey[1] = 0;
        return GDK_SUCCEED;
 }
 
@@ -796,15 +800,38 @@ COLcopy(BAT *b, int tt, int writable, in
                ALIGNsetT(bn, b);
        } else if (ATOMstorage(tt) == ATOMstorage(b->ttype) &&
                   ATOMcompare(tt) == ATOMcompare(b->ttype)) {
+               BUN l = BUNfirst(b), h = BUNlast(b);
                bn->tsorted = b->tsorted;
                bn->trevsorted = b->trevsorted;
                bn->tdense = b->tdense && ATOMtype(bn->ttype) == TYPE_oid;
                if (b->tkey)
                        BATkey(BATmirror(bn), TRUE);
                bn->T->nonil = b->T->nonil;
+               if (b->T->nosorted > l && b->T->nosorted < h)
+                       bn->T->nosorted = b->T->nosorted - l + BUNfirst(bn);
+               else
+                       bn->T->nosorted = 0;
+               if (b->T->norevsorted > l && b->T->norevsorted < h)
+                       bn->T->norevsorted = b->T->norevsorted - l + 
BUNfirst(bn);
+               else
+                       bn->T->norevsorted = 0;
+               if (b->T->nodense > l && b->T->nodense < h)
+                       bn->T->nodense = b->T->nodense - l + BUNfirst(bn);
+               else
+                       bn->T->nodense = 0;
+               if (b->T->nokey[0] >= l && b->T->nokey[0] < h &&
+                   b->T->nokey[1] >= l && b->T->nokey[1] < h &&
+                   b->T->nokey[0] != b->T->nokey[1]) {
+                       bn->T->nokey[0] = b->T->nokey[0] - l + BUNfirst(bn);
+                       bn->T->nokey[1] = b->T->nokey[1] - l + BUNfirst(bn);
+               } else {
+                       bn->T->nokey[0] = bn->T->nokey[1] = 0;
+               }
        } else {
                bn->tsorted = bn->trevsorted = 0; /* set based on count later */
                bn->tdense = bn->T->nonil = 0;
+               bn->T->nosorted = bn->T->norevsorted = bn->T->nodense = 0;
+               bn->T->nokey[0] = bn->T->nokey[1] = 0;
        }
        if (BATcount(bn) <= 1) {
                bn->hsorted = ATOMlinear(b->htype);
@@ -879,7 +906,10 @@ setcolprops(BAT *b, COLrec *col, const v
        if (b->batCount == 0) {
                /* first value */
                col->sorted = col->revsorted = ATOMlinear(col->type) != 0;
+               col->nosorted = col->norevsorted = 0;
                col->key |= 1;
+               col->nokey[0] = col->nokey[1] = 0;
+               col->nodense = 0;
                if (col->type == TYPE_void) {
                        if (x) {
                                col->seq = * (const oid *) x;
@@ -892,18 +922,27 @@ setcolprops(BAT *b, COLrec *col, const v
                        if (col->type == TYPE_oid) {
                                col->dense = !isnil;
                                col->seq = * (const oid *) x;
+                               if (isnil)
+                                       col->nodense = BUNlast(b);
                        }
                }
        } else if (col->type == TYPE_void) {
                /* not the first value in a VOID column: we keep the
-                * seqbase and x is not used, so only some properties
+                * seqbase, and x is not used, so only some properties
                 * are affected */
                if (col->seq != oid_nil) {
-                       col->revsorted = 0;
+                       if (col->revsorted) {
+                               col->norevsorted = BUNlast(b);
+                               col->revsorted = 0;
+                       }
                        col->nil = 0;
                        col->nonil = 1;
                } else {
-                       col->key = 0;
+                       if (col->key) {
+                               col->nokey[0] = BUNfirst(b);
+                               col->nokey[1] = BUNlast(b);
+                               col->key = 0;
+                       }
                        col->nil = 1;
                        col->nonil = 0;
                }
@@ -920,8 +959,10 @@ setcolprops(BAT *b, COLrec *col, const v
                       (col->revsorted && cmp < 0) ||
                       (!col->sorted && !col->revsorted))))) {
                        col->key = 0;
-                       col->nokey[0] = pos - 1;
-                       col->nokey[1] = pos;
+                       if (cmp == 0) {
+                               col->nokey[0] = pos - 1;
+                               col->nokey[1] = pos;
+                       }
                }
                if (col->sorted && cmp > 0) {
                        /* out of order */
@@ -1334,6 +1375,29 @@ BATsetcount(BAT *b, BUN cnt)
        if (cnt <= 1) {
                b->hsorted = b->hrevsorted = ATOMlinear(b->htype) != 0;
                b->tsorted = b->trevsorted = ATOMlinear(b->ttype) != 0;
+               b->H->nosorted = b->H->norevsorted = 0;
+               b->T->nosorted = b->T->norevsorted = 0;
+       }
+       /* if the BAT was made smaller, we need to zap some values */
+       if (b->H->nosorted >= BUNlast(b))
+               b->H->nosorted = 0;
+       if (b->H->norevsorted >= BUNlast(b))
+               b->H->norevsorted = 0;
+       if (b->H->nodense >= BUNlast(b))
+               b->H->nodense = 0;
+       if (b->H->nokey[0] >= BUNlast(b) || b->H->nokey[1] >= BUNlast(b)) {
+               b->H->nokey[0] = 0;
+               b->H->nokey[1] = 0;
+       }
+       if (b->T->nosorted >= BUNlast(b))
+               b->T->nosorted = 0;
+       if (b->T->norevsorted >= BUNlast(b))
+               b->T->norevsorted = 0;
+       if (b->T->nodense >= BUNlast(b))
+               b->T->nodense = 0;
+       if (b->T->nokey[0] >= BUNlast(b) || b->T->nokey[1] >= BUNlast(b)) {
+               b->T->nokey[0] = 0;
+               b->T->nokey[1] = 0;
        }
        if (b->htype == TYPE_void) {
                b->hsorted = 1;
@@ -1453,8 +1517,10 @@ BATseqbase(BAT *b, oid o)
                                b->halign = 0;
                }
                b->hseqbase = o;
-               if (b->htype == TYPE_oid && o == oid_nil)
+               if (b->htype == TYPE_oid && o == oid_nil) {
                        b->hdense = 0;
+                       b->H->nodense = BUNfirst(b);
+               }
 
                /* adapt keyness */
                if (BAThvoid(b)) {
@@ -1463,6 +1529,13 @@ BATseqbase(BAT *b, oid o)
                                b->H->nonil = b->batCount == 0;
                                b->H->nil = b->batCount > 0;
                                b->hsorted = b->hrevsorted = 1;
+                               b->H->nosorted = b->H->norevsorted = 0;
+                               if (!b->hkey) {
+                                       b->H->nokey[0] = BUNfirst(b);
+                                       b->H->nokey[1] = BUNfirst(b) + 1;
+                               } else {
+                                       b->H->nokey[0] = b->H->nokey[1] = 0;
+                               }
                        } else {
                                if (!b->hkey) {
                                        b->hkey = TRUE;
@@ -1472,6 +1545,8 @@ BATseqbase(BAT *b, oid o)
                                b->H->nil = 0;
                                b->hsorted = 1;
                                b->hrevsorted = b->batCount <= 1;
+                               if (!b->hrevsorted)
+                                       b->H->norevsorted = BUNfirst(b) + 1;
                        }
                }
        }
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -478,7 +478,7 @@ BATappend(BAT *b, BAT *n, bit force)
                        int xx = ATOMcmp(b->ttype, BUNtail(ni, BUNfirst(n)), 
BUNtail(bi, last));
                        if (BATtordered(b) && (!BATtordered(n) || xx < 0)) {
                                b->tsorted = FALSE;
-                               b->T->nosorted = r;
+                               b->T->nosorted = 0;
                                if (b->tdense) {
                                        b->tdense = FALSE;
                                        b->T->nodense = r;
@@ -487,7 +487,7 @@ BATappend(BAT *b, BAT *n, bit force)
                        if (BATtrevordered(b) &&
                            (!BATtrevordered(n) || xx > 0)) {
                                b->trevsorted = FALSE;
-                               b->T->norevsorted = r;
+                               b->T->norevsorted = 0;
                        }
                        if (b->tkey &&
                            (!(BATtordered(b) || BATtrevordered(b)) ||
@@ -744,25 +744,15 @@ BATslice(BAT *b, BUN l, BUN h)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to