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