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

Reply via email to