Changeset: 605aa8ed2bab for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=605aa8ed2bab
Modified Files:
        sql/server/rel_select.c
        sql/test/SQLancer/Tests/sqlancer09.stable.err
        sql/test/SQLancer/Tests/sqlancer09.stable.out
Branch: Oct2020
Log Message:

Set the underlying group by relation as processed when the parsing of a single 
query finishes


diffs (85 lines):

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
@@ -5322,21 +5322,18 @@ static sql_rel*
 rel_having_limits_nodes(sql_query *query, sql_rel *rel, SelectNode *sn, 
exp_kind ek, int group_totals)
 {
        mvc *sql = query->sql;
+       sql_rel *inner = NULL;
+       int single_value = 1;
+
+       if (is_project(rel->op) && rel->l) {
+               inner = rel->l;
+               single_value = 0;
+       }
 
        if (sn->having) {
-               sql_rel *inner = NULL;
-               int single_value = 1;
-
-               if (is_project(rel->op) && rel->l) {
-                       inner = rel->l;
-                       single_value = 0;
-               }
-
                if (inner && is_groupby(inner->op))
                        set_processed(inner);
-               inner = rel_logical_exp(query, inner, sn->having, sql_having | 
group_totals);
-
-               if (!inner)
+               if (!(inner = rel_logical_exp(query, inner, sn->having, 
sql_having | group_totals)))
                        return NULL;
                if (inner->exps && exps_card(inner->exps) > CARD_AGGR)
                        return sql_error(sql, 02, SQLSTATE(42000) "SELECT: 
cannot compare sets with values, probably an aggregate function missing");
@@ -5419,6 +5416,9 @@ rel_having_limits_nodes(sql_query *query
                rel = rel_sample(sql->sa, rel, exps);
        }
 
+       /* after parsing the current query, set the group by relation as 
processed */
+       if (!sn->having && inner && is_groupby(inner->op))
+               set_processed(inner);
        if (rel)
                set_processed(rel);
        return rel;
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.err 
b/sql/test/SQLancer/Tests/sqlancer09.stable.err
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.err
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.err
@@ -48,6 +48,14 @@ QUERY = update t2 set c1 = 0.01242740338
         (coalesce(-1053775800, 991217471)) and 
(((0.6974006550632457)+(1832026960)));
 ERROR = !division by zero.
 CODE  = 22012
+MAPI  = (monetdb) /var/tmp/mtest-125379/.s.monetdb.32501
+QUERY = select all v0.vc2, greatest(min(all least(-266013300, 864326131)), 
-1183805674), greatest(-544857133, + (v0.vc2)) from v0, v1
+        inner join (values (+ (88)), (greatest(0.8732546822607857, 
greatest(1933292715, -525885982))), (case when (-1466474216) in
+        (-1504372996, 417052418, 94) then least(28288, 1447812316) when 
cast(r'' as boolean) then "second"(time '14:18:59') else
+        ((-730700220)-(929722313)) end)) as sub0 on true natural join (select 
distinct v0.vc0 from v1, v0 where ((((v0.vc1)and(v0.vc1)))
+        or(v0.vc1)) group by v0.vc1) as sub1 where (v0.vc0) in (0.06683239) 
group by least(-1913343924, 10622),
+ERROR = !overflow in conversion of 220424338 to sht.
+CODE  = 22003
 
 # 14:35:03 >  
 # 14:35:03 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer09.stable.out 
b/sql/test/SQLancer/Tests/sqlancer09.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer09.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer09.stable.out
@@ -391,6 +391,20 @@ stdout of test 'sqlancer09` in directory
 % %3 # name
 % tinyint # type
 % 1 # length
+#START TRANSACTION;
+#create or replace view v0(vc0, vc1, vc2) as (values (3, true, 0.3));
+#create or replace view v1(vc0, vc1) as (select 0.80, 'a');
+#select 1 from v0, v1
+#inner join (values (88), (3), (59)) as sub0 on true natural join 
+#(select distinct v0.vc0 from v1, v0 group by v0.vc1) as sub1
+#where v0.vc0 = 0.06683239;
+% .%23 # table_name
+% %23 # name
+% tinyint # type
+% 1 # length
+#create or replace view v0(vc0, vc1, vc2) as (values (nullif(cast(220424338 as 
smallint), case 0.04487378302689426501359548637992702424526214599609375 when 
126710153 then 0.6929207132873739 when 26968 then 26968.0 when 1679982115 then 
29 else 0.8204445662571608 end), cast(sql_min(r'', r'#Ts9.H') as boolean), 
0.45182237213592768565462165497592650353908538818359375));
+#create or replace view v1(vc0, vc1) as (select 
round(0.80863825841427316998277774473535828292369842529296875, 
0.6571010204254646), r'䝀i8jPo' where not (false));
+#ROLLBACK;
 
 # 14:35:03 >  
 # 14:35:03 >  "Done."
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to