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 -- [email protected]
To unsubscribe send an email to [email protected]