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]