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 -- [email protected]
To unsubscribe send an email to [email protected]