Changeset: e8662d079f93 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e8662d079f93
Added Files:
        sql/test/BugTracker-2020/Tests/select-and.Bug-6878.sql
        sql/test/BugTracker-2020/Tests/select-and.Bug-6878.stable.err
        sql/test/BugTracker-2020/Tests/select-and.Bug-6878.stable.out
        sql/test/Tests/like_tests.sql
Removed Files:
        sql/test/Tests/like_tests.SQL.py
        sql/test/like_tests.sql
Modified Files:
        MonetDB.spec
        NT/mksqlwxs.py
        cmake/monetdb-defines.cmake
        cmake/monetdb-options.cmake
        ctest/tools/embedded/CMakeLists.txt
        debian/libmonetdb-dev.install
        gdk/ChangeLog.Jun2020
        gdk/gdk_hash.c
        gdk/gdk_logger.c
        gdk/gdk_select.c
        monetdb5/mal/mal_debugger.c
        monetdb5/modules/mal/pcre.c
        sql/backends/monet5/sql_execute.c
        sql/test/BugTracker-2020/Tests/All
        sql/test/Tests/hot_snapshot.py
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64
        sql/test/miscellaneous/Tests/simple_selects.sql
        sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: unlock
Log Message:

Merge with default branch.


diffs (truncated from 672 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -201,6 +201,7 @@ functionality of MonetDB.
 %dir %{_includedir}/monetdb
 %{_includedir}/monetdb/gdk*.h
 %{_includedir}/monetdb/matomic.h
+%{_includedir}/monetdb/mstring.h
 %{_includedir}/monetdb/monet*.h
 %{_libdir}/libbat.so
 %{_libdir}/pkgconfig/monetdb-gdk.pc
diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py
--- a/NT/mksqlwxs.py
+++ b/NT/mksqlwxs.py
@@ -158,6 +158,7 @@ def main():
               sorted([r'include\monetdb\{}'.format(x) for x in filter(lambda 
x: (x.startswith('gdk') or x.startswith('monet') or x.startswith('mal')) and 
x.endswith('.h'), os.listdir(os.path.join(sys.argv[3], 'include', 'monetdb')))] 
+
                      [r'include\monetdb\mapi.h',
                       r'include\monetdb\matomic.h',
+                      r'include\monetdb\mstring.h',
                       r'include\monetdb\stream.h',
                       r'include\monetdb\stream_socket.h']),
               vital = 'no')
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -113,13 +113,8 @@ function(monetdb_configure_defines)
   check_function_exists("uname" HAVE_UNAME)
   # Some libc versions on Linux distributions don't have it
   check_symbol_exists("semtimedop" "sys/types.h;sys/ipc.h;sys/sem.h" 
HAVE_SEMTIMEDOP)
-  cmake_push_check_state()
-    if (NOT APPLE)
-      set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};pthread")
-    endif()
-    check_symbol_exists("pthread_kill" "pthread.h;signal.h" HAVE_PTHREAD_KILL)
-    check_symbol_exists("pthread_sigmask" "pthread.h;signal.h" 
HAVE_PTHREAD_SIGMASK)
-  cmake_pop_check_state()
+  check_function_exists("pthread_kill" HAVE_PTHREAD_KILL)
+  check_function_exists("pthread_sigmask" HAVE_PTHREAD_SIGMASK)
   check_symbol_exists("regcomp" "regex.h" HAVE_POSIX_REGEX)
 endfunction()
 
diff --git a/cmake/monetdb-options.cmake b/cmake/monetdb-options.cmake
--- a/cmake/monetdb-options.cmake
+++ b/cmake/monetdb-options.cmake
@@ -74,13 +74,13 @@ option(SANITIZER
   OFF)
 
 cmake_dependent_option(STRICT 
-  "Enable strict compiler flags (default=ON for development sources, OFF for 
tarball instalation)"
+  "Enable strict compiler flags (default=ON for development sources, OFF for 
tarball installation)"
   ON
   "DEVELOPMENT"
   OFF)
 
 cmake_dependent_option(ASSERT 
-  "Enable asserts (default=ON for development sources, OFF for tarball 
instalation)"
+  "Enable asserts (default=ON for development sources, OFF for tarball 
installation)"
   ON
   "DEVELOPMENT"
   OFF)
diff --git a/ctest/tools/embedded/CMakeLists.txt 
b/ctest/tools/embedded/CMakeLists.txt
--- a/ctest/tools/embedded/CMakeLists.txt
+++ b/ctest/tools/embedded/CMakeLists.txt
@@ -10,72 +10,42 @@ add_executable(example1 example1.c)
 target_link_libraries(example1
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example1 example1)
 
 add_executable(example2 example2.c)
 target_link_libraries(example2
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example2 example2)
 
 add_executable(example_temporal example_temporal.c)
 target_link_libraries(example_temporal
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example_temporal example_temporal)
 
 add_executable(example_decimals example_decimals.c)
 target_link_libraries(example_decimals
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example_decimals example_decimals)
 
 add_executable(example_blob example_blob.c)
 target_link_libraries(example_blob
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example_blob example_blob)
 
 add_executable(example_append example_append.c)
 target_link_libraries(example_append
   PRIVATE
     monetdb_config_header
-    embedded
-    sqlinclude
-    gdk
-    mapi
-    #sql
-    )
+    embedded)
 add_test(run_example_append example_append)
 
 add_executable(backup backup.c mapi.h mapi.c 
../../../clients/mapiclient/dump.c)
@@ -84,6 +54,6 @@ target_link_libraries(backup
   PRIVATE
     monetdb_config_header
     embedded
-    sqlinclude
-    gdk)
+    stream
+    matomic)
 add_test(run_backup backup)
diff --git a/debian/libmonetdb-dev.install b/debian/libmonetdb-dev.install
--- a/debian/libmonetdb-dev.install
+++ b/debian/libmonetdb-dev.install
@@ -1,5 +1,6 @@
 debian/tmp/usr/lib/x86_64-linux-gnu/libbat.so usr/lib/x86_64-linux-gnu
 debian/tmp/usr/include/monetdb/gdk*.h usr/include/monetdb
 debian/tmp/usr/include/monetdb/matomic.h usr/include/monetdb
+debian/tmp/usr/include/monetdb/mstring.h usr/include/monetdb
 debian/tmp/usr/include/monetdb/monet*.h usr/include/monetdb
 debian/tmp/usr/lib/x86_64-linux-gnu/pkgconfig/monetdb-gdk.pc 
usr/lib/x86_64-linux-gnu/pkgconfig
diff --git a/gdk/ChangeLog.Jun2020 b/gdk/ChangeLog.Jun2020
--- a/gdk/ChangeLog.Jun2020
+++ b/gdk/ChangeLog.Jun2020
@@ -1,3 +1,8 @@
 # ChangeLog file for GDK
 # This file is updated with Maddlog
 
+* Tue Jun  9 2020 Sjoerd Mullender <sjo...@acm.org>
+- Hash buckets come in variable widths.  But if a BAT grows long enough so
+  that the BAT indexes that are stored in the buckets don't fit anymore,
+  the buckets need to be widened.  This is now fixed.
+
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -35,7 +35,7 @@
 #include "gdk.h"
 #include "gdk_private.h"
 
-static int
+static uint8_t
 HASHwidth(BUN hashsize)
 {
        if (hashsize <= (BUN) BUN2_NONE)
@@ -1007,51 +1007,61 @@ HASHprobe(const Hash *h, const void *v)
        }
 }
 
-void
-HASHins(BAT *b, BUN i, const void *v)
+static void
+HASHins_locked(BAT *b, BUN i, const void *v)
 {
-       MT_lock_set(&b->batIdxLock);
        Hash *h = b->thash;
        if (h == NULL) {
-               /* nothing to do */
-       } else if (h == (Hash *) 1) {
-               GDKunlink(BBPselectfarm(b->batRole, b->ttype, hashheap),
-                         BATDIR,
-                         BBP_physical(b->batCacheid),
-                         "thash");
+               return;
+       }
+       if (h == (Hash *) 1) {
                b->thash = NULL;
-       } else if ((ATOMsize(b->ttype) > 2 &&
-                   HASHgrowbucket(b) != GDK_SUCCEED) ||
-                  ((i + 1) * h->width > h->heaplink.size &&
-                   HEAPextend(&h->heaplink,
-                              i * h->width + GDK_mmap_pagesize,
-                              true) != GDK_SUCCEED)) {
+               doHASHdestroy(b, h);
+               return;
+       }
+       if (HASHwidth(i + 1) > h->width &&
+            HASHupgradehashheap(b) != GDK_SUCCEED) {
+               return;
+       }
+       if ((ATOMsize(b->ttype) > 2 &&
+            HASHgrowbucket(b) != GDK_SUCCEED) ||
+           ((i + 1) * h->width > h->heaplink.size &&
+            HEAPextend(&h->heaplink,
+                       i * h->width + GDK_mmap_pagesize,
+                       true) != GDK_SUCCEED)) {
                b->thash = NULL;
                HEAPfree(&h->heapbckt, true);
                HEAPfree(&h->heaplink, true);
                GDKfree(h);
-       } else {
-               h->Link = h->heaplink.base;
-               BUN c = HASHprobe(h, v);
-               h->heaplink.free += h->width;
-               BUN hb = HASHget(h, c);
-               BUN hb2;
-               BATiter bi = bat_iterator(b);
-               for (hb2 = hb;
-                    hb2 != HASHnil(h);
-                    hb2 = HASHgetlink(h, hb2)) {
-                       if (ATOMcmp(h->type,
-                                   v,
-                                   BUNtail(bi, hb2)) == 0)
-                               break;
-               }
-               h->nheads += hb == HASHnil(h);
-               h->nunique += hb2 == HASHnil(h);
-               HASHputlink(h, i, hb);
-               HASHput(h, c, i);
-               h->heapbckt.dirty = true;
-               h->heaplink.dirty = true;
+               return;
        }
+       h->Link = h->heaplink.base;
+       BUN c = HASHprobe(h, v);
+       h->heaplink.free += h->width;
+       BUN hb = HASHget(h, c);
+       BUN hb2;
+       BATiter bi = bat_iterator(b);
+       for (hb2 = hb;
+            hb2 != HASHnil(h);
+            hb2 = HASHgetlink(h, hb2)) {
+               if (ATOMcmp(h->type,
+                           v,
+                           BUNtail(bi, hb2)) == 0)
+                       break;
+       }
+       h->nheads += hb == HASHnil(h);
+       h->nunique += hb2 == HASHnil(h);
+       HASHputlink(h, i, hb);
+       HASHput(h, c, i);
+       h->heapbckt.dirty = true;
+       h->heaplink.dirty = true;
+}
+
+void
+HASHins(BAT *b, BUN i, const void *v)
+{
+       MT_lock_set(&b->batIdxLock);
+       HASHins_locked(b, i, v);
        MT_lock_unset(&b->batIdxLock);
 }
 
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -2120,7 +2120,7 @@ log_bat_clear(logger *lg, int id)
 #define DBLKSZ         8192
 #define SEGSZ          (64*DBLKSZ)
 
-#define LOG_LARGE      LL_CONSTANT(2)*1024
+#define LOG_LARGE      (LL_CONSTANT(2)*1024)
 //*1024*1024
 
 static gdk_return
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1971,6 +1971,7 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
                                rhval = ro - rl->hseqbase + rl->tseqbase;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to