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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org