Changeset: 2e26fb1ae104 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2e26fb1ae104
Modified Files:
clients/Tests/exports.stable.out
Branch: embedded_mapi
Log Message:
Merge with default.
diffs (truncated from 4106 to 300 lines):
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
@@ -1447,6 +1447,7 @@ char *monetdbe_error(monetdbe_database d
char *monetdbe_execute(monetdbe_statement *stmt, monetdbe_result **result,
monetdbe_cnt *affected_rows);
char *monetdbe_get_autocommit(monetdbe_database dbhdl, int *result);
char *monetdbe_get_columns(monetdbe_database dbhdl, const char *schema_name,
const char *table_name, size_t *column_count, monetdbe_column **columns);
+const char *monetdbe_get_mapi_port(void);
int monetdbe_in_transaction(monetdbe_database dbhdl);
const void *monetdbe_null(monetdbe_database dbhdl, monetdbe_types t);
int monetdbe_open(monetdbe_database *db, char *url, monetdbe_options *opts);
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -424,7 +424,7 @@ SQLhelp sqlhelp1[] = {
"",
"[ WITH cte_list ] MERGE INTO qname [ [AS] ident ] USING table_ref [
[AS] ident ] ON search_condition merge_list",
"cte_list,table_ref,search_condition,merge_list",
- "See also:
https://www.monetdb.org/blog/sql2003_merge_statements_now_supported"},
+ "See also:
https://www.monetdb.org/documentation/user-guide/blog-archive/merge-statements/"},
{"PLAN",
"Give relational execution plan for the SQL statement",
"PLAN statement",
@@ -761,14 +761,14 @@ SQLhelp sqlhelp2[] = {
NULL,
"PARTITION BY { RANGE | VALUES } { ON '(' ident ')' | USING '('
query_expression ')' }",
"query_expression",
- "See also: https://www.monetdb.org/blog/updatable-merge-tables"},
+ "See also:
https://www.monetdb.org/documentation/user-guide/blog-archive/update-mergetables/"},
{"partition_spec",
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",
- "See also: https://www.monetdb.org/blog/updatable-merge-tables"},
+ "See also:
https://www.monetdb.org/documentation/user-guide/blog-archive/update-mergetables/"},
{"param",
NULL,
"ident data_type",
diff --git a/cmake/monetdb-options.cmake b/cmake/monetdb-options.cmake
--- a/cmake/monetdb-options.cmake
+++ b/cmake/monetdb-options.cmake
@@ -69,6 +69,10 @@ option(SANITIZER
"Enable support for the GCC address sanitizer (default=OFF)"
OFF)
+option(UNDEFINED
+ "Enable support for the GCC undefined sanitizer (default=OFF)"
+ OFF)
+
option(STRICT
"Enable strict compiler flags (default=ON for development sources, OFF for
tarball installation)"
"${DEVELOPMENT}")
diff --git a/cmake/monetdb-toolchain.cmake b/cmake/monetdb-toolchain.cmake
--- a/cmake/monetdb-toolchain.cmake
+++ b/cmake/monetdb-toolchain.cmake
@@ -30,6 +30,21 @@ function(monetdb_default_compiler_option
endif()
endif()
+ if(UNDEFINED)
+ if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
+ add_compile_options("-fsanitize=undefined")
+ add_compile_options("-fno-omit-frame-pointer")
+ add_compile_definitions(UNDEFINED)
+ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0")
+ add_link_options("-fsanitize=undefined")
+ else()
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined" PARENT_SCOPE)
+ endif()
+ else()
+ message(FATAL_ERROR "Sanitizer only supported with GCC")
+ endif()
+ endif()
+
if(STRICT)
if(${CMAKE_C_COMPILER_ID} MATCHES "^(GNU|Clang|AppleClang)$")
add_compile_options("-Werror")
diff --git a/common/stream/text_stream.c b/common/stream/text_stream.c
--- a/common/stream/text_stream.c
+++ b/common/stream/text_stream.c
@@ -166,7 +166,8 @@ text_pump_out(inner_state_t *ist, pump_a
size_t dst_count = ist->dst_win.count;
size_t ncopy = src_count < dst_count ? src_count : dst_count;
- memcpy(ist->dst_win.start, ist->src_win.start, ncopy);
+ if (ncopy > 0)
+ memcpy(ist->dst_win.start, ist->src_win.start, ncopy);
ist->dst_win.start += ncopy;
ist->dst_win.count -= ncopy;
ist->src_win.start += ncopy;
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -40,6 +40,8 @@ GDKrebuild_segment_tree(oid ncount, oid
*nlevels = next_levels; /* set the logical size of levels before the
physical one */
next_tree_size *= data_size;
+ /* round up to multiple of sizeof(oid) */
+ next_tree_size = ((next_tree_size + SIZEOF_OID - 1) / SIZEOF_OID) *
SIZEOF_OID;
total_size = next_tree_size + next_levels * sizeof(oid);
if (total_size > BATcount(st)) {
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -554,7 +554,7 @@ append_msk_bat(BAT *b, BAT *n, struct ca
*bp++ |= (*np & mask) << boff;
cnt -= 32;
}
- if (cnt > boff) {
+ if (cnt > noff) {
/* the last bits come from two words
* in n */
*bp = (*np++ & ~mask) >> noff;
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1160,6 +1160,30 @@ scanselect(BAT *b, BATiter *bi, struct c
/* in the case where equi==true, the check is x == *tl */ \
} while (false)
+#if SIZEOF_BUN == SIZEOF_INT
+#define CALC_ESTIMATE(TPE) \
+ do { \
+ if (*(TPE*)tl < 1) { \
+ if ((int) BUN_MAX + *(TPE*)tl >= *(TPE*)th) \
+ estimate = (BUN) ((int) *(TPE*)th - *(TPE*)tl);
\
+ } else { \
+ if (-(int) BUN_MAX + *(TPE*)tl <= *(TPE*)th) \
+ estimate = (BUN) ((int) *(TPE*)th - *(TPE*)tl);
\
+ } \
+ } while (0)
+#else
+#define CALC_ESTIMATE(TPE) \
+ do { \
+ if (*(TPE*)tl < 1) { \
+ if ((lng) BUN_MAX + *(TPE*)tl >= *(TPE*)th) \
+ estimate = (BUN) ((lng) *(TPE*)th - *(TPE*)tl);
\
+ } else { \
+ if (-(lng) BUN_MAX + *(TPE*)tl <= *(TPE*)th) \
+ estimate = (BUN) ((lng) *(TPE*)th - *(TPE*)tl);
\
+ } \
+ } while (0)
+#endif
+
/* generic range select
*
* Return a BAT with the OID values of b for qualifying tuples. The
@@ -1874,19 +1898,18 @@ BATselect(BAT *b, BAT *s, const void *tl
estimate = (BUN) (*(sht *) th - *(sht *) tl);
break;
case TYPE_int:
- estimate = (BUN) (*(int *) th - *(int *) tl);
+ CALC_ESTIMATE(int);
break;
case TYPE_lng:
- estimate = (BUN) (*(lng *) th - *(lng *) tl);
+ CALC_ESTIMATE(lng);
break;
#ifdef HAVE_HGE
case TYPE_hge:
- if (*(hge *) th - *(hge *) tl < (hge) BUN_MAX)
- estimate = (BUN) (*(hge *) th - *(hge
*) tl);
+ CALC_ESTIMATE(hge);
break;
#endif
}
- if (estimate != BUN_NONE)
+ if (estimate == BUN_NONE)
estimate += li + hi - 1;
}
}
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -230,51 +230,36 @@ gdk_export void MT_thread_set_qry_ctx(Qr
TRC_DEBUG(TEM, "Locking %s complete\n", (l)->name); \
} while (0)
-#define _DBG_LOCK_INIT(l) \
- do { \
- (l)->count = 0; \
- ATOMIC_INIT(&(l)->contention, 0); \
- ATOMIC_INIT(&(l)->sleep, 0); \
- (l)->locker = NULL; \
- (l)->thread = NULL; \
- /* if name starts with "sa_" don't link in GDKlocklist */ \
- /* since the lock is in memory that is governed by the */ \
- /* SQL storage allocator, and hence we have no control */ \
- /* over when the lock is destroyed and the memory freed */ \
- if (strncmp((l)->name, "sa_", 3) != 0) { \
- while (ATOMIC_TAS(&GDKlocklistlock) != 0) \
- ; \
- if (GDKlocklist) \
- GDKlocklist->prev = (l); \
- (l)->next = GDKlocklist; \
- (l)->prev = NULL; \
- GDKlocklist = (l); \
- ATOMIC_CLEAR(&GDKlocklistlock); \
- } else { \
- (l)->next = NULL; \
- (l)->prev = NULL; \
- } \
+#define _DBG_LOCK_INIT(l) \
+ do { \
+ (l)->count = 0; \
+ ATOMIC_INIT(&(l)->contention, 0); \
+ ATOMIC_INIT(&(l)->sleep, 0); \
+ (l)->locker = NULL; \
+ (l)->thread = NULL; \
+ while (ATOMIC_TAS(&GDKlocklistlock) != 0) \
+ ; \
+ if (GDKlocklist) \
+ GDKlocklist->prev = (l); \
+ (l)->next = GDKlocklist; \
+ (l)->prev = NULL; \
+ GDKlocklist = (l); \
+ ATOMIC_CLEAR(&GDKlocklistlock); \
} while (0)
-#define _DBG_LOCK_DESTROY(l) \
- do { \
- /* if name starts with "sa_" don't link in GDKlocklist */ \
- /* since the lock is in memory that is governed by the */ \
- /* SQL storage allocator, and hence we have no control */ \
- /* over when the lock is destroyed and the memory freed */ \
- if (strncmp((l)->name, "sa_", 3) != 0) { \
- while (ATOMIC_TAS(&GDKlocklistlock) != 0) \
- ; \
- if ((l)->next) \
- (l)->next->prev = (l)->prev; \
- if ((l)->prev) \
- (l)->prev->next = (l)->next; \
- else if (GDKlocklist == (l)) \
- GDKlocklist = (l)->next; \
- ATOMIC_CLEAR(&GDKlocklistlock); \
- ATOMIC_DESTROY(&(l)->contention); \
- ATOMIC_DESTROY(&(l)->sleep); \
- } \
+#define _DBG_LOCK_DESTROY(l) \
+ do { \
+ while (ATOMIC_TAS(&GDKlocklistlock) != 0) \
+ ; \
+ if ((l)->next) \
+ (l)->next->prev = (l)->prev; \
+ if ((l)->prev) \
+ (l)->prev->next = (l)->next; \
+ else if (GDKlocklist == (l)) \
+ GDKlocklist = (l)->next; \
+ ATOMIC_CLEAR(&GDKlocklistlock); \
+ ATOMIC_DESTROY(&(l)->contention); \
+ ATOMIC_DESTROY(&(l)->sleep); \
} while (0)
#else
diff --git a/geom/sql/conformance/Tests/All b/geom/sql/conformance/Tests/All
--- a/geom/sql/conformance/Tests/All
+++ b/geom/sql/conformance/Tests/All
@@ -46,8 +46,8 @@ HAVE_GEOM?T44
HAVE_GEOM?T45
HAVE_GEOM?T46
HAVE_GEOM?T47
-HAVE_GEOM?T48
-#HAVE_GEOM?T49 # disabled because depends on geos library version
+HAVE_GEOM&GEOS_VERSION>=3.9?T48
+HAVE_GEOM&GEOS_VERSION>=3.9?T49
HAVE_GEOM?T50
HAVE_GEOM?T51
HAVE_GEOM?T52
diff --git a/geom/sql/conformance/Tests/T49.test
b/geom/sql/conformance/Tests/T49.test
--- a/geom/sql/conformance/Tests/T49.test
+++ b/geom/sql/conformance/Tests/T49.test
@@ -1,5 +1,5 @@
query T rowsort
SELECT ST_AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE
lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island'
----
-POLYGON ((52 18, 66 23, 73 9, 48 6, 52 18))
+POLYGON ((66 23, 73 9, 48 6, 52 18, 66 23))
diff --git a/geom/sql/functions/Tests/All b/geom/sql/functions/Tests/All
--- a/geom/sql/functions/Tests/All
+++ b/geom/sql/functions/Tests/All
@@ -20,7 +20,7 @@ HAVE_GEOM?ST_AsText
HAVE_GEOM?ST_IsClosed
HAVE_GEOM?ST_IsEmpty
-HAVE_GEOM?ST_IsSimple
+HAVE_GEOM&GEOS_VERSION>=3.8?ST_IsSimple
HAVE_GEOM?ST_IsValid
HAVE_GEOM?ST_IsRing
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -1265,10 +1265,10 @@ addArgument(MalBlkPtr mb, InstrPtr p, in
if (p->argc == p->maxarg) {
pn = extendInstruction(mb, p);
#ifndef NDEBUG
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]