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