Changeset: 24adc5a35ab0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/24adc5a35ab0
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/merge-partitions/Tests/mergepart31.test
        sql/test/mergetables/Tests/mergequery.test
        sql/test/miscellaneous/Tests/simple_selects.test
        sql/test/prepare/Tests/sqlancer_prepare.stable.out
        sql/test/prepare/Tests/sqlancer_prepare.stable.out.int128
        sql/test/prepare/Tests/subquery_prepare.stable.out
        sql/test/sys-schema/Tests/webExamplesComparisonFunctionsOperators.test
        sql/test/sys-schema/Tests/webExamplesLogicalFunctionsOperators.test
        sql/test/sys-schema/Tests/webExamplesMathematicalFunctionsOperators.test
Branch: Jan2022
Log Message:

When generating dummy projections, make sure a label is added on the boolean 
expression


diffs (truncated from 601 to 300 lines):

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
@@ -8925,7 +8925,7 @@ merge_table_prune_and_unionize(visitor *
        }
        if (list_empty(tables)) { /* No table passed the predicates, generate 
dummy relation */
                list *converted = sa_list(v->sql->sa);
-               nrel = rel_project(v->sql->sa, NULL, 
list_append(sa_list(v->sql->sa), exp_atom_bool(v->sql->sa, 1)));
+               nrel = rel_project_exp(v->sql, exp_atom_bool(v->sql->sa, 1));
                nrel = rel_select(v->sql->sa, nrel, exp_atom_bool(v->sql->sa, 
0));
 
                for (node *n = mt_rel->exps->h ; n ; n = n->next) {
@@ -9324,7 +9324,7 @@ rel_remove_union_partitions(visitor *v, 
        if (left_zero_rows && right_zero_rows) {
                /* generate dummy relation */
                list *converted = sa_list(v->sql->sa);
-               sql_rel *nrel = rel_project(v->sql->sa, NULL, 
list_append(sa_list(v->sql->sa), exp_atom_bool(v->sql->sa, 1)));
+               sql_rel *nrel = rel_project_exp(v->sql, 
exp_atom_bool(v->sql->sa, 1));
                nrel = rel_select(v->sql->sa, nrel, exp_atom_bool(v->sql->sa, 
0));
 
                for (node *n = rel->exps->h ; n ; n = n->next) {
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
@@ -875,12 +875,12 @@ rel_project(sql_allocator *sa, sql_rel *
        return rel;
 }
 
-sql_rel*
-rel_project_exp(sql_allocator *sa, sql_exp *e)
+sql_rel *
+rel_project_exp(mvc *sql, sql_exp *e)
 {
-       sql_rel *rel = rel_project(sa, NULL, append(new_exp_list(sa), e));
-
-       return rel;
+       if (!exp_name(e))
+               exp_label(sql->sa, e, ++sql->label);
+       return rel_project(sql->sa, NULL, list_append(sa_list(sql->sa), e));
 }
 
 sql_rel *
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -91,7 +91,7 @@ extern sql_exp *rel_groupby_add_aggr(mvc
 extern sql_rel *rel_select(sql_allocator *sa, sql_rel *l, sql_exp *e);
 extern sql_rel *rel_groupby(mvc *sql, sql_rel *l, list *groupbyexps );
 sql_export sql_rel *rel_project(sql_allocator *sa, sql_rel *l, list *e);
-extern sql_rel *rel_project_exp(sql_allocator *sa, sql_exp *e);
+extern sql_rel *rel_project_exp(mvc *sql, sql_exp *e);
 extern sql_rel *rel_exception(sql_allocator *sa, sql_rel *l, sql_rel *r, list 
*exps);
 
 extern sql_rel *rel_relational_func(sql_allocator *sa, sql_rel *l, list *exps);
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
@@ -1638,7 +1638,7 @@ rel_compare_exp_(sql_query *query, sql_r
                set_anti(e);
 
        if (!rel)
-               return rel_select(sql->sa, rel_project_exp(sql->sa, 
exp_atom_bool(sql->sa, 1)), e);
+               return rel_select(sql->sa, rel_project_exp(sql, 
exp_atom_bool(sql->sa, 1)), e);
 
        /* atom or row => select */
        if (ls->card > rel->card || rs->card > rel->card || (rs2 && rs2->card > 
rel->card)) {
@@ -5650,7 +5650,7 @@ rel_select_exp(sql_query *query, sql_rel
                return sql_error(sql, 02, SQLSTATE(42000) "SELECT: the 
selection or from part is missing");
 
        if (!rel)
-               rel = rel_project(sql->sa, NULL, append(new_exp_list(sql->sa), 
exp_atom_bool(sql->sa, 1)));
+               rel = rel_project_exp(sql, exp_atom_bool(sql->sa, 1));
        rel = rel_where_groupby_nodes(query, rel, sn, &group_totals);
        if (sql->session->status) /* rel might be NULL as input, so we have to 
check for the session status for errors */
                return NULL;
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
@@ -1661,8 +1661,11 @@ rewrite_inner(mvc *sql, sql_rel *rel, sq
                        set_single(d);
        } else if (is_project(rel->op)){ /* projection -> op_left */
                if (rel->l || single || op == op_left) {
-                       if ((single || op == op_left) && !rel->l)
-                               rel->l = rel_project(sql->sa, rel->l, 
append(sa_list(sql->sa), exp_atom_bool(sql->sa, 1)));
+                       if ((single || op == op_left) && !rel->l) {
+                               sql_exp *e = exp_atom_bool(sql->sa, 1);
+                               exp_label(sql->sa, e, ++sql->label);
+                               rel->l = rel_project(sql->sa, rel->l, 
list_append(sa_list(sql->sa), e));
+                       }
                        d = rel->l = rel_crossproduct(sql->sa, rel->l, inner, 
op_left);
                        if (single)
                                set_single(d);
@@ -1696,7 +1699,7 @@ rewrite_exp_rel(visitor *v, sql_rel *rel
                sql_rel *inner = exp_rel_get_rel(v->sql->sa, e);
                if (is_single(inner)) {
                        /* use a dummy projection for the single join */
-                       sql_rel *nrel = rel_project(v->sql->sa, NULL, 
append(sa_list(v->sql->sa), exp_atom_bool(v->sql->sa, 1)));
+                       sql_rel *nrel = rel_project_exp(v->sql, 
exp_atom_bool(v->sql->sa, 1));
 
                        if (!rewrite_inner(v->sql, nrel, inner, 
depth?op_left:op_join, NULL))
                                return NULL;
@@ -1731,12 +1734,12 @@ rewrite_exp_rel(visitor *v, sql_rel *rel
 static inline sql_rel *
 rewrite_empty_project(visitor *v, sql_rel *rel)
 {
-       if (is_simple_project(rel->op) && list_empty(rel->exps)) {
+       if ((is_simple_project(rel->op) || is_groupby(rel->op)) && 
list_empty(rel->exps)) {
+               sql_exp *e = exp_atom_bool(v->sql->sa, 1);
+
+               exp_label(v->sql->sa, e, ++v->sql->label);
+               list_append(rel->exps, e);
                v->changes++;
-               append(rel->exps, exp_atom_bool(v->sql->sa, 1));
-       } else if (is_groupby(rel->op) && list_empty(rel->exps)) {
-               v->changes++;
-               append(rel->exps, exp_atom_bool(v->sql->sa, 1));
        }
        return rel;
 }
@@ -2682,7 +2685,7 @@ rewrite_anyequal(visitor *v, sql_rel *re
                                        sql_rel *l = NULL, *rewrite = NULL;
                                        if (rsq && lsq->card == CARD_ATOM && 
rsq->card == CARD_ATOM) { /* add project true */
                                                lsq = rel_crossproduct(sql->sa, 
lsq, rsq, op_full);
-                                               lsq = rel_crossproduct(sql->sa, 
rel_project_exp(sql->sa, exp_atom_bool(sql->sa, 1)), lsq, op_left);
+                                               lsq = rel_crossproduct(sql->sa, 
rel_project_exp(sql, exp_atom_bool(sql->sa, 1)), lsq, op_left);
                                                rsq = 0;
                                        }
                                        (void)rewrite_inner(sql, rel, lsq, 
rel->card <= CARD_ATOM?op_left:op_join, &rewrite);
@@ -3502,8 +3505,11 @@ rewrite_groupings(visitor *v, sql_rel *r
                                        }
                                        append(pexps, ne);
                                }
-                               if (list_empty(exps))
-                                       append(exps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
+                               if (list_empty(exps)) {
+                                       sql_exp *e = exp_atom_bool(v->sql->sa, 
1);
+                                       exp_label(v->sql->sa, e, 
++v->sql->label); /* protection against empty projections */
+                                       list_append(exps, e);
+                               }
                                nrel->exps = exps;
                                if (!list_empty(rel->r) && 
!list_empty(nrel->r)) { /* aliases on grouping columns, ugh */
                                        for (node *n = ((list*)nrel->r)->h ; n 
; n = n->next) {
@@ -3518,8 +3524,11 @@ rewrite_groupings(visitor *v, sql_rel *r
                                        list_hash_clear(nrel->r);
                                }
                                set_processed(nrel);
-                               if (list_empty(pexps))
-                                       append(pexps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
+                               if (list_empty(pexps)) {
+                                       sql_exp *e = exp_atom_bool(v->sql->sa, 
1);
+                                       exp_label(v->sql->sa, e, 
++v->sql->label); /* protection against empty projections */
+                                       list_append(pexps, e);
+                               }
                                nrel = rel_project(v->sql->sa, nrel, pexps);
                                set_processed(nrel);
 
@@ -3566,13 +3575,19 @@ rewrite_groupings(visitor *v, sql_rel *r
                                        }
                                        append(pexps, ne);
                                }
-                               if (list_empty(exps))
-                                       append(exps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
+                               if (list_empty(exps)) {
+                                       sql_exp *e = exp_atom_bool(v->sql->sa, 
1);
+                                       exp_label(v->sql->sa, e, 
++v->sql->label); /* protection against empty projections */
+                                       list_append(exps, e);
+                               }
                                nrel->exps = exps;
                                set_processed(nrel);
                                v->changes++;
-                               if (list_empty(pexps))
-                                       append(pexps, exp_atom_bool(v->sql->sa, 
1)); /* protection against empty projections */
+                               if (list_empty(pexps)) {
+                                       sql_exp *e = exp_atom_bool(v->sql->sa, 
1);
+                                       exp_label(v->sql->sa, e, 
++v->sql->label); /* protection against empty projections */
+                                       list_append(pexps, e);
+                               }
                                nrel = rel_project(v->sql->sa, nrel, pexps);
                                set_processed(nrel);
                                return nrel;
diff --git a/sql/test/emptydb/Tests/check.stable.out 
b/sql/test/emptydb/Tests/check.stable.out
--- a/sql/test/emptydb/Tests/check.stable.out
+++ b/sql/test/emptydb/Tests/check.stable.out
@@ -6846,8 +6846,8 @@ select 'null in value_partitions.value',
 % %171,        %170,   id # name
 % char,        bigint, int # type
 % 17,  1,      1 # length
-% .%105,       .%73,   .var_values # table_name
-% %105,        %73,    var_name # name
+% .%105,       .%104,  .var_values # table_name
+% %105,        %104,   var_name # name
 % char,        bigint, char # type
 % 24,  1,      16 # length
 % .%2, sys.%1, sys.table_partitions # table_name
@@ -7998,8 +7998,8 @@ select 'null in value_partitions.value',
 % %1,  default_schema, name,   fullname,       default_schema, schema_path # 
name
 % char,        int,    varchar,        varchar,        int,    clob # type
 % 28,  1,      0,      0,      1,      0 # length
-% .%73,        .var_values,    .var_values,    .var_values # table_name
-% %73, var_name,       var_name,       value # name
+% .%104,       .var_values,    .var_values,    .var_values # table_name
+% %104,        var_name,       var_name,       value # name
 % char,        char,   char,   varchar # type
 % 27,  16,     16,     0 # length
 % .%124,       .var_values,    .var_values,    .var_values # table_name
diff --git a/sql/test/emptydb/Tests/check.stable.out.32bit 
b/sql/test/emptydb/Tests/check.stable.out.32bit
--- a/sql/test/emptydb/Tests/check.stable.out.32bit
+++ b/sql/test/emptydb/Tests/check.stable.out.32bit
@@ -6846,8 +6846,8 @@ select 'null in value_partitions.value',
 % %171,        %170,   id # name
 % char,        bigint, int # type
 % 17,  1,      1 # length
-% .%105,       .%73,   .var_values # table_name
-% %105,        %73,    var_name # name
+% .%105,       .%104,  .var_values # table_name
+% %105,        %104,   var_name # name
 % char,        bigint, char # type
 % 24,  1,      16 # length
 % .%2, sys.%1, sys.table_partitions # table_name
@@ -7998,8 +7998,8 @@ select 'null in value_partitions.value',
 % %1,  default_schema, name,   fullname,       default_schema, schema_path # 
name
 % char,        int,    varchar,        varchar,        int,    clob # type
 % 28,  1,      0,      0,      1,      0 # length
-% .%73,        .var_values,    .var_values,    .var_values # table_name
-% %73, var_name,       var_name,       value # name
+% .%104,       .var_values,    .var_values,    .var_values # table_name
+% %104,        var_name,       var_name,       value # name
 % char,        char,   char,   varchar # type
 % 27,  16,     16,     0 # length
 % .%124,       .var_values,    .var_values,    .var_values # table_name
diff --git a/sql/test/emptydb/Tests/check.stable.out.int128 
b/sql/test/emptydb/Tests/check.stable.out.int128
--- a/sql/test/emptydb/Tests/check.stable.out.int128
+++ b/sql/test/emptydb/Tests/check.stable.out.int128
@@ -7058,8 +7058,8 @@ select 'null in value_partitions.value',
 % %171,        %170,   id # name
 % char,        bigint, int # type
 % 17,  1,      1 # length
-% .%105,       .%73,   .var_values # table_name
-% %105,        %73,    var_name # name
+% .%105,       .%104,  .var_values # table_name
+% %105,        %104,   var_name # name
 % char,        bigint, char # type
 % 24,  1,      16 # length
 % .%2, sys.%1, sys.table_partitions # table_name
@@ -8210,8 +8210,8 @@ select 'null in value_partitions.value',
 % %1,  default_schema, name,   fullname,       default_schema, schema_path # 
name
 % char,        int,    varchar,        varchar,        int,    clob # type
 % 28,  1,      0,      0,      1,      0 # length
-% .%73,        .var_values,    .var_values,    .var_values # table_name
-% %73, var_name,       var_name,       value # name
+% .%104,       .var_values,    .var_values,    .var_values # table_name
+% %104,        var_name,       var_name,       value # name
 % char,        char,   char,   varchar # type
 % 27,  16,     16,     0 # length
 % .%124,       .var_values,    .var_values,    .var_values # table_name
diff --git a/sql/test/merge-partitions/Tests/mergepart31.test 
b/sql/test/merge-partitions/Tests/mergepart31.test
--- a/sql/test/merge-partitions/Tests/mergepart31.test
+++ b/sql/test/merge-partitions/Tests/mergepart31.test
@@ -154,7 +154,7 @@ plan select 1 from splitted where stamp 
 ----
 project (
 | select (
-| |  [ boolean(1) "true" ]
+| |  [ boolean(1) "true" as "%1"."%1" ]
 | ) [ boolean(1) "false" ]
 ) [ tinyint(1) "1" ]
 
@@ -224,7 +224,7 @@ plan select 1 from splitted where stamp 
 ----
 project (
 | select (
-| |  [ boolean(1) "true" ]
+| |  [ boolean(1) "true" as "%1"."%1" ]
 | ) [ boolean(1) "false" ]
 ) [ tinyint(1) "1" ]
 
@@ -251,7 +251,7 @@ plan select 1 from splitted where stamp 
 ----
 project (
 | select (
-| |  [ boolean(1) "true" ]
+| |  [ boolean(1) "true" as "%1"."%1" ]
 | ) [ boolean(1) "false" ]
 ) [ tinyint(1) "1" ]
 
@@ -319,7 +319,7 @@ plan select 1 from splitted where stamp 
 ----
 project (
 | select (
-| |  [ boolean(1) "true" ]
+| |  [ boolean(1) "true" as "%1"."%1" ]
 | ) [ boolean(1) "false" ]
 ) [ tinyint(1) "1" ]
 
@@ -428,7 +428,7 @@ plan select 1 from splitted where stamp 
 ----
 project (
 | select (
-| |  [ boolean(1) "true" ]
+| |  [ boolean(1) "true" as "%1"."%1" ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to