Changeset: de84b81989c2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/de84b81989c2
Modified Files:
        gdk/gdk.h
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_upgrades.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimize_proj.c
        sql/server/rel_rel.c
        sql/storage/bat/bat_storage.c
        sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.test
        sql/test/miscellaneous/Tests/groupby_error.test
        sql/test/miscellaneous/Tests/groupby_expressions.test
        sql/test/miscellaneous/Tests/simple_selects.test
Branch: properties
Log Message:
Merged with default


diffs (truncated from 5865 to 300 lines):

diff --git a/.hgtags b/.hgtags
--- a/.hgtags
+++ b/.hgtags
@@ -762,3 +762,4 @@ cab90a348501b045e19cee5cebcc44f3800bd0a8
 cab90a348501b045e19cee5cebcc44f3800bd0a8 Jul2021_SP5_release
 5872f047d97c98d3a848514438b8f97fa446855d Jan2022_11
 025239a5a6f122042798c0f1132a2c6298514e06 Jan2022_13
+025239a5a6f122042798c0f1132a2c6298514e06 Jan2022_SP2_release
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
@@ -775,7 +775,6 @@ void MSresetInstructions(MalBlkPtr mb, i
 void MSresetStack(Client cntxt, MalBlkPtr mb, MalStkPtr glb);
 void MSresetVariables(MalBlkPtr mb);
 void MSscheduleClient(str command, str challenge, bstream *fin, stream *fout, 
protocol_version protocol, size_t blocksize);
-str MSserveClient(Client cntxt);
 str OIDXcreateImplementation(Client cntxt, int tpe, BAT *b, int pieces);
 str OIDXdropImplementation(Client cntxt, BAT *b);
 str QLOGcalls(BAT **r);
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -246,19 +246,33 @@ macro(monetdb_configure_sizes)
   check_type_size(socklen_t HAVE_SOCKLEN_T LANGUAGE C)
   cmake_pop_check_state()
 
+  cmake_push_check_state()
+  check_type_size(__int128 SIZEOF___INT128 LANGUAGE C)
+  check_type_size(__int128_t SIZEOF___INT128_T LANGUAGE C)
+  check_type_size(__uint128_t SIZEOF___UINT128_T LANGUAGE C)
   if(INT128)
-    cmake_push_check_state()
-    check_type_size(__int128 SIZEOF___INT128 LANGUAGE C)
-    check_type_size(__int128_t SIZEOF___INT128_T LANGUAGE C)
-    check_type_size(__uint128_t SIZEOF___UINT128_T LANGUAGE C)
-    if(HAVE_SIZEOF___INT128 OR HAVE_SIZEOF___INT128_T OR 
HAVE_SIZEOF___UINT128_T)
+    if(HAVE_SIZEOF___INT128)
       set(HAVE_HGE TRUE)
       message(STATUS "Huge integers are available")
     else()
-      message(STATUS "128-bit integers not supported by this compiler")
+      if(HAVE_SIZEOF___INT128_T AND HAVE_SIZEOF___UINT128_T)
+        set(HAVE_HGE TRUE)
+        message(STATUS "Huge integers are available")
+      else()
+        message(STATUS "128-bit integers not supported by this compiler")
+      endif()
     endif()
-    cmake_pop_check_state()
+  endif()
+  if(HAVE_SIZEOF___INT128)
+    set(HAVE___INT128 TRUE)
   endif()
+  if(HAVE_SIZEOF___INT128_T)
+    set(HAVE___INT128_T TRUE)
+  endif()
+  if(HAVE_SIZEOF___UINT128_T)
+    set(HAVE___UINT128_T TRUE)
+  endif()
+  cmake_pop_check_state()
 
   if(ODBC_FOUND)
     cmake_push_check_state()
diff --git a/common/stream/stream.h b/common/stream/stream.h
--- a/common/stream/stream.h
+++ b/common/stream/stream.h
@@ -39,17 +39,6 @@
 #else
 # define stream_export extern
 #endif
-#ifndef HAVE_HGE
-# ifdef HAVE___INT128
-#  define HAVE_HGE 1
-typedef __int128 hge;
-# else
-#  ifdef HAVE___INT128_T
-#   define HAVE_HGE 1
-typedef __int128_t hge;
-#  endif
-# endif
-#endif
 
 /* Defines to help the compiler check printf-style format arguments.
  * These defines are also in our config.h, but we repeat them here so
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -778,6 +778,7 @@ typedef enum {
  * tsorted, trevsorted, twidth, tshift, tnonil, tnil, tnokey, tnosorted,
  * tnorevsorted, tminpos, tmaxpos, and tunique_est; in addition, the
  * value should be set if the BBP field BBP_logical(bid) is changed.
+ * This corresponds with any field that gets saved in the BBP.dir file.
  *
  * theaplock: this lock should be held when reading or writing any of
  * the fields mentioned above for batDirtydesc, and also when reading or
@@ -797,8 +798,9 @@ typedef struct BAT {
        bool
         batTransient:1,        /* should the BAT persist on disk? */
         batCopiedtodisk:1,     /* once written */
-        batDirtyflushed:1,     /* was dirty before commit started? */
         batDirtydesc:1;        /* bat descriptor dirty marker */
+       /* not part of bitfields since not in BATiter */
+       bool batDirtyflushed;   /* was dirty before commit started? */
        uint16_t selcnt;        /* how often used in equi select without hash */
        uint16_t unused;        /* value=0 for now (sneakily used by mat.c) */
        int batSharecnt;        /* incoming view count */
@@ -962,6 +964,8 @@ typedef struct BATiter {
        int8_t type;
        oid tseq;
        BUN hfree, vhfree;
+       BUN nokey[2];
+       BUN nosorted, norevsorted;
        BUN minpos, maxpos;
        double unique_est;
        bool key:1,
@@ -1008,6 +1012,10 @@ bat_iterator_nolock(BAT *b)
                                  (size_t) b->batCount << b->tshift :
                                 0,
                        .vhfree = b->tvheap ? b->tvheap->free : 0,
+                       .nokey[0] = b->tnokey[0],
+                       .nokey[1] = b->tnokey[1],
+                       .nosorted = b->tnosorted,
+                       .norevsorted = b->tnorevsorted,
                        .minpos = isview ? BUN_NONE : b->tminpos,
                        .maxpos = isview ? BUN_NONE : b->tmaxpos,
                        .unique_est = b->tunique_est,
@@ -1297,17 +1305,15 @@ gdk_export BAT *BATsetaccess(BAT *b, res
 gdk_export restrict_t BATgetaccess(BAT *b);
 
 
-#define BATdirty(b)    (!(b)->batCopiedtodisk ||                       \
-                        (b)->batDirtydesc ||                           \
+#define BATdirtydata(b)        (!(b)->batCopiedtodisk ||                       
\
                         (b)->theap->dirty ||                           \
                         ((b)->tvheap != NULL && (b)->tvheap->dirty))
+#define BATdirty(b)    (BATdirtydata(b) ||     \
+                        (b)->batDirtydesc)
 #define BATdirtybi(bi) (!(bi).copiedtodisk ||  \
                         (bi).dirtydesc ||      \
                         (bi).hdirty ||         \
                         (bi).vhdirty)
-#define BATdirtydata(b)        (!(b)->batCopiedtodisk ||                       
\
-                        (b)->theap->dirty ||                           \
-                        ((b)->tvheap != NULL && (b)->tvheap->dirty))
 
 #define BATcapacity(b) (b)->batCapacity
 /*
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -1976,7 +1976,7 @@ BATgroupavg(BAT **bnp, BAT **cntsp, BAT 
                dbl fac = pow(10.0, (double) scale);
                for (i = 0; i < ngrp; i++) {
                        if (!is_dbl_nil(dbls[i]))
-                               dbls[i] *= fac;
+                               dbls[i] /= fac;
                }
        }
        BATsetcount(bn, ngrp);
@@ -3048,7 +3048,7 @@ BATcalcavg(BAT *b, BAT *s, dbl *avg, BUN
        }
        bat_iterator_end(&bi);
        if (scale != 0 && !is_dbl_nil(*avg))
-               *avg *= pow(10.0, (double) scale);
+               *avg /= pow(10.0, (double) scale);
        if (vals)
                *vals = (BUN) n;
        return GDK_SUCCEED;
@@ -3816,13 +3816,15 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                        if (bi.count == BATcount(b) && bi.h == b->theap)
                                b->tminpos = bi.minpos;
                        bat pbid = VIEWtparent(b);
+                       MT_lock_unset(&b->theaplock);
                        if (pbid) {
                                BAT *pb = BBP_cache(pbid);
+                               MT_lock_set(&pb->theaplock);
                                if (bi.count == BATcount(pb) &&
                                    bi.h == pb->theap)
                                        pb->tminpos = bi.minpos;
+                               MT_lock_unset(&pb->theaplock);
                        }
-                       MT_lock_unset(&b->theaplock);
                }
        }
        if (aggr == NULL) {
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -263,7 +263,6 @@ BATmaterialize(BAT *b, BUN cap)
        b->tunique_est = is_oid_nil(t) ? 1.0 : (double) b->batCount;
        b->ttype = TYPE_oid;
        BATsetdims(b, 0);
-       b->batDirtydesc = true;
        BATsetcount(b, b->batCount);
        BATsetcapacity(b, cap);
        MT_lock_unset(&b->theaplock);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -641,8 +641,7 @@ BATclear(BAT *b, bool force)
                }
        }
 
-       if (force)
-               b->batInserted = 0;
+       b->batInserted = 0;
        b->batCount = 0;
        if (b->ttype == TYPE_void)
                b->batCapacity = 0;
@@ -941,14 +940,14 @@ COLcopy(BAT *b, int tt, bool writable, r
                bn->tsorted = bi.sorted;
                bn->trevsorted = bi.revsorted;
                bn->batDirtydesc = true;
-               bn->tnorevsorted = b->tnorevsorted;
-               if (b->tnokey[0] != b->tnokey[1]) {
-                       bn->tnokey[0] = b->tnokey[0];
-                       bn->tnokey[1] = b->tnokey[1];
+               bn->tnorevsorted = bi.norevsorted;
+               if (bi.nokey[0] != bi.nokey[1]) {
+                       bn->tnokey[0] = bi.nokey[0];
+                       bn->tnokey[1] = bi.nokey[1];
                } else {
                        bn->tnokey[0] = bn->tnokey[1] = 0;
                }
-               bn->tnosorted = b->tnosorted;
+               bn->tnosorted = bi.nosorted;
                bn->tnonil = bi.nonil;
                bn->tnil = bi.nil;
                bn->tminpos = bi.minpos;
@@ -963,19 +962,19 @@ COLcopy(BAT *b, int tt, bool writable, r
                        BATkey(bn, true);
                bn->tnonil = bi.nonil;
                bn->tnil = bi.nil;
-               if (b->tnosorted > 0 && b->tnosorted < h)
-                       bn->tnosorted = b->tnosorted;
+               if (bi.nosorted > 0 && bi.nosorted < h)
+                       bn->tnosorted = bi.nosorted;
                else
                        bn->tnosorted = 0;
-               if (b->tnorevsorted > 0 && b->tnorevsorted < h)
-                       bn->tnorevsorted = b->tnorevsorted;
+               if (bi.norevsorted > 0 && bi.norevsorted < h)
+                       bn->tnorevsorted = bi.norevsorted;
                else
                        bn->tnorevsorted = 0;
-               if (b->tnokey[0] < h &&
-                   b->tnokey[1] < h &&
-                   b->tnokey[0] != b->tnokey[1]) {
-                       bn->tnokey[0] = b->tnokey[0];
-                       bn->tnokey[1] = b->tnokey[1];
+               if (bi.nokey[0] < h &&
+                   bi.nokey[1] < h &&
+                   bi.nokey[0] != bi.nokey[1]) {
+                       bn->tnokey[0] = bi.nokey[0];
+                       bn->tnokey[1] = bi.nokey[1];
                } else {
                        bn->tnokey[0] = bn->tnokey[1] = 0;
                }
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -90,7 +90,6 @@ insert_string_bat(BAT *b, BATiter *ni, s
                HEAPdecref(b->tvheap, b->tvheap->parentid == b->batCacheid);
                HEAPincref(ni->vh);
                b->tvheap = ni->vh;
-               b->batDirtydesc = true;
                MT_lock_unset(&b->theaplock);
                BBPshare(ni->vh->parentid);
                toff = 0;
@@ -359,7 +358,6 @@ append_varsized_bat(BAT *b, BATiter *ni,
                HEAPdecref(b->tvheap, true);
                HEAPincref(ni->vh);
                b->tvheap = ni->vh;
-               b->batDirtydesc = true;
                MT_lock_unset(&b->theaplock);
        }
        if (b->tvheap == ni->vh) {
@@ -434,12 +432,12 @@ append_varsized_bat(BAT *b, BATiter *ni,
                b->tnil = ni->nil;
                b->tnonil = ni->nonil;
                b->tsorted = ni->sorted;
-               b->tnosorted = ni->b->tnosorted;
+               b->tnosorted = ni->nosorted;
                b->trevsorted = ni->revsorted;
-               b->tnorevsorted = ni->b->tnorevsorted;
+               b->tnorevsorted = ni->norevsorted;
                b->tkey = ni->key;
-               b->tnokey[0] = ni->b->tnokey[0];
-               b->tnokey[1] = ni->b->tnokey[1];
+               b->tnokey[0] = ni->nokey[0];
+               b->tnokey[1] = ni->nokey[1];
                b->tminpos = ni->minpos;
                b->tmaxpos = ni->maxpos;
                b->tunique_est = ni->unique_est;
@@ -774,8 +772,8 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool 
                b->tnonil = ni.nonil;
                b->tnil = ni.nil && ci.ncand == BATcount(n);
                if (ci.tpe == cand_dense) {
-                       b->tnosorted = ci.seq - hseq <= n->tnosorted && 
n->tnosorted < ci.seq + ci.ncand - hseq ? n->tnosorted + hseq - ci.seq : 0;
-                       b->tnorevsorted = ci.seq - hseq <= n->tnorevsorted && 
n->tnorevsorted < ci.seq + ci.ncand - hseq ? n->tnorevsorted + hseq - ci.seq : 
0;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to