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