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]

Reply via email to