Changeset: 7f39648eece5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7f39648eece5 Modified Files: clients/Tests/exports.stable.out monetdb5/mal/mal.c monetdb5/mal/mal_prelude.c sql/server/rel_updates.c sql/server/sql_mvc.c sql/server/sql_mvc.h tools/monetdbe/monetdbe.c Branch: no_type_bat Log Message:
merged with default diffs (truncated from 342 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 @@ -1320,6 +1320,7 @@ char *monetdbe_get_autocommit(monetdbe_d 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); +char *monetdbe_load_extension(monetdbe_database dbhdl, const char *file); const void *monetdbe_null(monetdbe_database dbhdl, monetdbe_types t); int monetdbe_open(monetdbe_database *db, char *url, monetdbe_options *opts); char *monetdbe_prepare(monetdbe_database dbhdl, char *query, monetdbe_statement **stmt, monetdbe_result **result); diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c --- a/monetdb5/mal/mal.c +++ b/monetdb5/mal/mal.c @@ -72,6 +72,7 @@ mal_init(char *modules[], bool embedded, */ str err; + mal_startup(); /* check that library that we're linked against is compatible with * the one we were compiled with */ int maj, min, patch; diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c --- a/monetdb5/mal/mal_embedded.c +++ b/monetdb5/mal/mal_embedded.c @@ -56,6 +56,7 @@ malEmbeddedBoot(int workerlimit, int mem if (embeddedinitialized) return MAL_SUCCEED; + mal_startup(); { /* unlock the vault, first see if we can find the file which * holds the secret */ diff --git a/monetdb5/mal/mal_linker.c b/monetdb5/mal/mal_linker.c --- a/monetdb5/mal/mal_linker.c +++ b/monetdb5/mal/mal_linker.c @@ -155,7 +155,7 @@ loadLibrary(const char *filename, int fl is_mod = (!is_monetdb5 && strcmp(filename, "embedded") != 0); if (lastfile == 0 && is_mod) { /* first load reference to local functions */ - str msg = loadLibrary("monetdb5", flag); + str msg = loadLibrary("monetdb5", flag>=0?flag:0); if (msg != MAL_SUCCEED) return msg; } @@ -184,7 +184,9 @@ loadLibrary(const char *filename, int fl if (mod_path == NULL) { int len; - if (is_mod) + if (is_mod && flag < 0) + len = snprintf(nme, FILENAME_MAX, ".%c%s_%s%s", DIR_SEP, SO_PREFIX, s, SO_EXT); + else if (is_mod) len = snprintf(nme, FILENAME_MAX, "%s_%s%s", SO_PREFIX, s, SO_EXT); else len = snprintf(nme, FILENAME_MAX, "%s%s%s", SO_PREFIX, s, SO_EXT); @@ -198,7 +200,7 @@ loadLibrary(const char *filename, int fl handle = dlopen(is_monetdb5 ? NULL : nme, RTLD_NOW | RTLD_GLOBAL); #endif if (!handle) { - if (flag) + if (flag>0) throw(LOADER, "loadLibrary", RUNTIME_FILE_NOT_FOUND ":%s", s); return MAL_SUCCEED; } diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c --- a/monetdb5/mal/mal_prelude.c +++ b/monetdb5/mal/mal_prelude.c @@ -29,7 +29,7 @@ #include "mal_prelude.h" #define MAX_MAL_MODULES 128 -static int mel_modules = 0; +static int mel_modules = 0, mel_modules_loaded = 0; static struct mel_module { const char *name; mel_atom *atoms; @@ -42,6 +42,7 @@ int mal_startup(void) { /* clean up the MAL internal structures before restart */ + mel_modules_loaded = 0; return 0; } @@ -390,7 +391,7 @@ malPrelude(Client c, int listing, int *s (void) listing; /* Add all atom definitions */ - for (i = 0; i < mel_modules; i++) { + for (i = mel_modules_loaded; i < mel_modules; i++) { if (mel_module[i].atoms) { msg = addAtom(mel_module[i].atoms); if (msg) @@ -399,7 +400,7 @@ malPrelude(Client c, int listing, int *s } /* Add the signatures, where we now have access to all atoms */ - for (i = 0; i < mel_modules; i++) { + for (i = mel_modules_loaded; i < mel_modules; i++) { const char *name = putName(mel_module[i].name); if (!malLibraryEnabled(name)) continue; @@ -434,6 +435,7 @@ malPrelude(Client c, int listing, int *s return msg; } } + mel_modules_loaded = mel_modules; return MAL_SUCCEED; } diff --git a/sql/backends/monet5/rel_physical.c b/sql/backends/monet5/rel_physical.c --- a/sql/backends/monet5/rel_physical.c +++ b/sql/backends/monet5/rel_physical.c @@ -97,5 +97,21 @@ rel_physical(mvc *sql, sql_rel *rel) rel = rel_visitor_bottomup(&v, rel, &rel_add_orderby); rel = rel_exp_visitor_topdown(&v, rel, &exp_timezone, true); + +#ifdef HAVE_HGE + if (rel && sql->no_int128) { + sql_rel *r = rel; + if (is_topn(r->op)) + r = r->l; + if (r && is_project(r->op) && !list_empty(r->exps)) { + for (node *n = r->exps->h; n; n = n->next) { + sql_exp *e = n->data; + + if (exp_subtype(e)->type->localtype == TYPE_hge) /* down cast */ + e = n->data = exp_convert(sql->sa, e, exp_subtype(e), sql_bind_localtype("lng")); + } + } + } +#endif return rel; } diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -251,8 +251,6 @@ rel_insert_join_idx(mvc *sql, const char static sql_rel * rel_insert_idxs(mvc *sql, sql_table *t, const char* alias, sql_rel *inserts) { - sql_rel *p = inserts->r; - if (!ol_length(t->idxs)) return inserts; @@ -268,18 +266,6 @@ rel_insert_idxs(mvc *sql, sql_table *t, return NULL; } } - if (inserts->r != p) { - sql_rel *r = rel_create(sql->sa); - if(!r) - return NULL; - - r->op = op_insert; - r->l = rel_dup(p); - r->r = inserts; - r->card = inserts->card; - r->flag |= UPD_COMP; /* mark as special update */ - return r; - } return inserts; } diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -844,6 +844,7 @@ mvc_create(sql_store *store, allocator * } m->schema_path_has_sys = true; m->schema_path_has_tmp = false; + m->no_int128 = false; m->store = store; m->session = sql_session_create(m->store, m->pa, 1 /*autocommit on*/); diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -135,7 +135,8 @@ typedef struct mvc { bool use_views:1, schema_path_has_sys:1, /* speed up object search */ - schema_path_has_tmp:1; + schema_path_has_tmp:1, + no_int128:1; struct qc *qc; int clientid; /* id of the owner */ diff --git a/sql/test/odbc-escape-sequences/Tests/time-date-interval-functions.test b/sql/test/odbc-escape-sequences/Tests/time-date-interval-functions.test --- a/sql/test/odbc-escape-sequences/Tests/time-date-interval-functions.test +++ b/sql/test/odbc-escape-sequences/Tests/time-date-interval-functions.test @@ -1,4 +1,7 @@ # ref: https://learn.microsoft.com/en-us/sql/odbc/reference/appendixes/time-date-and-interval-functions +# +statement ok +set time zone interval '1' hour query I rowsort select { fn current_date() } > date'2023-01-02' diff --git a/sql/test/pg_regress/Tests/time.test b/sql/test/pg_regress/Tests/time.test --- a/sql/test/pg_regress/Tests/time.test +++ b/sql/test/pg_regress/Tests/time.test @@ -1,3 +1,6 @@ +statement ok +SET TIME ZONE INTERVAL '1' HOUR + statement ok CREATE TABLE TIME_TBL (f1 time(2)) diff --git a/sql/test/pg_regress/Tests/timestamp.test b/sql/test/pg_regress/Tests/timestamp.test --- a/sql/test/pg_regress/Tests/timestamp.test +++ b/sql/test/pg_regress/Tests/timestamp.test @@ -1,3 +1,6 @@ +statement ok +SET TIME ZONE INTERVAL '1' HOUR + statement ok CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) ) diff --git a/sql/test/pg_regress/Tests/timestamptz.test b/sql/test/pg_regress/Tests/timestamptz.test --- a/sql/test/pg_regress/Tests/timestamptz.test +++ b/sql/test/pg_regress/Tests/timestamptz.test @@ -1,3 +1,6 @@ +statement ok +SET TIME ZONE INTERVAL '1' HOUR + statement ok CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone) diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in --- a/testing/Mtest.py.in +++ b/testing/Mtest.py.in @@ -1451,6 +1451,25 @@ def PerformDir(env, testdir, testlist, t interrupted = True finally: if pSrvr is not None: + try: + dbh = pymonetdb.connect(username='monetdb', + password='monetdb', + hostname=HOST, + port=int(pSrvr.port), + database=TSTDB, + autocommit=True) + except KeyboardInterrupt: + interrupted = True + except: + pass + else: + crs = dbh.cursor() + crs.execute("select count(*), max(id) from sys.bbp()") + nbats, maxid = crs.fetchall()[0] + crs.close() + dbh.close() + if maxid > nbats and maxid - nbats > 10000: + pSrvr.outfile.write(f'Too many free bats. Max ID = {maxid}, # used = {nbats}, diff = {maxid - nbats}.') pSrvr.terminate() pSrvr = None if produce_html: diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -19,6 +19,7 @@ #include "mal_embedded.h" #include "mal_backend.h" #include "mal_builder.h" +#include "mal_linker.h" #include "opt_prelude.h" #include "sql_mvc.h" #include "sql_catalog.h" @@ -587,6 +588,7 @@ monetdbe_open_internal(monetdbe_database set_error(mdbe, createException(SQL, "monetdbe.monetdbe_open_internal", MAL_MALLOC_FAIL)); goto cleanup; } + m->no_int128 = opts?opts->no_int128:false; cleanup: if (mdbe->msg) return -2; @@ -992,6 +994,26 @@ monetdbe_error(monetdbe_database dbhdl) } char* +monetdbe_load_extension(monetdbe_database dbhdl, const char *file) +{ + if (!dbhdl) + return 0; + + monetdbe_database_internal *mdbe = (monetdbe_database_internal*)dbhdl; + + if ((mdbe->msg = validate_database_handle(mdbe, "embedded.monetdbe_dump_database")) != MAL_SUCCEED) { + return mdbe->msg; + } + char *modules[2]; + modules[0] = (char*)file; + modules[1] = NULL; + char *msg = loadLibrary(file, -1); + if (msg) + return msg; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org