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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org