Changeset: 40186bfc52e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/40186bfc52e9
Modified Files:
gdk/gdk_system.h
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/rel_physical.c
sql/backends/monet5/sql_optimizer.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_statistics.c
tools/mserver/mserver5.c
Branch: default
Log Message:
Put pipeline enabled flag in query context instead of debug flag.
This means, the pipeline is per session and not a global flag.
You can set a global default by using either the new --pipeline option
or by using -d$[1<<19] as before.
It is currently not possible to set or clear the flag per session since
there is no interface yet to do so.
The flag is called oahash_enabled and can be retrieved thus:
MT_thread_get_qry_ctx()->oahash_enabled, or if you have access to the
Client record (call it c) by using c->qryctx.oahash_enabled.
diffs (220 lines):
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -74,6 +74,7 @@ typedef struct QryCtx {
ATOMIC_TYPE datasize;
ATOMIC_BASE_TYPE maxmem;
allocator *errorallocator;
+ bool oahash_enabled;
} QryCtx;
gdk_export bool THRhighwater(void);
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -54,6 +54,7 @@
int MAL_MAXCLIENTS = 0;
ClientRec *mal_clients = NULL;
+bool default_oahash_enabled = false;
void
mal_client_reset(void)
@@ -256,6 +257,7 @@ MCinitClientRecord(Client c, oid user, b
ATOMIC_SET(&c->qryctx.datasize, 0);
c->qryctx.maxmem = 0;
c->maxmem = 0;
+ c->qryctx.oahash_enabled = default_oahash_enabled;
c->prompt = PROMPT1;
c->promptlength = strlen(c->prompt);
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -185,6 +185,7 @@ typedef struct CLIENT {
mal_export int MAL_MAXCLIENTS;
mal_export ClientRec *mal_clients;
+mal_export bool default_oahash_enabled;
mal_export Client MCgetClient(int id);
mal_export Client MCinitClient(oid user, bstream *fin, stream *fout);
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1802,7 +1802,6 @@ exp_bin(backend *be, sql_exp *e, stmt *l
if (strcmp(fname, "-1") == 0) /* map arguments to A0 ..
An */
return exp2bin_named_placeholders(be, e);
}
- const ATOMIC_BASE_TYPE oahash_enabled = (1U<<19);
if (f->pipeline && f->func->mod && f->func->imp &&
strcmp(f->func->mod, "sql") == 0 && strcmp(f->func->imp, "copy_from") == 0)
return exp2bin_copyparpipe(be, e);
if (!list_empty(exps)) {
@@ -1832,7 +1831,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
list_append(l, es);
}
}
- if (SQLrunning && (ATOMIC_GET(&GDKdebug) & oahash_enabled) &&
f->pipeline && f->func->mod && f->func->imp && strcmp(f->func->mod,
"generator") == 0 && strcmp(f->func->imp, "series") == 0)
+ if (SQLrunning && be->client->qryctx.oahash_enabled &&
f->pipeline && f->func->mod && f->func->imp && strcmp(f->func->mod,
"generator") == 0 && strcmp(f->func->imp, "series") == 0)
return exp2bin_generator(be, e, l);
if (!(s = stmt_Nop(be, stmt_list(be, l), sel, f, rows)))
return NULL;
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
@@ -426,8 +426,7 @@ rel_groupby_partition_safe(sql_rel *rel)
static int
do_oahash_join(visitor *v, sql_rel *rel, int *side)
{
- const ATOMIC_BASE_TYPE oahash_enabled = (1U<<19);
- if (!(ATOMIC_GET(&GDKdebug) & oahash_enabled))
+ if (!MT_thread_get_qry_ctx()->oahash_enabled)
return 0;
/* fetch join */
@@ -1652,8 +1651,7 @@ rel_rewrite_physical(visitor *v, sql_rel
if (rel)
rel = rel_push_down_topn(v, rel);
if (rel) { /* split equi-join/select */
- const ATOMIC_BASE_TYPE oahash_enabled = (1U<<19);
- if (SQLrunning && (ATOMIC_GET(&GDKdebug) & oahash_enabled)) {
+ if (SQLrunning && MT_thread_get_qry_ctx()->oahash_enabled) {
rel = rel_count_gt_zero(v, rel);
if (rel) /* Add a projection after each join,
needed for limited number of columns in hash tables */
rel = rel_add_project(v, rel);
@@ -1681,8 +1679,7 @@ rel_physical(mvc *sql, sql_rel *rel)
v.data = NULL;
if (!sql->recursive) {
- const ATOMIC_BASE_TYPE oahash_enabled = (1U<<19);
- if (!SQLrunning || !(ATOMIC_GET(&GDKdebug) & oahash_enabled) ||
gp.complex_modify || gp.cnt[op_except] || gp.cnt[op_inter]) {
+ if (!SQLrunning || !MT_thread_get_qry_ctx()->oahash_enabled ||
gp.complex_modify || gp.cnt[op_except] || gp.cnt[op_inter]) {
if (v.opt >= 0)
v.opt = rel->opt+1;
(void)rel_partition(&v, sql, rel);
diff --git a/sql/backends/monet5/sql_optimizer.c
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -136,8 +136,7 @@ addOptimizers(Client c, MalBlkPtr mb, co
be = (backend *) c->sqlcontext;
c->no_mitosis = be->no_mitosis;
- const ATOMIC_BASE_TYPE oahash_enabled = (1U<<19);
- if ((ATOMIC_GET(&GDKdebug) & oahash_enabled))
+ if (c->qryctx.oahash_enabled)
c->no_mitosis = 1;
assert(be && be->mvc); /* SQL clients should always have their state
set */
diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -3339,8 +3339,7 @@ rel_project_select_exp(visitor *v, sql_r
static sql_rel *
rel_optimize_projections_(visitor *v, sql_rel *rel)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
rel = rel_project_cse(v, rel);
rel = rel_project_select_exp(v, rel);
rel = rel_use_equality_exps(v, rel);
@@ -3516,8 +3515,7 @@ rel_merge_unions(visitor *v, sql_rel *re
static inline sql_rel *
rel_push_join_down_munion(visitor *v, sql_rel *rel)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
if (!oahash_enabled && ((is_join(rel->op) && !is_outerjoin(rel->op) &&
!is_single(rel)) || is_semi(rel->op))) {
sql_rel *l = rel->l, *r = rel->r, *ol = l, *or = r;
list *exps = rel->exps, *attr = rel->attr;
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -1761,8 +1761,7 @@ rel_join_use_fk(visitor *v, sql_rel *rel
static sql_rel *
rel_optimize_joins_topdown_(visitor *v, sql_rel *rel)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
if (oahash_enabled)
rel = transitivity_rule(v, rel);
rel = rel_join_use_fk(v, rel);
@@ -3361,8 +3360,7 @@ order_joins_bushy( visitor *v, list *rel
static sql_rel *
order_joins(visitor *v, list *rels, list *exps)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
sql_rel *top = NULL, *l = NULL, *r = NULL, *f = NULL;
sql_exp *cje;
node *djn;
@@ -3730,8 +3728,7 @@ static sql_rel *rel_join_order_(visitor
sql_rel *
reorder_join(visitor *v, sql_rel *rel)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
list *exps, *rels;
allocator *ta = MT_thread_getallocator();
@@ -3868,8 +3865,7 @@ rel_join_order(visitor *v, global_props
run_optimizer
bind_join_order(visitor *v, global_props *gp)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
int flag = v->sql->sql_optimizer;
return !oahash_enabled && gp->opt_level == 1 && gp->opt_cycle < 10 &&
!gp->cnt[op_update] && (gp->cnt[op_join] || gp->cnt[op_left] ||
gp->cnt[op_right] || gp->cnt[op_full]) && (flag & join_order) ?
rel_join_order : NULL;
diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -1302,8 +1302,7 @@ rel_get_statistics(visitor *v, global_pr
run_optimizer
bind_get_statistics(visitor *v, global_props *gp)
{
- const ATOMIC_BASE_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (ATOMIC_GET(&GDKdebug) & oahash_mask);
+ bool oahash_enabled = MT_thread_get_qry_ctx()->oahash_enabled;
(void) v;
return (!oahash_enabled && gp->opt_level == 1 /*&&
!gp->cnt[op_insert]*/) ? rel_get_statistics : NULL;
}
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -357,6 +357,7 @@ main(int argc, char **av)
{"loadmodule", required_argument, NULL, 0},
{"without-geom", no_argument, NULL, 0},
+ {"pipeline", no_argument, NULL, 0},
{"read-password-initialize-and-exit", no_argument, NULL, 0},
{"process-wal-and-exit", no_argument, NULL, 0},
@@ -535,6 +536,10 @@ main(int argc, char **av)
break;
}
/* debugging options */
+ if (strcmp(long_options[option_index].name, "pipeline")
== 0) {
+ default_oahash_enabled = true;
+ break;
+ }
if (strcmp(long_options[option_index].name,
"algorithms") == 0) {
grpdebug |= GRPalgorithms;
break;
@@ -677,6 +682,11 @@ main(int argc, char **av)
if (!(setlen = mo_system_config(&set, setlen)))
usage(prog, -1);
+ if (debug & (1U << 19)) {
+ debug &= ~(1U << 19);
+ default_oahash_enabled = true;
+ }
+
if (debug)
mo_print_options(set, setlen);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]