Changeset: a6511549459c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a6511549459c
Modified Files:
        sql/server/rel_select.c
Branch: Aug2024
Log Message:

Better precision optimization and some early error checking


diffs (19 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -4071,9 +4071,12 @@ rel_cast(sql_query *query, sql_rel **rel
 
        if (e->type == e_atom && tpe->type->eclass == EC_DEC) {
                sql_subtype *et = exp_subtype(e);
-               if (et->type->eclass == EC_CHAR || et->type->eclass == EC_NUM)
-                       tpe = sql_bind_subtype(sql->sa, "decimal", et->digits, 
et->scale);
-               else if (et->type->eclass == EC_STRING) {
+               if (et->type->eclass == EC_NUM) {
+                       unsigned int min_precision = atom_num_digits(e->l);
+                       if (min_precision > tpe->digits)
+                               return sql_error(sql, 02, SQLSTATE(42000) 
"Precision (%d) should be at least (%d)", tpe->digits, min_precision);
+                       tpe = sql_bind_subtype(sql->sa, "decimal", 
min_precision, et->scale);
+               } else if (EC_VARCHAR(et->type->eclass)) {
                        char *s = E_ATOM_STRING(e);
                        unsigned int min_precision = 0, min_scale = 0;
                        bool dot_seen = false;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to