Changeset: 2a3653df8538 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2a3653df8538
Modified Files:
sql/backends/monet5/rel_physical.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
tools/monetdbe/monetdbe.c
tools/monetdbe/monetdbe.h
Branch: default
Log Message:
keep information that the client doesn't have int128.
if so, downcast the 128 bit results in the rel_physical optimizer step
diffs (71 lines):
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/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, sql_allocat
}
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/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -588,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;
diff --git a/tools/monetdbe/monetdbe.h b/tools/monetdbe/monetdbe.h
--- a/tools/monetdbe/monetdbe.h
+++ b/tools/monetdbe/monetdbe.h
@@ -117,6 +117,7 @@ typedef struct {
int querytimeout; // graceful terminate query after a few seconds
int sessiontimeout; // graceful terminate the session after a few
seconds
int nr_threads; // maximum number of worker treads, limits level of
parallelism
+ bool no_int128; // client has no int128 support
monetdbe_remote* remote;
monetdbe_mapi_server* mapi_server;
const char *trace_file; // file to which log output should be
written
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]