Changeset: 2133f3a8f48c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2133f3a8f48c
Modified Files:
monetdb5/optimizer/opt_support.c
sql/server/rel_exp.c
sql/server/rel_rel.c
sql/server/rel_select.c
sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
Branch: sq2
Log Message:
cleanup
diffs (truncated from 735 to 300 lines):
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -345,7 +345,6 @@ safetyBarrier(InstrPtr p, InstrPtr q)
return FALSE;
}
-
int
isUpdateInstruction(InstrPtr p){
if ( getModuleId(p) == sqlRef &&
@@ -364,6 +363,7 @@ isUpdateInstruction(InstrPtr p){
return TRUE;
return FALSE;
}
+
int
hasSideEffects(MalBlkPtr mb, InstrPtr p, int strict)
{
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
@@ -222,8 +222,10 @@ exp_op( sql_allocator *sa, list *l, sql_
e->card = exps_card(l);
if (!l || list_length(l) == 0)
e->card = CARD_ATOM; /* unop returns a single atom */
+ /*
if (f->func->side_effect)
e->card = CARD_MULTI;
+ */
e->l = l;
e->f = f;
return e;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -851,9 +851,7 @@ rel_groupby(mvc *sql, sql_rel *l, list *
append(aggrs, ne);
}
}
-#if 0
-#endif
rel->l = l;
rel->r = groupbyexps;
rel->exps = aggrs;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -42,14 +42,8 @@ rel_table_projections( mvc *sql, sql_rel
if (!rel)
return NULL;
- if (!tname) {
- //if ((is_project(rel->op) || rel->op == op_select ||
is_semi(rel->op)) && rel->l)
- //if (!is_base(rel->op) && is_base(rel->op))
- return _rel_projections(sql, rel, NULL, 1, 0, 1);
- //else
- //return NULL;
- /* return rel_projections(sql, rel, NULL, 1, 0); */
- }
+ if (!tname)
+ return _rel_projections(sql, rel, NULL, 1, 0, 1);
switch(rel->op) {
case op_join:
@@ -187,74 +181,6 @@ rel_find_lastexp(sql_rel *rel )
return rel->exps->t->data;
}
-#if 0
-static sql_rel*
-rel_project2groupby(mvc *sql, sql_rel *g)
-{
- if (g->op == op_project) {
- node *en;
-
- reset_processed(g);
- if (!g->exps)
- g->exps = new_exp_list(sql->sa);
- for (en = g->exps->h; en; en = en->next) {
- sql_exp *e = en->data;
-
- if (e->card > CARD_ATOM) {
- if (e->type == e_column && e->r) {
- return sql_error(sql, 02,
SQLSTATE(42000) "Cannot use non GROUP BY column '%s' in query results without
an aggregate function", (char *) e->r);
- } else {
- return sql_error(sql, 02,
SQLSTATE(42000) "Cannot use non GROUP BY column in query results without an
aggregate function");
- }
- }
- }
- g->card = CARD_ATOM; /* no groupby expressions */
- g->op = op_groupby;
- g->r = new_exp_list(sql->sa); /* add empty groupby column list
*/
- g = rel_project(sql->sa, g, rel_projections(sql, g, NULL, 1,
1));
- reset_processed(g);
- return g;
- }
- return NULL;
-}
-
-static sql_rel*
-revert_project2groupby(sql_rel *p)
-{
- /* change too recusive find project/groupby */
- if (p && p->op == op_project) {
- sql_rel *g = p->l;
-
- if (g->op == op_groupby) {
- sql_rel *l = g->l;
- g->r = NULL;
- g->op = op_project;
- if (l)
- g->card = l->card;
- return g;
- }
- }
- return p;
-}
-
-static void
-rel_intermediates_add_exp(mvc *sql, sql_rel *p, sql_rel *op, sql_exp *in)
-{
- while(op && p != op) {
- sql_rel *pp = op;
-
- while(pp->l && pp->l != p)
- pp = pp->l;
- if (pp && pp->l == p && pp->op == op_project) {
- in = exp_ref(sql->sa, in);
- in = rel_project_add_exp(sql, pp, in);
- }
- p = pp;
- }
-}
-
-#endif
-
static sql_rel *
rel_orderby(mvc *sql, sql_rel *l)
{
@@ -960,7 +886,6 @@ table_ref(sql_query *query, sql_rel *rel
/* Rename columns of the rel_parse relation */
if (sql->emode != m_deps) {
assert(is_project(rel->op));
- //rel = rel_project(sql->sa, rel,
rel_projections(sql, rel, NULL, 1, 1));
if (!rel)
return NULL;
set_processed(rel);
@@ -1989,9 +1914,6 @@ rel_compare(sql_query *query, sql_rel *r
a =
sql_bind_aggr(sql->sa, sql->session->schema, "all", exp_subtype(rs));
rs = exp_aggr1(sql->sa, rs, a,
0, 1, CARD_ATOM, 0);
- //if (quantifier == 2 &&
(compare_op[0] == '<' || compare_op[0] == '>'))
- /* do not skip nulls in
case of >,>=,<=,< */
- //append(rs1->l,
exp_atom_bool(sql->sa, 0));
rs = rel_groupby_add_aggr(sql,
r, rs);
} else if (r->card > CARD_ATOM) {
sql_subaggr *zero_or_one =
sql_bind_aggr(sql->sa, sql->session->schema, compare_aggr_op(compare_op,
quantifier), exp_subtype(rs));
@@ -2002,15 +1924,6 @@ rel_compare(sql_query *query, sql_rel *r
rs = rel_groupby_add_aggr(sql,
r, rs);
}
}
- /*
- if (is_sql_sel(f) && r->card > CARD_ATOM &&
quantifier != 1) {
- sql_subaggr *zero_or_one =
sql_bind_aggr(sql->sa, sql->session->schema, compare_aggr_op(compare_op,
quantifier), exp_subtype(rs));
- rs = exp_aggr1(sql->sa, rs,
zero_or_one, 0, 0, CARD_ATOM, 0);
-
- r->r = rel_groupby(sql, r->r, NULL);
- rs = rel_groupby_add_aggr(sql, r->r,
rs);
- }
- */
if (rel) {
rel = rel_crossproduct(sql->sa, rel, r,
(!quantifier)?op_semi:op_join);
set_dependent(rel);
@@ -2045,9 +1958,6 @@ rel_compare(sql_query *query, sql_rel *r
a = sql_bind_aggr(sql->sa,
sql->session->schema, "all", exp_subtype(rs));
rs = exp_aggr1(sql->sa, rs, a, 0, 1,
CARD_ATOM, 0);
- //if (quantifier == 2 && (compare_op[0]
== '<' || compare_op[0] == '>'))
- /* do not skip nulls in case of
>,>=,<=,< */
- //append(rs1->l,
exp_atom_bool(sql->sa, 0));
rs = rel_groupby_add_aggr(sql, r, rs);
} else if (r->card > CARD_ATOM) {
sql_subaggr *zero_or_one =
sql_bind_aggr(sql->sa, sql->session->schema, compare_aggr_op(compare_op,
quantifier), exp_subtype(rs));
@@ -2262,7 +2172,6 @@ rel_in_value_exp(sql_query *query, sql_r
exps = rel_projections(sql, left, NULL, 1/*keep
names */, 1);
left = rel_add_identity(sql, left, &id);
- //reset_processed(left);
id = exp_ref(sql->sa, id);
left = rel_crossproduct(sql->sa, left, z,
is_sql_sel(f)?op_left:op_join);
if (!l_is_value || rel_has_freevar(sql, z))
@@ -2279,19 +2188,8 @@ rel_in_value_exp(sql_query *query, sql_r
if (!is_sql_sel(f))
set_intern(a);
r = rel_groupby_add_aggr(sql, left, a);
-
- if (is_sql_sel(f)) {
- /*
- if (pexps)
- left = rel_project(sql->sa,
left, pexps);
- */
+ if (is_sql_sel(f))
reset_processed(left);
-#if 0
- /* value exp ie no select */
- } else {
- left = rel_select(sql->sa, left, r);
-#endif
- }
*rel = left;
return r;
}
@@ -2304,10 +2202,6 @@ rel_in_value_exp(sql_query *query, sql_r
query_push_outer(query, left, f);
r = rel_value_exp(query, &z, n->data.sym, f /*
ie no result project */, ek);
left = query_pop_outer(query);
- /*
- if (z)
- r = rel_lastexp(sql, z);
- */
if (z && r) {
sql_subaggr *ea = NULL;
sql_exp *a, *id, *tid;
@@ -2315,7 +2209,6 @@ rel_in_value_exp(sql_query *query, sql_r
exps = rel_projections(sql, left, NULL,
1/*keep names */, 1);
left = rel_add_identity(sql, left, &id);
- //reset_processed(left);
id = exp_ref(sql->sa, id);
z = rel_add_identity2(sql, z, &tid);
tid = exp_ref(sql->sa, tid);
@@ -2334,10 +2227,8 @@ rel_in_value_exp(sql_query *query, sql_r
r = rel_groupby_add_aggr(sql, left, a);
if (is_sql_sel(f) && pexps) {
- //left = rel_project(sql->sa,
left, pexps);
reset_processed(left);
} else if (!is_sql_sel(f) &&
!is_sql_having(f)){
- //rel_join_add_exp(sql->sa,
left, r);
r = exp_compare(sql->sa, r,
exp_atom_bool(sql->sa, 1), cmp_equal);
if (!is_select(left->op) ||
rel_is_ref(left))
left =
rel_select(sql->sa, left, r);
@@ -2443,7 +2334,7 @@ rel_exists_value_exp(sql_query *query, s
exp_kind ek = {type_value, card_column, FALSE};
symbol *lo = sc->data.sym;
- sql_rel *orel = *rel, *sq = NULL, *nrel;
+ sql_rel *orel = *rel, *sq = NULL;
list *pexps = NULL;
int needproj = 0, exists=(sc->token == SQL_EXISTS), is_value =
is_sql_sel(f);
sql_exp *le;
@@ -2455,17 +2346,6 @@ rel_exists_value_exp(sql_query *query, s
if ((!orel || (is_project(orel->op) && !is_processed(orel) && !orel->l
&& list_empty(orel->exps))) && !query_has_outer(query))
orel = *rel = rel_project_exp(sql->sa, exp_atom_bool(sql->sa,
1));
ek.card = card_set;
- if (0 && is_value && orel && is_project(orel->op) &&
!is_processed(orel)) {
- needproj = 1;
- pexps = orel->exps;
- *rel = orel->l;
- }
- nrel=*rel;
- /* we need a project */
- if (0 && is_sql_sel(f) && !is_simple_project(nrel->op)) {
- *rel = nrel = rel_project(sql->sa, nrel, sa_list(sql->sa));
- reset_processed(nrel);
- }
le = rel_value_exp(query, &sq, lo, f, ek);
if (!le && sql->session->status != -ERR_AMBIGUOUS) { /* correlated */
@@ -2483,14 +2363,8 @@ rel_exists_value_exp(sql_query *query, s
if (!sq)
return NULL;
-// if (*rel != orel) { /* remove project */
-// orel->l = NULL;
-// rel_destroy(orel);
-// }
-
- //le = rel_lastexp(sql, sq);
le = _rel_lastexp(sql, sq);
- if (is_value /*is_sql_sel(f)*/ && is_freevar(lastexp(sq))) {
+ if (is_value && is_freevar(lastexp(sq))) {
sql_exp *re, *jc, *null;
re = rel_bound_exp(sql, sq);
@@ -2693,20 +2567,9 @@ rel_logical_value_exp(sql_query *query,
/* correlation, ie return new relation */
if (!r && sql->session->status != -ERR_AMBIGUOUS) {
sql_rel *left = *rel;
- /*
- sql_rel *outerp = NULL;
-
- if (*rel && is_sql_sel(f) &&
is_project((*rel)->op) && !is_processed((*rel))) {
- outerp = *rel;
- *rel = (*rel)->l;
- }
- */
if (!*rel)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list