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

Reply via email to