Changeset: b5aafce4d16e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b5aafce4d16e
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/include/sql_relation.h
sql/server/rel_distribute.c
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/rel_optimize_others.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_optimizer.c
sql/server/rel_partition.c
sql/server/rel_propagate.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_rewriter.c
sql/server/rel_select.c
sql/server/rel_statistics.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/server/sql_partition.c
Branch: nested
Log Message:
merged with default
diffs (truncated from 1215 to 300 lines):
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
@@ -2882,7 +2882,6 @@ rel2bin_args(backend *be, sql_rel *rel,
case op_semi:
case op_anti:
- case op_union:
case op_inter:
case op_except:
case op_merge:
@@ -4789,52 +4788,6 @@ rel2bin_munion(backend *be, sql_rel *rel
}
static stmt *
-rel2bin_union(backend *be, sql_rel *rel, list *refs)
-{
- mvc *sql = be->mvc;
- list *l;
- node *n, *m;
- stmt *left = NULL, *right = NULL, *sub;
-
- if (rel->l) /* first construct the left sub relation */
- left = subrel_bin(be, rel->l, refs);
- if (rel->r) /* first construct the right sub relation */
- right = subrel_bin(be, rel->r, refs);
- left = subrel_project(be, left, refs, rel->l);
- right = subrel_project(be, right, refs, rel->r);
- if (!left || !right)
- return NULL;
-
- /* construct relation */
- l = sa_list(sql->sa);
- for (n = left->op4.lval->h, m = right->op4.lval->h; n && m;
- n = n->next, m = m->next) {
- stmt *c1 = n->data;
- assert(c1->type == st_alias);
- stmt *c2 = m->data;
- sql_alias *rnme = table_name(sql->sa, c1);
- const char *nme = column_name(sql->sa, c1);
- stmt *s;
-
- s = stmt_append(be, create_const_column(be, c1, NULL), c2);
- if (s == NULL)
- return NULL;
- s = stmt_alias(be, s, c1->label, rnme, nme);
- if (s == NULL)
- return NULL;
- list_append(l, s);
- }
- sub = stmt_list(be, l);
-
- sub = rel_rename(be, rel, sub);
- if (need_distinct(rel))
- sub = rel2bin_distinct(be, sub, NULL);
- if (is_single(rel))
- sub = rel2bin_single(be, sub);
- return sub;
-}
-
-static stmt *
rel2bin_except(backend *be, sql_rel *rel, list *refs)
{
mvc *sql = be->mvc;
@@ -8614,10 +8567,6 @@ subrel_bin(backend *be, sql_rel *rel, li
s = rel2bin_antijoin(be, rel, refs);
sql->type = Q_TABLE;
break;
- case op_union:
- s = rel2bin_union(be, rel, refs);
- sql->type = Q_TABLE;
- break;
case op_munion:
s = rel2bin_munion(be, rel, refs);
sql->type = Q_TABLE;
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -4713,7 +4713,7 @@ stmt_direct_func(backend *be, InstrPtr q
if(!s) {
return NULL;
}
- s->flag = op_union;
+ s->flag = op_munion;
s->nrcols = 3;
s->nr = getDestVar(q);
s->q = q;
diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h
--- a/sql/include/sql_relation.h
+++ b/sql/include/sql_relation.h
@@ -166,7 +166,6 @@ typedef enum operator_type {
op_full,
op_semi,
op_anti,
- op_union,
op_munion,
op_inter,
op_except,
@@ -207,9 +206,8 @@ typedef enum operator_type {
#define is_semi(op) (op == op_semi || op == op_anti)
#define is_joinop(op) (is_join(op) || is_semi(op))
#define is_select(op) (op == op_select)
-#define is_set(op) (op == op_union || op == op_inter || op
== op_except)
+#define is_set(op) (op == op_inter || op == op_except)
#define is_mset(op) (op == op_munion || op == op_inter || op ==
op_except)
-#define is_union(op) (op == op_union)
#define is_inter(op) (op == op_inter)
#define is_except(op) (op == op_except)
#define is_munion(op) (op == op_munion)
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -72,7 +72,6 @@ has_remote_or_replica( sql_rel *rel )
case op_semi:
case op_anti:
- case op_union:
case op_inter:
case op_except:
case op_merge:
@@ -405,7 +404,6 @@ rel_rewrite_remote_(visitor *v, sql_rel
case op_semi:
case op_anti:
- case op_union:
case op_inter:
case op_except:
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -567,7 +567,6 @@ rel_print_rel(mvc *sql, stream *fout, s
case op_full:
case op_semi:
case op_anti:
- case op_union:
case op_inter:
case op_except:
r = "join";
@@ -581,8 +580,6 @@ rel_print_rel(mvc *sql, stream *fout, s
r = "semijoin";
else if (rel->op == op_anti)
r = "antijoin";
- else if (rel->op == op_union)
- r = "union";
else if (rel->op == op_inter)
r = "intersect";
else if (rel->op == op_except)
@@ -778,7 +775,6 @@ rel_print_refs(mvc *sql, stream* fout, s
case op_full:
case op_semi:
case op_anti:
- case op_union:
case op_inter:
case op_except:
if (rel->l)
@@ -2522,12 +2518,6 @@ rel_read(mvc *sql, char *r, int *pos, li
j = op_munion;
}
/* fall through */
- case 'u':
- if (j == op_basetable) {
- *pos += (int) strlen("union");
- j = op_union;
- }
- /* fall through */
case 'i':
if (j == op_basetable) {
*pos += (int) strlen("intersect");
@@ -2585,7 +2575,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return sql_error(sql, -1, SQLSTATE(42000)
"Setop: number of expressions don't match\n");
} else {
rel = rel_setop(sql->sa, lrel, rrel, j);
- rel_setop_set_exps(sql, rel, exps, false);
+ rel_setop_set_exps(sql, rel, exps);
if (rel_set_types(sql, rel) < 0)
return sql_error(sql, -1, SQLSTATE(42000)
"Setop: number of expressions don't match\n");
}
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1998,7 +1998,6 @@ rel_find_nid(sql_rel *rel, int nid)
case op_table:
case op_basetable:
case op_munion:
- case op_union:
case op_inter:
case op_except:
case op_project:
@@ -4097,7 +4096,6 @@ rel_find_parameter(mvc *sql, sql_subtype
if (rel->l)
res = rel_find_parameter(sql, type, rel->l,
nid, nrname, nename);
break;
- case op_union: /* TODO for set relations this needs further
improvement */
case op_inter:
case op_except:
case op_munion: {
diff --git a/sql/server/rel_optimize_others.c b/sql/server/rel_optimize_others.c
--- a/sql/server/rel_optimize_others.c
+++ b/sql/server/rel_optimize_others.c
@@ -625,7 +625,6 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
}
break;
- case op_union:
case op_inter:
case op_except:
/* For now we mark all union expression as used */
@@ -660,7 +659,6 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
case op_munion:
assert(rel->l);
- // TODO: here we blindly follow the same logic as op_union.
RE-evaluate
if (proj && (need_distinct(rel) || !rel->exps)) {
rel_used(rel);
if (!rel->exps) {
@@ -800,7 +798,6 @@ rel_remove_unused(mvc *sql, sql_rel *rel
}
return rel;
- case op_union:
case op_inter:
case op_except:
case op_munion:
@@ -861,7 +858,6 @@ rel_dce_refs(mvc *sql, sql_rel *rel, lis
rel_dce_refs(sql, rel->r, refs);
break;
- case op_union:
case op_inter:
case op_except:
case op_join:
@@ -946,7 +942,6 @@ rel_dce_down(mvc *sql, sql_rel *rel, int
rel_dce_sub(sql, rel);
return rel;
- case op_union:
case op_inter:
case op_except:
if (skip_proj) {
@@ -1025,6 +1020,15 @@ rel_dce_sub(mvc *sql, sql_rel *rel)
return rel;
}
+/*
+sql_rel *
+rel_deadcode_elimination(mvc *sql, sql_rel *rel)
+{
+ rel_used(rel);
+ return rel_dce_sub(sql, rel);
+}
+*/
+
/* add projects under set ops */
static sql_rel *
rel_add_projects(mvc *sql, sql_rel *rel)
@@ -1042,7 +1046,6 @@ rel_add_projects(mvc *sql, sql_rel *rel)
if (rel->r)
rel->r = rel_add_projects(sql, rel->r);
return rel;
- case op_union:
case op_inter:
case op_except:
/* We can only reduce the list of expressions of an set op
@@ -1305,8 +1308,8 @@ rel_push_topn_and_sample_down_(visitor *
if (!topn_sample_safe_exps(rel->exps, false))
return rel;
- /* duplicate topn/sample direct under union or crossproduct */
- if (r && !rel_is_ref(r) && r->l && r->r && ((is_union(r->op) &&
r->exps) || (r->op == op_join && list_empty(r->exps)))) {
+ /* duplicate topn/sample direct under crossproduct */
+ if (r && !rel_is_ref(r) && r->l && r->r && r->op == op_join &&
list_empty(r->exps)) {
sql_rel *u = r, *x;
sql_rel *ul = u->l;
sql_rel *ur = u->r;
@@ -1337,24 +1340,46 @@ rel_push_topn_and_sample_down_(visitor *
return rel;
}
+ /* duplicate topn/sample direct under union */
+ if (r && !rel_is_ref(r) && r->l && r->r && is_munion(r->op) &&
r->exps) {
+ list *rels = r->l;
+ bool changed = false;
+ for(node *n = rels->h; n; n = n->next) {
+ sql_rel *ue = n->data, *x;
+
+ x = ue;
+ while (is_simple_project(x->op) &&
!need_distinct(x) && !rel_is_ref(x) && x->l && list_empty(x->r))
+ x = x->l;
+ if (x && x->op != rel->op) { /* only push topn
once */
+ ue = func(v->sql->sa, ue,
sum_limit_offset(v->sql, rel));
+ set_processed(ue);
+ n->data = ue;
+ changed = true;
+ }
+ }
+ if (changed)
+ v->changes++;
+ return rel;
+ }
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]