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

Reply via email to