Changeset: 29f26ee98e36 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29f26ee98e36 Modified Files: sql/common/sql_types.c sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out sql/test/SQLancer/Tests/sqlancer09.sql sql/test/SQLancer/Tests/sqlancer10.sql sql/test/analytics/Tests/analytics02.stable.out sql/test/analytics/Tests/analytics03.stable.out sql/test/subquery/Tests/subquery6.stable.out Branch: Oct2020 Log Message:
If the result type of the function is any, override the output number of digits with the input type. But there's another sqlancer bug with cast between strings and decimals :( diffs (119 lines): diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -569,7 +569,7 @@ sql_dup_subfunc(sql_allocator *sa, sql_f } else if (r->scale) scale = r->scale; } - if (member && f->fix_scale == INOUT) + if (member && (f->fix_scale == INOUT || r->type->eclass == EC_ANY)) digits = member->digits; if (IS_ANALYTIC(f) && mscale) scale = mscale; diff --git a/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out b/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out --- a/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out +++ b/sql/test/BugTracker-2019/Tests/outer-join-varchar.Bug-6776.stable.out @@ -78,7 +78,7 @@ stdout of test 'outer-join-varchar.Bug-6 % table_name, column_name, type, type_digits # name % varchar, varchar, varchar, int # type % 6, 4, 7, 2 # length -[ "dummy6", "key", "varchar", 0 ] +[ "dummy6", "key", "varchar", 32 ] [ "dummy6", "val4", "int", 32 ] [ "dummy6", "val5", "int", 32 ] #create table dummy7 as select "key", val as "val4", val as "val5" from dummy4 natural full outer join dummy5; @@ -88,7 +88,7 @@ stdout of test 'outer-join-varchar.Bug-6 % table_name, column_name, type, type_digits # name % varchar, varchar, varchar, int # type % 6, 4, 7, 2 # length -[ "dummy7", "key", "varchar", 0 ] +[ "dummy7", "key", "varchar", 32 ] [ "dummy7", "val4", "int", 32 ] [ "dummy7", "val5", "int", 32 ] #create table dummy8 as select dummy4."key" as "key4", dummy5."key" as "key5", dummy4.val as "val4", dummy5.val as "val5" from dummy4 full outer join dummy5 ON dummy4."key" = dummy5."key"; diff --git a/sql/test/SQLancer/Tests/sqlancer09.sql b/sql/test/SQLancer/Tests/sqlancer09.sql --- a/sql/test/SQLancer/Tests/sqlancer09.sql +++ b/sql/test/SQLancer/Tests/sqlancer09.sql @@ -184,7 +184,7 @@ 239480113 NULL NULL create view v2(vc0, vc1, vc2) as (values (((((+ (0.51506835))&(-2)))<<(scale_down(least(31552, 0.3), cast(1500294098 as int)))), -((- (((44257622)-(0.6))))>=(least(-15958291, -1534974396))), case - (sql_min(0.632858, +((- (((44257622)-(0.6))))>=(least(-3, -4))), case - (sql_min(0.632858, 0.3)) when ((((0.5)^(0.4)))+(((0.4)/(5)))) then sql_max(cast(5293 as decimal), ((0.5)- (0.5))) end),(charindex(r'934079707', r'35305325'), not (false), diff --git a/sql/test/SQLancer/Tests/sqlancer10.sql b/sql/test/SQLancer/Tests/sqlancer10.sql --- a/sql/test/SQLancer/Tests/sqlancer10.sql +++ b/sql/test/SQLancer/Tests/sqlancer10.sql @@ -53,6 +53,12 @@ select 1 from v6, v2 join (values (0.54) ROLLBACK; START TRANSACTION; +create view v3(vc0, vc1) as (values (0.67,NULL),(18.50, 3),(0.70, 6)); +create view v7(vc0) as (values (8505133838.114197),(NULL)); +(select v3.vc0 from v3) intersect (select greatest('-1115800120', v7.vc0) from v7); +ROLLBACK; + +START TRANSACTION; CREATE TABLE t1(c0 int); CREATE VIEW v4(vc0) AS ((SELECT NULL FROM t1 AS l0t1) UNION ALL (SELECT true)); INSERT INTO t1(c0) VALUES(12), (2), (6), (3), (1321), (10), (8), (1), (2), (3), (9); diff --git a/sql/test/analytics/Tests/analytics02.stable.out b/sql/test/analytics/Tests/analytics02.stable.out --- a/sql/test/analytics/Tests/analytics02.stable.out +++ b/sql/test/analytics/Tests/analytics02.stable.out @@ -58,8 +58,8 @@ stdout of test 'analytics02` in director % .prepare, .prepare, .prepare, .prepare, .prepare, .prepare # table_name % type, digits, scale, schema, table, column # name % varchar, int, int, str, str, str # type -% 7, 2, 1, 0, 2, 2 # length -[ "varchar", 0, 0, "", "%7", "%7" ] +% 7, 3, 1, 0, 2, 2 # length +[ "varchar", 64, 0, "", "%7", "%7" ] [ "bigint", 64, 0, NULL, NULL, NULL ] #exec 13(2); % sys.%7 # table_name diff --git a/sql/test/analytics/Tests/analytics03.stable.out b/sql/test/analytics/Tests/analytics03.stable.out --- a/sql/test/analytics/Tests/analytics03.stable.out +++ b/sql/test/analytics/Tests/analytics03.stable.out @@ -255,8 +255,8 @@ stdout of test 'analytics03` in director # floor(avg(aa) over (order by bb range between current row and unbounded following)), # floor(avg(aa) over (partition by bb order by bb rows unbounded preceding)), # floor(avg(aa) over (partition by bb order by bb range unbounded preceding)) from overflowme; -% sys.%65, sys.%66, sys.%67, sys.%70, sys.%71, sys.%72 # table_name -% %65, %66, %67, %70, %71, %72 # name +% sys.%53, sys.%54, sys.%55, sys.%56, sys.%57, sys.%60 # table_name +% %53, %54, %55, %56, %57, %60 # name % double, double, double, double, double, double # type % 24, 24, 24, 24, 24, 24 # length [ 2147483645, 2147483645, 2147483645, 2147483645, 2147483644, 2147483645 ] @@ -282,8 +282,8 @@ stdout of test 'analytics03` in director % .%12 # table_name % %12 # name % time # type -% 15 # length -[ 10:10:00.000000 ] +% 8 # length +[ 10:10:00 ] #drop table rowsvsrangevsgroups; # 17:06:35 > diff --git a/sql/test/subquery/Tests/subquery6.stable.out b/sql/test/subquery/Tests/subquery6.stable.out --- a/sql/test/subquery/Tests/subquery6.stable.out +++ b/sql/test/subquery/Tests/subquery6.stable.out @@ -318,13 +318,13 @@ stdout of test 'subquery6` in directory % .%4, .%11, .%16, .%24, .%32 # table_name % %4, %11, %16, %24, %32 # name % char, char, char, char, char # type -% 0, 0, 3, 3, 3 # length +% 3, 3, 3, 3, 3 # length [ NULL, NULL, "bug", "oth", "bug" ] #select lead('bug') over (), lead('bug', 1) over (), lead('bug', 0) over (), lead('bug', 1, 'oth') over (), lead('bug', 0, 'oth') over (), max(TotalSales) from tbl_ProductSales; % .%4, .%11, .%16, .%24, .%32, sys.%33 # table_name % %4, %11, %16, %24, %32, %33 # name % char, char, char, char, char, int # type -% 0, 0, 3, 3, 3, 3 # length +% 3, 3, 3, 3, 3, 3 # length [ NULL, NULL, "bug", "oth", "bug", 500 ] #select (select sum(i1.i + i2.i) in (select sum(i1.i + i2.i)) from integers i2) from integers i1; % .%4 # table_name _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list