Changeset: db5615cba971 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/db5615cba971
Modified Files:
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/sql_semantic.c
Branch: Sep2022
Log Message:
Decimals can only hold 18 or 38 digits (depending on whether hge is available).
diffs (88 lines):
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1466,13 +1466,13 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
unsigned int
digits = (lt->digits > rt->digits) ? lt->digits : rt->digits;
#ifdef HAVE_HGE
- if
(res->type->radix == 10 && digits > 39)
- digits
= 39;
+ if
(res->type->radix == 10 && digits > 38)
+ digits
= 38;
if
(res->type->radix == 2 && digits > 128)
digits
= 128;
#else
- if
(res->type->radix == 10 && digits > 19)
- digits
= 19;
+ if
(res->type->radix == 10 && digits > 18)
+ digits
= 18;
if
(res->type->radix == 2 && digits > 64)
digits
= 64;
#endif
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2909,13 +2909,13 @@ exp_scale_algebra(mvc *sql, sql_subfunc
/* HACK alert: digits should be less than max */
#ifdef HAVE_HGE
- if (res->type->radix == 10 && digits > 39)
- digits = 39;
+ if (res->type->radix == 10 && digits > 38)
+ digits = 38;
if (res->type->radix == 2 && digits > 128)
digits = 128;
#else
- if (res->type->radix == 10 && digits > 19)
- digits = 19;
+ if (res->type->radix == 10 && digits > 18)
+ digits = 18;
if (res->type->radix == 2 && digits > 64)
digits = 64;
#endif
@@ -2946,8 +2946,8 @@ exp_sum_scales(sql_subfunc *f, sql_exp *
/* HACK alert: digits should be less than max */
#ifdef HAVE_HGE
- if (ares->type.type->radix == 10 && res->digits > 39) {
- res->digits = 39;
+ if (ares->type.type->radix == 10 && res->digits > 38) {
+ res->digits = 38;
res->scale = MIN(res->scale, res->digits - 1);
}
if (ares->type.type->radix == 2 && res->digits > 128) {
@@ -2955,8 +2955,8 @@ exp_sum_scales(sql_subfunc *f, sql_exp *
res->scale = MIN(res->scale, res->digits - 1);
}
#else
- if (ares->type.type->radix == 10 && res->digits > 19) {
- res->digits = 19;
+ if (ares->type.type->radix == 10 && res->digits > 18) {
+ res->digits = 18;
res->scale = MIN(res->scale, res->digits - 1);
}
if (ares->type.type->radix == 2 && res->digits > 64) {
@@ -3369,4 +3369,3 @@ list_find_exp( list *exps, sql_exp *e)
return ne;
return NULL;
}
-
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
@@ -1071,11 +1071,11 @@ result_datatype(sql_subtype *super, sql_
if (l->type->radix == 10 && r->type->radix == 10) {
digits = scale + (sql_max(l->digits - l->scale,
r->digits - r->scale));
#ifdef HAVE_HGE
- if (digits > 39) {
- digits = 39;
+ if (digits > 38) {
+ digits = 38;
#else
- if (digits > 19) {
- digits = 19;
+ if (digits > 18) {
+ digits = 18;
#endif
scale = MIN(scale, digits - 1);
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]