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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list