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