Changeset: 255c4238bca1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/255c4238bca1
Modified Files:
        sql/server/rel_optimizer.h
        sql/server/sql_env.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_var.c
Branch: sqloptimizer
Log Message:

Introduce new session variable to enable/disable SQL optimizers


diffs (93 lines):

diff --git a/sql/server/rel_optimizer.h b/sql/server/rel_optimizer.h
--- a/sql/server/rel_optimizer.h
+++ b/sql/server/rel_optimizer.h
@@ -12,6 +12,18 @@
 #include "sql_relation.h"
 #include "sql_mvc.h"
 
+#define NOPTIMIZERS 24
+
+typedef struct {
+       int nchanges;
+       lng time;
+} sql_optimizer_run;
+
+typedef struct {
+       sql_optimizer_run optimizers[NOPTIMIZERS];
+       sql_rel *rel;
+} sql_optimized_query;
+
 extern sql_rel *rel_optimizer(mvc *sql, sql_rel *rel, int instantiate, int 
value_based_opt, int storage_based_opt);
 
 extern int exp_joins_rels(sql_exp *e, list *rels);
diff --git a/sql/server/sql_env.c b/sql/server/sql_env.c
--- a/sql/server/sql_env.c
+++ b/sql/server/sql_env.c
@@ -50,7 +50,7 @@ str
 sql_update_var(mvc *m, sql_schema *s, const char *name, ValPtr ptr)
 {
        if (strcmp(s->base.name, "sys") == 0) {
-               if (strcmp(name, "debug") == 0 || strcmp(name, 
"current_timezone") == 0) {
+               if (strcmp(name, "debug") == 0 || strcmp(name, 
"current_timezone") == 0 || strcmp(name, "sql_optimizer") == 0) {
                        VAR_UPCAST sgn = val_get_number(ptr);
 
                        if (VALisnil(ptr))
@@ -60,10 +60,13 @@ sql_update_var(mvc *m, sql_schema *s, co
                        if (sgn > (VAR_UPCAST) GDK_int_max)
                                throw(SQL,"sql.update_var", SQLSTATE(42000) 
"Value too large for '%s.%s'\n", s->base.name, name);
 
-                       if (/* DISABLES CODE */ (0) && strcmp(name, "debug") == 
0)
+                       if (/* DISABLES CODE */ (0) && strcmp(name, "debug") == 
0) {
                                m->debug = (int) sgn;
-                       else if (strcmp(name, "current_timezone") == 0)
+                       } else if (strcmp(name, "current_timezone") == 0) {
                                m->timezone = (int) sgn;
+                       } else {
+                               m->sql_optimizer = (int) sgn;
+                       }
                } else if (strcmp(name, "current_schema") == 0 || strcmp(name, 
"current_role") == 0) {
                        if (VALisnil(ptr))
                                throw(SQL,"sql.update_var", SQLSTATE(42000) 
"Variable '%s.%s' cannot be NULL\n", s->base.name, name);
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
@@ -784,6 +784,7 @@ mvc_create(sql_store *store, sql_allocat
 
        m->role_id = m->user_id = -1;
        m->timezone = 0;
+       m->sql_optimizer = 0;
        m->clientid = clientid;
 
        m->emode = m_normal;
@@ -866,6 +867,9 @@ mvc_reset(mvc *m, bstream *rs, stream *w
        if (m->timezone != 0)
                sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), 
"current_timezone"), 0);
        m->timezone = 0;
+       if (m->sql_optimizer != 0)
+               sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), 
"sql_optimizer"), 0);
+       m->sql_optimizer = 0;
        if (m->debug != debug)
                sqlvar_set_number(find_global_var(m, mvc_bind_schema(m, "sys"), 
"debug"), debug);
        m->debug = debug;
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
@@ -133,6 +133,7 @@ typedef struct mvc {
        int timezone;           /* milliseconds west of UTC */
        int reply_size;         /* reply size */
        int debug;
+       int sql_optimizer; /* SQL optimizer mask */
 
        char emode;             /* execution mode */
        char emod;              /* execution modifier */
diff --git a/sql/server/sql_var.c b/sql/server/sql_var.c
--- a/sql/server/sql_var.c
+++ b/sql/server/sql_var.c
@@ -55,6 +55,7 @@ init_global_variables(mvc *sql)
 
        sql_find_subtype(&ctype, "int", 0, 0);
        SQLglobal(sname, "debug", &sql->debug);
+       SQLglobal(sname, "sql_optimizer", &sql->sql_optimizer);
 
        sql_find_subtype(&ctype,  "varchar", 1024, 0);
        SQLglobal(sname, "current_schema", sname);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to