Changeset: 5dc4f29723a1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/5dc4f29723a1
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/server/rel_unnest.c
        sql/test/prepare/Tests/sqlancer_prepare.stable.out
        sql/test/prepare/Tests/sqlancer_prepare.stable.out.int128
Branch: default
Log Message:

Merged with Jan2022


diffs (truncated from 676 to 300 lines):

diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -502,7 +502,8 @@ CLTqueryTimeout(Client cntxt, MalBlkPtr 
        if (mal_clients[idx].mode == FREECLIENT)
                msg = createException(MAL,"clients.queryTimeout","Session not 
active anymore");
        else {
-               lng timeout_micro = (lng) qto * 1000000;
+               /* when testing (FORCEMITOMASK), reduce timeout of 1 sec to 1 
msec */
+               lng timeout_micro = GDKdebug & FORCEMITOMASK && qto == 1 ? 1000 
: (lng) qto * 1000000;
                mal_clients[idx].querytimeout = timeout_micro;
                QryCtx *qry_ctx = MT_thread_get_qry_ctx();
                qry_ctx->querytimeout = timeout_micro;
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
@@ -8927,7 +8927,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) {
@@ -9326,7 +9326,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
@@ -887,12 +887,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
@@ -1697,8 +1697,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);
@@ -1734,7 +1737,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;
@@ -1769,12 +1772,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;
 }
@@ -3503,8 +3506,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) {
@@ -3519,8 +3525,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);
 
@@ -3567,13 +3576,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 
 ----
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to