Changeset: c35b6882aed4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c35b6882aed4
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_logger.c
sql/backends/monet5/sql_scenario.c
sql/server/rel_optimizer.c
sql/storage/bat/bat_logger.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.int128
Branch: unlock
Log Message:
merged default
diffs (truncated from 1649 to 300 lines):
diff --git a/NT/mkodbcwxs.py b/NT/mkodbcwxs.py
--- a/NT/mkodbcwxs.py
+++ b/NT/mkodbcwxs.py
@@ -84,6 +84,8 @@ def main():
vcpkg.format(r'bin\bz2.dll'),
vcpkg.format(r'bin\charset-1.dll'), # for iconv-2.dll
vcpkg.format(r'bin\libcrypto-1_1{}.dll'.format(libcrypto)),
+ vcpkg.format(r'bin\lz4.dll'),
+ vcpkg.format(r'bin\lzma.dll'),
vcpkg.format(r'bin\zlib1.dll')])
print(r' </Directory>')
id = comp(features, id, 12,
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
@@ -626,6 +626,7 @@ int mapi_get_scale(MapiHdl hdl, int fnr)
int64_t mapi_get_sqloptimizertime(MapiHdl hdl) __attribute__((__nonnull__(1)));
char *mapi_get_table(MapiHdl hdl, int fnr) __attribute__((__nonnull__(1)));
int mapi_get_tableid(MapiHdl hdl) __attribute__((__nonnull__(1)));
+int mapi_get_time_zone(Mapi mid) __attribute__((__nonnull__(1)));
stream *mapi_get_to(Mapi mid) __attribute__((__nonnull__(1)));
bool mapi_get_trace(Mapi mid) __attribute__((__nonnull__(1)));
char *mapi_get_type(MapiHdl hdl, int fnr) __attribute__((__nonnull__(1)));
@@ -665,6 +666,7 @@ MapiHdl mapi_send(Mapi mid, const char *
MapiMsg mapi_setAutocommit(Mapi mid, bool autocommit)
__attribute__((__nonnull__(1)));
MapiMsg mapi_set_columnar_protocol(Mapi mid, bool columnar_protocol)
__attribute__((__nonnull__(1)));
MapiMsg mapi_set_size_header(Mapi mid, bool value)
__attribute__((__nonnull__(1)));
+MapiMsg mapi_set_time_zone(Mapi mid, int seconds_east_of_utc)
__attribute__((__nonnull__(1)));
MapiMsg mapi_set_timeout(Mapi mid, unsigned int timeout, bool (*callback)(void
*), void *callback_data) __attribute__((__nonnull__(1)));
void mapi_setfilecallback(Mapi mid, char *(*getfunc)(void *priv, const char
*filename, bool binary, uint64_t offset, size_t *size), char *(*putfunc)(void
*priv, const char *filename, const void *data, size_t size), void *priv)
__attribute__((__nonnull__(1)));
int mapi_split_line(MapiHdl hdl) __attribute__((__nonnull__(1)));
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2893,75 +2893,6 @@ doFile(Mapi mid, stream *fp, bool useins
return errseen;
}
-static void
-set_timezone(Mapi mid)
-{
- char buf[128];
- int tzone;
- MapiHdl hdl;
-
- /* figure out our current timezone */
-#if defined HAVE_GETDYNAMICTIMEZONEINFORMATION
- DYNAMIC_TIME_ZONE_INFORMATION tzinf;
-
- /* documentation says: UTC = localtime + Bias (in minutes),
- * but experimentation during DST period says, UTC = localtime
- * + Bias + DaylightBias, and presumably during non DST
- * period, UTC = localtime + Bias */
- switch (GetDynamicTimeZoneInformation(&tzinf)) {
- case TIME_ZONE_ID_STANDARD:
- case TIME_ZONE_ID_UNKNOWN:
- tzone = (int) tzinf.Bias * 60;
- break;
- case TIME_ZONE_ID_DAYLIGHT:
- tzone = (int) (tzinf.Bias + tzinf.DaylightBias) * 60;
- break;
- default:
- /* call failed, we don't know the time zone */
- tzone = 0;
- break;
- }
-#elif defined HAVE_STRUCT_TM_TM_ZONE
- time_t t;
- struct tm *tmp;
-
- t = time(NULL);
- tmp = localtime(&t);
- tzone = (int) -tmp->tm_gmtoff;
-#else
- time_t t, lt, gt;
- struct tm *tmp;
-
- t = time(NULL);
- tmp = gmtime(&t);
- gt = mktime(tmp);
- tmp = localtime(&t);
- tmp->tm_isdst=0; /* We need the difference without dst */
- lt = mktime(tmp);
- assert((int64_t) gt - (int64_t) lt >= (int64_t) INT_MIN && (int64_t) gt
- (int64_t) lt <= (int64_t) INT_MAX);
- tzone = (int) (gt - lt);
-#endif
- if (tzone < 0)
- snprintf(buf, sizeof(buf),
- "SET TIME ZONE INTERVAL '+%02d:%02d' HOUR TO MINUTE",
- -tzone / 3600, (-tzone % 3600) / 60);
- else
- snprintf(buf, sizeof(buf),
- "SET TIME ZONE INTERVAL '-%02d:%02d' HOUR TO MINUTE",
- tzone / 3600, (tzone % 3600) / 60);
- if ((hdl = mapi_query(mid, buf)) == NULL) {
- if (formatter == TABLEformatter) {
- mapi_noexplain(mid, "");
- } else {
- mapi_noexplain(mid, NULL);
- }
- mapi_explain(mid, stderr);
- errseen = true;
- return;
- }
- mapi_close_handle(hdl);
-}
-
struct privdata {
stream *f;
char *buf;
@@ -3538,6 +3469,12 @@ main(int argc, char **argv)
if (dbname)
free(dbname);
dbname = NULL;
+
+ mapi_cache_limit(mid, -1);
+ mapi_setAutocommit(mid, autocommit);
+ if (mode == SQL && !settz)
+ mapi_set_time_zone(mid, 0);
+
if (mid && mapi_error(mid) == MOK)
mapi_reconnect(mid); /* actually, initial connect */
@@ -3553,7 +3490,6 @@ main(int argc, char **argv)
mnstr_printf(stderr_stream, "%s\n",
mapi_error_str(mid));
exit(2);
}
- mapi_cache_limit(mid, -1);
if (dump) {
if (mode == SQL) {
exit(dump_database(mid, toConsole, 0, useinserts,
false));
@@ -3567,9 +3503,6 @@ main(int argc, char **argv)
priv = (struct privdata) {0};
mapi_setfilecallback(mid, getfile, putfile, &priv);
- if (!autocommit)
- mapi_setAutocommit(mid, autocommit);
-
if (logfile)
mapi_log(mid, logfile);
@@ -3616,9 +3549,6 @@ main(int argc, char **argv)
mapi_get_autocommit(mid) ? "on" : "off");
}
- if (mode == SQL && settz)
- set_timezone(mid);
-
if (command != NULL) {
#if !defined(_MSC_VER) && defined(HAVE_ICONV)
/* no need on Windows: using wmain interface */
diff --git a/clients/mapiclient/msqldump.c b/clients/mapiclient/msqldump.c
--- a/clients/mapiclient/msqldump.c
+++ b/clients/mapiclient/msqldump.c
@@ -198,7 +198,7 @@ main(int argc, char **argv)
if (passwd == NULL)
passwd = simple_prompt("password", BUFSIZ, 0, NULL);
- mid = mapi_connect(host, port, user, passwd, "sql", dbname);
+ mid = mapi_mapi(host, port, user, passwd, "sql", dbname);
if (user)
free(user);
if (passwd)
@@ -209,6 +209,8 @@ main(int argc, char **argv)
fprintf(stderr, "failed to allocate Mapi structure\n");
exit(2);
}
+ mapi_set_time_zone(mid, 0);
+ mapi_reconnect(mid);
if (mapi_error(mid)) {
mapi_explain(mid, stderr);
exit(2);
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -726,6 +726,37 @@
# include <sys/time.h> /* gettimeofday */
#endif
+/* Copied from gdk_posix, but without taking a lock because we don't have
access to
+ * MT_lock_set/unset here. We just have to hope for the best
+ */
+#ifndef HAVE_LOCALTIME_R
+struct tm *
+localtime_r(const time_t *restrict timep, struct tm *restrict result)
+{
+ struct tm *tmp;
+ tmp = localtime(timep);
+ if (tmp)
+ *result = *tmp;
+ return tmp ? result : NULL;
+}
+#endif
+
+/* Copied from gdk_posix, but without taking a lock because we don't have
access to
+ * MT_lock_set/unset here. We just have to hope for the best
+ */
+#ifndef HAVE_GMTIME_R
+struct tm *
+gmtime_r(const time_t *restrict timep, struct tm *restrict result)
+{
+ struct tm *tmp;
+ tmp = gmtime(timep);
+ if (tmp)
+ *result = *tmp;
+ return tmp ? result : NULL;
+}
+#endif
+
+
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
@@ -879,8 +910,11 @@ struct MapiStruct {
struct BlockCache blk;
bool connected;
bool trace; /* Trace Mapi interaction */
+ int handshake_options; /* which settings can be sent during
challenge/response? */
bool auto_commit;
bool columnar_protocol;
+ bool sizeheader;
+ int time_zone; /* seconds EAST of UTC */
MapiHdl first; /* start of doubly-linked list */
MapiHdl active; /* set when not all rows have been received */
@@ -995,6 +1029,7 @@ static int mapi_extend_bindings(MapiHdl
static int mapi_extend_params(MapiHdl hdl, int minparams);
static void close_connection(Mapi mid);
static MapiMsg read_into_cache(MapiHdl hdl, int lookahead);
+static MapiMsg mapi_Xcommand(Mapi mid, const char *cmdname, const char
*cmdvalue);
static int unquote(const char *msg, char **start, const char **next, int
endchar, size_t *lenp);
static int mapi_slice_row(struct MapiResultSet *result, int cr);
static void mapi_store_bind(struct MapiResultSet *result, int cr);
@@ -1379,6 +1414,13 @@ mapi_get_columnar_protocol(Mapi mid)
return mid->columnar_protocol;
}
+int
+mapi_get_time_zone(Mapi mid)
+{
+ mapi_check0(mid);
+ return mid->time_zone;
+}
+
static int64_t
usec(void)
{
@@ -1863,6 +1905,17 @@ mapi_close_handle(MapiHdl hdl)
return MOK;
}
+static const struct MapiStruct MapiStructDefaults = {
+ .auto_commit = true,
+ .error = MOK,
+ .languageId = LANG_SQL,
+ .mapiversion = "mapi 1.0",
+ .cachelimit = 100,
+ .redirmax = 10,
+ .blk.eos = false,
+ .blk.lim = BLOCK,
+};
+
/* Allocate a new connection handle. */
static Mapi
mapi_new(void)
@@ -1875,17 +1928,8 @@ mapi_new(void)
return NULL;
/* then fill in some details */
- *mid = (struct MapiStruct) {
- .index = (uint32_t) ATOMIC_ADD(&index, 1), /* for
distinctions in log records */
- .auto_commit = true,
- .error = MOK,
- .languageId = LANG_SQL,
- .mapiversion = "mapi 1.0",
- .cachelimit = 100,
- .redirmax = 10,
- .blk.eos = false,
- .blk.lim = BLOCK,
- };
+ *mid = MapiStructDefaults;
+ mid->index = (uint32_t) ATOMIC_ADD(&index, 1); /* for distinctions in
log records */
if ((mid->blk.buf = malloc(mid->blk.lim + 1)) == NULL) {
mapi_destroy(mid);
return NULL;
@@ -1893,6 +1937,16 @@ mapi_new(void)
mid->blk.buf[0] = 0;
mid->blk.buf[mid->blk.lim] = 0;
+ /* also the current timezone, seconds EAST of UTC */
+ time_t t = time(NULL);
+ struct tm *gm_tm = gmtime_r(&t, &(struct tm){0});
+ time_t gt = mktime(gm_tm);
+ struct tm *local_tm = localtime_r(&t, &(struct tm){0});
+ local_tm->tm_isdst=0; /* We need the difference without dst */
+ time_t lt = mktime(local_tm);
+ assert((int64_t) gt - (int64_t) lt >= (int64_t) INT_MIN && (int64_t) gt
- (int64_t) lt <= (int64_t) INT_MAX);
+ mid->time_zone = (int) (lt - gt);
+
return mid;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list