Changeset: 5be57f80534e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5be57f80534e
Modified Files:
sql/server/rel_dump.c
sql/server/rel_optimizer.c
sql/server/rel_unnest.c
Branch: default
Log Message:
More missing processed flags
diffs (145 lines):
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
@@ -1945,6 +1945,7 @@ rel_read(mvc *sql, char *r, int *pos, li
return sql_error(sql, -1,
SQLSTATE(42000) "Table returning function: the number of output parameters
don't match the table ones relation outputs: %d != function outputs: %d\n",
list_length(outputs), list_length(sf->func->res));
rel = rel_table_func(sql->sa, lrel, tudf,
outputs, TABLE_FROM_RELATION);
+ set_processed(rel);
} else {
if (r[*pos] != ')')
sql_error(sql, -1, SQLSTATE(42000)
"Table: missing ')'\n");
@@ -1994,6 +1995,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos,
'[', 0, 1)))
return NULL;
rel = rel_topn(sql->sa, nrel, exps);
+ set_processed(rel);
}
break;
case 'p':
@@ -2015,12 +2017,11 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos, '[', 0,
1)))
return NULL;
rel = rel_project(sql->sa, nrel, exps);
+ set_processed(rel);
/* order by ? */
- if (r[*pos] == '[') {
- /* first projected expressions, then left relation
projections */
- if (!(rel->r = read_exps(sql, rel, nrel, NULL, r, pos,
'[', 0, 1)))
- return NULL;
- }
+ /* first projected expressions, then left relation projections
*/
+ if (r[*pos] == '[' && !(rel->r = read_exps(sql, rel, nrel,
NULL, r, pos, '[', 0, 1)))
+ return NULL;
break;
case 'g':
*pos += (int) strlen("group by");
@@ -2068,6 +2069,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos,
'[', 0, 1)))
return NULL;
rel = rel_sample(sql->sa, nrel, exps);
+ set_processed(rel);
} else if (r[*pos+2] == 'l') {
*pos += (int) strlen("select");
skipWS(r, pos);
@@ -2086,6 +2088,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, nrel, NULL, NULL, r, pos,
'[', 0, 1)))
return NULL;
rel = rel_select_copy(sql->sa, nrel, exps);
+ set_processed(rel);
/* semijoin or antijoin */
} else if (r[*pos+1] == 'e' || r[*pos+1] == 'n') {
if (r[*pos+1] == 'n') {
@@ -2234,9 +2237,9 @@ rel_read(mvc *sql, char *r, int *pos, li
return NULL;
rel = rel_project(sql->sa, NULL, exps);
/* order by ? */
- if (r[*pos] == '[')
- if (!(rel->r = read_exps(sql, NULL, rel, NULL, r, pos,
'[', 0, 1)))
- return NULL;
+ if (r[*pos] == '[' && !(rel->r = read_exps(sql, NULL, rel,
NULL, r, pos, '[', 0, 1)))
+ return NULL;
+ set_processed(rel);
break;
case 'd':
/* 'ddl' not supported */
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1816,6 +1816,7 @@ rel_push_topn_and_sample_down(visitor *v
x = x->l;
if (x && x->op != rel->op) { /* only push topn once */
ul = func(v->sql->sa, ul,
sum_limit_offset(v->sql, rel));
+ set_processed(ul);
u->l = ul;
changed = true;
}
@@ -1825,6 +1826,7 @@ rel_push_topn_and_sample_down(visitor *v
x = x->l;
if (x && x->op != rel->op) { /* only push topn once */
ur = func(v->sql->sa, ur,
sum_limit_offset(v->sql, rel));
+ set_processed(ur);
u->r = ur;
changed = true;
}
@@ -1878,6 +1880,7 @@ rel_push_topn_and_sample_down(visitor *v
ul->nrcols = list_length(ul->exps);
ul->r = exps_copy(v->sql, r->r);
ul = func(v->sql->sa, ul, sum_limit_offset(v->sql,
rel));
+ set_processed(ul);
ur = rel_project(v->sql->sa, ur, NULL);
ur->exps = exps_copy(v->sql, r->exps);
@@ -1886,6 +1889,7 @@ rel_push_topn_and_sample_down(visitor *v
ur->nrcols = list_length(ur->exps);
ur->r = exps_copy(v->sql, r->r);
ur = func(v->sql->sa, ur, sum_limit_offset(v->sql,
rel));
+ set_processed(ur);
u = rel_setop(v->sql->sa, ul, ur, op_union);
u->exps = exps_alias(v->sql, r->exps);
@@ -2323,8 +2327,10 @@ rel_distinct_project2groupby(visitor *v,
if (rel->op == op_project && rel->l && !rel->r /* no order by */ &&
need_distinct(rel) &&
exps_card(rel->exps) <= CARD_ATOM) {
set_nodistinct(rel);
- if (rel->card > CARD_ATOM) /* if the projection just contains
constants, then no topN is needed */
- rel->l = rel_topn(v->sql->sa, rel->l,
append(sa_list(v->sql->sa), exp_atom_lng(v->sql->sa, 1)));
+ if (rel->card > CARD_ATOM) { /* if the projection just contains
constants, then no topN is needed */
+ sql_rel *nl = rel->l = rel_topn(v->sql->sa, rel->l,
append(sa_list(v->sql->sa), exp_atom_lng(v->sql->sa, 1)));
+ set_processed(nl);
+ }
v->changes++;
}
@@ -5515,8 +5521,10 @@ rel_push_project_down_union(visitor *v,
/* first remove distinct if already unique */
if (rel->op == op_project && need_distinct(rel) && rel->exps &&
exps_unique(v->sql, rel, rel->exps) && !have_nil(rel->exps)) {
set_nodistinct(rel);
- if (exps_card(rel->exps) <= CARD_ATOM && rel->card > CARD_ATOM)
/* if the projection just contains constants, then no topN is needed */
- rel->l = rel_topn(v->sql->sa, rel->l,
append(sa_list(v->sql->sa), exp_atom_lng(v->sql->sa, 1)));
+ if (exps_card(rel->exps) <= CARD_ATOM && rel->card > CARD_ATOM)
{ /* if the projection just contains constants, then no topN is needed */
+ sql_rel *nl = rel->l = rel_topn(v->sql->sa, rel->l,
append(sa_list(v->sql->sa), exp_atom_lng(v->sql->sa, 1)));
+ set_processed(nl);
+ }
v->changes++;
}
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -1018,6 +1018,7 @@ push_up_topn_and_sample(mvc *sql, sql_re
sql_rel *(*func) (sql_allocator *, sql_rel *, list *) =
is_topn(r->op) ? rel_topn : rel_sample;
rel->r = rel_dup(r->l);
rel = func(sql->sa, rel, r->exps);
+ set_processed(rel);
rel_destroy(r);
return rel;
}
@@ -2349,6 +2350,7 @@ rewrite_split_select_exps(visitor *v, sq
n = nxt;
i++;
}
+ set_processed(nsel);
v->changes++;
}
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]