Changeset: 4d746c8ad1f5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4d746c8ad1f5
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/benchmarks/tpcds/Tests/09.stable.out
        sql/server/sql_semantic.c
Branch: default
Log Message:

fixed small issue with exact numerics within case/coalesce
fixed sqlancer04 incorrect code generation issue (single_value detection was 
wrong in the coalesce case)


diffs (48 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -733,7 +733,7 @@ static stmt*
 exp2bin_coalesce(backend *be, sql_exp *fe, stmt *left, stmt *right, stmt 
*isel, int depth)
 {
        stmt *res = NULL, *sel = NULL, *osel = NULL, *ncond = NULL, *ocond = 
NULL;
-       int single_value = (fe->card <= CARD_ATOM);
+       int single_value = (fe->card <= CARD_ATOM && (!left || !left->nrcols));
        char name[16], *nme = NULL;
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_subfunc *and = sql_bind_func(be->mvc->sa, NULL, "and", bt, bt, 
F_FUNC);
diff --git a/sql/benchmarks/tpcds/Tests/09.stable.out 
b/sql/benchmarks/tpcds/Tests/09.stable.out
--- a/sql/benchmarks/tpcds/Tests/09.stable.out
+++ b/sql/benchmarks/tpcds/Tests/09.stable.out
@@ -42,7 +42,7 @@ stdout of test '09` in directory 'sql/be
 % .,   .,      .,      .,      . # table_name
 % bucket1,     bucket2,        bucket3,        bucket4,        bucket5 # name
 % decimal,     decimal,        decimal,        decimal,        decimal # type
-% 11,  11,     11,     11,     11 # length
+% 40,  40,     40,     40,     40 # length
 [ 39.65,       115.90, 191.63, 267.19, 341.99  ]
 
 # 11:36:53 >  
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -209,15 +209,13 @@ result_datatype(sql_subtype *super, sql_
                if (l->type->radix == 10 || r->type->radix == 10) {
                        digits = 0;
                        /* change to radix 10 */
-                       if (l->type->radix == 2)
+                       if (l->type->radix == 2 && r->type->radix == 10) {
                                digits = bits2digits(l->type->digits);
-                       if (l->type->radix == 2)
+                               digits = sql_max(r->digits, digits);
+                               scale = r->scale;
+                       } else if (l->type->radix == 10 && r->type->radix == 2) 
{
                                digits = bits2digits(r->type->digits);
-                       if (l->type->radix != 10) {
-                               digits = sql_max(digits, r->digits);
-                               scale = r->scale;
-                       } else if (r->type->radix != 10) {
-                               digits = sql_max(digits, l->digits);
+                               digits = sql_max(l->digits, digits);
                                scale = l->scale;
                        }
                }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to