Changeset: 2a97ca259477 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2a97ca259477
Added Files:
        sql/test/BugTracker-2018/Tests/truncate_geom_tables.Bug-6543.sql
        sql/test/BugTracker-2018/Tests/truncate_geom_tables.Bug-6543.stable.err
        sql/test/BugTracker-2018/Tests/truncate_geom_tables.Bug-6543.stable.out
Removed Files:
        
sql/test/BugTracker-2017/Tests/cleanup_statistics.Bug-6439.stable.out.FreeBSD
        
sql/test/BugTracker-2017/Tests/cleanup_statistics.Bug-6439.stable.out.Windows
Modified Files:
        MonetDB.spec
        clients/Tests/exports.stable.out
        clients/mapiclient/mhelp.c
        configure.ag
        gdk/gdk.h
        gdk/gdk_atomic.h
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_hash.c
        gdk/gdk_hash.h
        gdk/gdk_imprints.c
        gdk/gdk_system.c
        gdk/gdk_system.h
        gdk/gdk_utils.c
        gdk/gdk_utils.h
        monetdb5/extras/rapi/rapi.c
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_resource.c
        monetdb5/modules/mal/mal_mapi.c
        sql/ChangeLog.Apr2019
        sql/server/rel_propagate.c
        sql/server/sql_parser.y
        sql/server/sql_partition.c
        sql/storage/sql_catalog.c
        sql/storage/store.c
        sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out
        
sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128
        sql/test/BugTracker-2017/Tests/All
        sql/test/BugTracker-2017/Tests/cleanup_statistics.Bug-6439.stable.out
        sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.sql
        
sql/test/BugTracker-2017/Tests/statistics_nils_not_eq_zero.Bug-6331.stable.out
        sql/test/BugTracker-2018/Tests/All
        sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.sql
        sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.stable.err
        sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.stable.out
        sql/test/merge-partitions/Tests/mergepart01.sql
        sql/test/merge-partitions/Tests/mergepart01.stable.err
        sql/test/merge-partitions/Tests/mergepart01.stable.out
        sql/test/merge-partitions/Tests/mergepart02.sql
        sql/test/merge-partitions/Tests/mergepart02.stable.err
        sql/test/merge-partitions/Tests/mergepart03.sql
        sql/test/merge-partitions/Tests/mergepart03.stable.err
        sql/test/merge-partitions/Tests/mergepart03.stable.out
        sql/test/merge-partitions/Tests/mergepart05.sql
        sql/test/merge-partitions/Tests/mergepart05.stable.err
        sql/test/merge-partitions/Tests/mergepart05.stable.out
        sql/test/merge-partitions/Tests/mergepart06.sql
        sql/test/merge-partitions/Tests/mergepart06.stable.err
        sql/test/merge-partitions/Tests/mergepart06.stable.out
        sql/test/merge-partitions/Tests/mergepart07.sql
        sql/test/merge-partitions/Tests/mergepart07.stable.err
        sql/test/merge-partitions/Tests/mergepart07.stable.out
        sql/test/merge-partitions/Tests/mergepart08.sql
        sql/test/merge-partitions/Tests/mergepart08.stable.out
        sql/test/merge-partitions/Tests/mergepart09.sql
        sql/test/merge-partitions/Tests/mergepart09.stable.err
        sql/test/merge-partitions/Tests/mergepart11.sql
        sql/test/merge-partitions/Tests/mergepart11.stable.out
        sql/test/merge-partitions/Tests/mergepart12.sql
        sql/test/merge-partitions/Tests/mergepart12.stable.out
        sql/test/merge-partitions/Tests/mergepart13.sql
        sql/test/merge-partitions/Tests/mergepart13.stable.err
        sql/test/merge-partitions/Tests/mergepart13.stable.out
        sql/test/merge-partitions/Tests/mergepart15.sql
        sql/test/merge-partitions/Tests/mergepart15.stable.err
        sql/test/merge-partitions/Tests/mergepart15.stable.out
        sql/test/merge-partitions/Tests/mergepart16.sql
        sql/test/merge-partitions/Tests/mergepart16.stable.err
        sql/test/merge-partitions/Tests/mergepart17.sql
        sql/test/merge-partitions/Tests/mergepart17.stable.err
        sql/test/merge-partitions/Tests/mergepart17.stable.out
        sql/test/merge-partitions/Tests/mergepart18.sql
        sql/test/merge-partitions/Tests/mergepart18.stable.err
        sql/test/merge-partitions/Tests/mergepart18.stable.out
        sql/test/merge-partitions/Tests/mergepart20.sql
        sql/test/merge-partitions/Tests/mergepart20.stable.err
        sql/test/merge-partitions/Tests/mergepart20.stable.out
        sql/test/merge-partitions/Tests/mergepart23.py
        sql/test/merge-partitions/Tests/mergepart23.stable.err
        sql/test/merge-partitions/Tests/mergepart23.stable.out
        sql/test/merge-partitions/Tests/mergepart24.sql
        sql/test/merge-partitions/Tests/mergepart24.stable.err
        sql/test/merge-partitions/Tests/mergepart24.stable.out
        sql/test/merge-partitions/Tests/mergepart25.sql
        sql/test/merge-partitions/Tests/mergepart25.stable.out
        sql/test/merge-partitions/Tests/mergepart26.sql
        sql/test/merge-partitions/Tests/mergepart26.stable.err
        sql/test/merge-partitions/Tests/mergepart26.stable.out
        sql/test/merge-partitions/Tests/mergepart27.sql
        sql/test/merge-partitions/Tests/mergepart27.stable.err
        sql/test/merge-partitions/Tests/mergepart27.stable.out
        sql/test/merge-partitions/Tests/mergepart28.sql.in
        sql/test/merge-partitions/Tests/mergepart28.stable.err
        sql/test/merge-partitions/Tests/mergepart28.stable.out
        sql/test/merge-partitions/Tests/mergepart29.py
Branch: default
Log Message:

Merge with Apr2019 branch.


diffs (truncated from 4143 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -141,8 +141,10 @@ BuildRequires: geos-devel >= 3.4.0
 BuildRequires: liblas-devel >= 1.8.0
 BuildRequires: pkgconfig(gdal)
 %endif
-%if %{?rhel:0}%{!?rhel:1} || 0%{?rhel} >= 7
-# RHEL >= 7, and all current Fedora
+%if 0%{?rhel} >= 7
+# On RHEL 7, use the atomic_ops package for atomic operation.
+# On RHEL 6 the package is not available.
+# On Fedora, we use <stdatomic.h> from C11.
 BuildRequires: pkgconfig(atomic_ops)
 %endif
 BuildRequires: pkgconfig(libcurl)
@@ -211,7 +213,10 @@ Summary: MonetDB development files
 Group: Applications/Databases
 Requires: %{name}%{?_isa} = %{version}-%{release}
 Requires: %{name}-stream-devel%{?_isa} = %{version}-%{release}
+%if 0%{?rhel} >= 7
+# RHEL >= 7
 Requires: libatomic_ops-devel
+%endif
 
 %description devel
 MonetDB is a database management system that is developed from a
@@ -995,7 +1000,7 @@ export CFLAGS
        --with-proj=no \
        --with-pthread=yes \
        --with-python2=yes \
-       --with-python3=yes \
+       --with-python3=%{?with_py3integration:yes}%{!?with_py3integration:no} \
        --with-readline=yes \
        --with-regex=%{?with_pcre:PCRE}%{!?with_pcre:POSIX} \
        --with-samtools=%{?with_samtools:yes}%{!?with_samtools:no} \
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
@@ -238,7 +238,6 @@ void GDKerror(_In_z_ _Printf_format_stri
 void GDKexit(int status) __attribute__((__noreturn__));
 void GDKexit(int status);
 bool GDKexiting(void);
-gdk_return GDKextractParentAndLastDirFromPath(const char *path, char 
*last_dir_parent, char *last_dir);
 void GDKfatal(_In_z_ _Printf_format_string_ const char *format, ...) 
__attribute__((__format__(__printf__, 1, 2))) __attribute__((__noreturn__));
 void GDKfatal(_In_z_ _Printf_format_string_ const char *format, ...) 
__attribute__((__format__(__printf__, 1, 2)));
 jmp_buf GDKfataljump;
@@ -337,7 +336,6 @@ void *THRgetdata(int);
 int THRgettid(void);
 int THRhighwater(void);
 Thread THRnew(const char *name);
-int THRprintf(stream *s, _In_z_ _Printf_format_string_ const char *format, 
...) __attribute__((__format__(__printf__, 2, 3)));
 void THRsetdata(int, void *);
 void TMabort(void);
 gdk_return TMcommit(void);
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -698,9 +698,9 @@ SQLhelp sqlhelp2[] = {
         NULL},
        {"opt_partition_spec",
         NULL,
-        "IN '(' partition_list ')' [ WITH NULL ]\n"
-        "BETWEEN partition_range_from AND partition_range_to [ WITH NULL ]\n"
-        "WITH NULL",
+        "IN '(' partition_list ')' [ WITH NULL VALUES ]\n"
+        "FROM partition_range_from TO partition_range_to [ WITH NULL VALUES 
]\n"
+        "FOR NULL VALUES",
         "partition_list,partition_range_from,partition_range_to",
         NULL},
        {"param",
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2512,6 +2512,22 @@ AC_C_INLINE
 AC_C_RESTRICT
 AC_C_FLEXIBLE_ARRAY_MEMBER
 
+AC_MSG_CHECKING([if your compiler has usable <stdatomic.h>])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+       @%:@include <stdatomic.h>
+
+       @%:@if ATOMIC_LLONG_LOCK_FREE == 2
+       atomic_ullong i;
+       @%:@else
+       atomic_uint i;
+       @%:@endif
+       ]],
+       [[ atomic_store(&i, 0); ]]
+       )],
+       [AC_MSG_RESULT([yes])
+        AC_DEFINE([HAVE_STDATOMIC_H], 1, [Define to 1 if you have the 
<stdatomic.h> header file.])],
+       [AC_MSG_RESULT([no])])
+
 AC_MSG_CHECKING([if your compiler understands `__hidden'])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
        @%:@include <stdlib.h>
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2314,8 +2314,6 @@ gdk_export void THRdel(Thread t);
 gdk_export void THRsetdata(int, void *);
 gdk_export void *THRgetdata(int);
 gdk_export int THRhighwater(void);
-gdk_export int THRprintf(stream *s, _In_z_ _Printf_format_string_ const char 
*format, ...)
-       __attribute__((__format__(__printf__, 2, 3)));
 
 gdk_export void *THRdata[THREADDATA];
 
diff --git a/gdk/gdk_atomic.h b/gdk/gdk_atomic.h
--- a/gdk/gdk_atomic.h
+++ b/gdk/gdk_atomic.h
@@ -17,6 +17,7 @@
  * defined.
  *
  * The following operations are defined:
+ * ATOMIC_VAR_INIT -- initialize the variable (not necessarily atomic!);
  * ATOMIC_GET -- return the value of a variable;
  * ATOMIC_SET -- set the value of a variable;
  * ATOMIC_ADD -- add a value to a variable, return original value;
@@ -29,11 +30,9 @@
  * In addition, the following operations are defined:
  * ATOMIC_TAS -- test-and-set: set variable to "true" and return old value
  * ATOMIC_CLEAR -- set variable to "false"
- * ATOMIC_ISSET -- returns whether value is "true"
- * These three operations are only defined on variables of type
+ * These two operations are only defined on variables of type
  * ATOMIC_FLAG, and the only values defined for such a variable are
- * "false" and "true", and they should only be tested through the
- * ATOMIC_ISSET macro.  The variable can be statically initialized
+ * "false" and "true".  The variable can be statically initialized
  * using the ATOMIC_FLAG_INIT macro.
  */
 
@@ -48,11 +47,12 @@
 #include <atomic_ops.h>
 
 #define ATOMIC_TYPE                    AO_t
+#define ATOMIC_VAR_INIT(val)           (val)
 
 #define ATOMIC_GET(var, lck)           AO_load_full(&var)
-#define ATOMIC_SET(var, val, lck)      AO_store_full(&var, (val))
-#define ATOMIC_ADD(var, val, lck)      AO_fetch_and_add(&var, (val))
-#define ATOMIC_SUB(var, val, lck)      AO_fetch_and_add(&var, -(val))
+#define ATOMIC_SET(var, val, lck)      AO_store_full(&var, (AO_t) (val))
+#define ATOMIC_ADD(var, val, lck)      AO_fetch_and_add(&var, (AO_t) (val))
+#define ATOMIC_SUB(var, val, lck)      AO_fetch_and_add(&var, (AO_t) -(val))
 #define ATOMIC_INC(var, lck)           (AO_fetch_and_add1(&var) + 1)
 #define ATOMIC_DEC(var, lck)           (AO_fetch_and_sub1(&var) - 1)
 
@@ -62,7 +62,47 @@
 #define ATOMIC_FLAG_INIT               { AO_TS_INITIALIZER }
 #define ATOMIC_CLEAR(var, lck)         AO_CLEAR(&var)
 #define ATOMIC_TAS(var, lck)   (AO_test_and_set_full(&var) != AO_TS_CLEAR)
-#define ATOMIC_ISSET(var, lck)         (var != AO_TS_CLEAR)
+
+#elif defined(HAVE_STDATOMIC_H) && !defined(__INTEL_COMPILER) && 
!defined(__STDC_NO_ATOMICS__) && !defined(NO_ATOMIC_INSTRUCTIONS)
+
+#include <stdatomic.h>
+
+#if ATOMIC_LLONG_LOCK_FREE == 2
+#define ATOMIC_TYPE                    atomic_ullong
+#define ATOMIC_CAST                    unsigned long long
+#elif ATOMIC_LONG_LOCK_FREE == 2
+#define ATOMIC_TYPE                    atomic_ulong
+#define ATOMIC_CAST                    unsigned long
+#elif ATOMIC_INT_LOCK_FREE == 2
+#define ATOMIC_TYPE                    atomic_uint
+#define ATOMIC_CAST                    unsigned int
+#elif ATOMIC_LLONG_LOCK_FREE == 1
+#define ATOMIC_TYPE                    atomic_ullong
+#define ATOMIC_CAST                    unsigned long long
+#elif ATOMIC_LONG_LOCK_FREE == 1
+#define ATOMIC_TYPE                    atomic_ulong
+#define ATOMIC_CAST                    unsigned long
+#elif ATOMIC_INT_LOCK_FREE == 1
+#define ATOMIC_TYPE                    atomic_uint
+#define ATOMIC_CAST                    unsigned int
+#else
+#define ATOMIC_TYPE                    atomic_ullong
+#define ATOMIC_CAST                    unsigned long long
+#endif
+
+#define ATOMIC_GET(var, lck)           atomic_load(&var)
+#define ATOMIC_SET(var, val, lck)      atomic_store(&var, (ATOMIC_CAST) (val))
+#define ATOMIC_ADD(var, val, lck)      atomic_fetch_add(&var, (ATOMIC_CAST) 
(val))
+#define ATOMIC_SUB(var, val, lck)      atomic_fetch_sub(&var, (ATOMIC_CAST) 
(val))
+#define ATOMIC_INC(var, lck)           (atomic_fetch_add(&var, 1) + 1)
+#define ATOMIC_DEC(var, lck)           (atomic_fetch_sub(&var, 1) - 1)
+
+#define ATOMIC_INIT(lck)               ((void) 0)
+
+#define ATOMIC_FLAG                    atomic_flag
+/* ATOMIC_FLAG_INIT is already defined by the include file */
+#define ATOMIC_CLEAR(var, lck)         atomic_flag_clear(&var)
+#define ATOMIC_TAS(var, lck)           atomic_flag_test_and_set(&var)
 
 #elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && 
!defined(NO_ATOMIC_INSTRUCTIONS)
 
@@ -71,11 +111,12 @@
 #if SIZEOF_SSIZE_T == 8
 
 #define ATOMIC_TYPE                    int64_t
+#define ATOMIC_VAR_INIT(val)           (val)
 
 #define ATOMIC_GET(var, lck)           var
-#define ATOMIC_SET(var, val, lck)      _InterlockedExchange64(&var, (val))
-#define ATOMIC_ADD(var, val, lck)      _InterlockedExchangeAdd64(&var, val)
-#define ATOMIC_SUB(var, val, lck)      _InterlockedExchangeAdd64(&var, -(val))
+#define ATOMIC_SET(var, val, lck)      _InterlockedExchange64(&var, (int64_t) 
(val))
+#define ATOMIC_ADD(var, val, lck)      _InterlockedExchangeAdd64(&var, 
(int64_t) (val))
+#define ATOMIC_SUB(var, val, lck)      _InterlockedExchangeAdd64(&var, 
-(int64_t) (val))
 #define ATOMIC_INC(var, lck)           _InterlockedIncrement64(&var)
 #define ATOMIC_DEC(var, lck)           _InterlockedDecrement64(&var)
 
@@ -88,11 +129,12 @@
 #else
 
 #define ATOMIC_TYPE                    int
+#define ATOMIC_VAR_INIT(val)           (val)
 
 #define ATOMIC_GET(var, lck)           var
-#define ATOMIC_SET(var, val, lck)      _InterlockedExchange(&var, (val))
-#define ATOMIC_ADD(var, val, lck)      _InterlockedExchangeAdd(&var, (val))
-#define ATOMIC_SUB(var, val, lck)      _InterlockedExchangeAdd(&var, -(val))
+#define ATOMIC_SET(var, val, lck)      _InterlockedExchange(&var, (int) (val))
+#define ATOMIC_ADD(var, val, lck)      _InterlockedExchangeAdd(&var, (int) 
(val))
+#define ATOMIC_SUB(var, val, lck)      _InterlockedExchangeAdd(&var, -(int) 
(val))
 #define ATOMIC_INC(var, lck)           _InterlockedIncrement(&var)
 #define ATOMIC_DEC(var, lck)           _InterlockedDecrement(&var)
 
@@ -109,7 +151,6 @@
 #define ATOMIC_FLAG_INIT               { 0 }
 #define ATOMIC_CLEAR(var, lck)         _InterlockedExchange(&var, 0)
 #define ATOMIC_TAS(var, lck)           _InterlockedCompareExchange(&var, 1, 0)
-#define ATOMIC_ISSET(var, lck)         (var != 0)
 #pragma intrinsic(_InterlockedCompareExchange)
 
 #elif (defined(__GNUC__) || defined(__INTEL_COMPILER)) && !(defined(__sun__) 
&& SIZEOF_SIZE_T == 8) && !defined(_MSC_VER) && !defined(NO_ATOMIC_INSTRUCTIONS)
@@ -119,14 +160,15 @@
 #else
 #define ATOMIC_TYPE                    int
 #endif
+#define ATOMIC_VAR_INIT(val)           (val)
 
 #ifdef __ATOMIC_SEQ_CST
 
 /* the new way of doing this according to GCC */
 #define ATOMIC_GET(var, lck)           __atomic_load_n(&var, __ATOMIC_SEQ_CST)
-#define ATOMIC_SET(var, val, lck)      __atomic_store_n(&var, (val), 
__ATOMIC_SEQ_CST)
-#define ATOMIC_ADD(var, val, lck)      __atomic_fetch_add(&var, (val), 
__ATOMIC_SEQ_CST)
-#define ATOMIC_SUB(var, val, lck)      __atomic_fetch_sub(&var, (val), 
__ATOMIC_SEQ_CST)
+#define ATOMIC_SET(var, val, lck)      __atomic_store_n(&var, (ATOMIC_TYPE) 
(val), __ATOMIC_SEQ_CST)
+#define ATOMIC_ADD(var, val, lck)      __atomic_fetch_add(&var, (ATOMIC_TYPE) 
(val), __ATOMIC_SEQ_CST)
+#define ATOMIC_SUB(var, val, lck)      __atomic_fetch_sub(&var, (ATOMIC_TYPE) 
(val), __ATOMIC_SEQ_CST)
 #define ATOMIC_INC(var, lck)           __atomic_add_fetch(&var, 1, 
__ATOMIC_SEQ_CST)
 #define ATOMIC_DEC(var, lck)           __atomic_sub_fetch(&var, 1, 
__ATOMIC_SEQ_CST)
 
@@ -134,15 +176,14 @@
 #define ATOMIC_FLAG_INIT               { 0 }
 #define ATOMIC_CLEAR(var, lck)         __atomic_clear(&var, __ATOMIC_SEQ_CST)
 #define ATOMIC_TAS(var, lck)           __atomic_test_and_set(&var, 
__ATOMIC_SEQ_CST)
-#define ATOMIC_ISSET(var, lck)         (var != 0)
 
 #else
 
 /* the old way of doing this, (still?) needed for Intel compiler on Linux */
 #define ATOMIC_GET(var, lck)           var
-#define ATOMIC_SET(var, val, lck)      (var = (val))
-#define ATOMIC_ADD(var, val, lck)      __sync_fetch_and_add(&var, (val))
-#define ATOMIC_SUB(var, val, lck)      __sync_fetch_and_sub(&var, (val))
+#define ATOMIC_SET(var, val, lck)      (var = (ATOMIC_TYPE) (val))
+#define ATOMIC_ADD(var, val, lck)      __sync_fetch_and_add(&var, 
(ATOMIC_TYPE) (val))
+#define ATOMIC_SUB(var, val, lck)      __sync_fetch_and_sub(&var, 
(ATOMIC_TYPE) (val))
 #define ATOMIC_INC(var, lck)           __sync_add_and_fetch(&var, 1)
 #define ATOMIC_DEC(var, lck)           __sync_sub_and_fetch(&var, 1)
 
@@ -150,7 +191,6 @@
 #define ATOMIC_FLAG_INIT               { 0 }
 #define ATOMIC_CLEAR(var, lck)         __sync_lock_release(&var)
 #define ATOMIC_TAS(var, lck)           __sync_lock_test_and_set(&var, 1)
-#define ATOMIC_ISSET(var, lck)         (var != 0)
 
 #endif
 
@@ -163,6 +203,7 @@
 #else
 #define ATOMIC_TYPE                    int
 #endif
+#define ATOMIC_VAR_INIT(val)           (val)
 
 static inline ATOMIC_TYPE
 __ATOMIC_GET(volatile ATOMIC_TYPE *var, pthread_mutex_t *lck)
@@ -185,7 +226,7 @@ static inline ATOMIC_TYPE
        pthread_mutex_unlock(lck);
        return new;
 }
-#define ATOMIC_SET(var, val, lck)      __ATOMIC_SET(&var, (val), &(lck).lock)
+#define ATOMIC_SET(var, val, lck)      __ATOMIC_SET(&var, (ATOMIC_TYPE) (val), 
&(lck).lock)
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to