Changeset: 338c9959bd30 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/338c9959bd30
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
Branch: cleanup_types
Log Message:
cleanup some more commented out code
fix scaling issue.
diffs (74 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
@@ -404,44 +404,15 @@ exp_fix_scale(mvc *sql, sql_subtype *ct,
int scale_diff = ((int) ct->scale - (int) et->scale);
if (scale_diff) {
- sql_subtype *it = sql_bind_localtype(et->type->impl);
- sql_subfunc *c = NULL;
- bool swapped = false;
-
if (scale_diff < 0) {
if (!both)
return e;
- sql_subtype st;
- int scale = ct->scale;
- int digits = et->digits+scale;
- (void)sql_find_subtype(&st,
ct->type->base.name, digits, scale);
- return exp_convert(sql->sa, e, et, &st);
- c = sql_bind_func(sql, "sys", "scale_down", et,
it, F_FUNC, true, true);
- } else {
- sql_subtype st;
- int scale = ct->scale;
- int digits = et->digits+scale;
- (void)sql_find_subtype(&st,
ct->type->base.name, digits, scale);
- return exp_convert(sql->sa, e, et, &st);
- if (!(c = sql_bind_func(sql, "sys", "scale_up",
et, it, F_FUNC, true, true))) {
- if ((c = sql_bind_func(sql, "sys",
"scale_up", it, et, F_FUNC, true, true)))
- swapped = true;
- }
}
- if (c) {
-#ifdef HAVE_HGE
- hge val = scale2value(scale_diff);
-#else
- lng val = scale2value(scale_diff);
-#endif
- sql_exp *atom_exp = exp_atom(sql->sa,
atom_int(sql->sa, it, val));
- sql_subtype *res = c->res->h->data;
-
- res->scale = (et->scale + scale_diff);
- return exp_binop(sql->sa, swapped ? atom_exp :
e, swapped ? e : atom_exp, c);
- } else {
- TRC_CRITICAL(SQL_PARSER, "scale_down/up missing
(%s)\n", et->type->base.name);
- }
+ sql_subtype st;
+ int scale = ct->scale;
+ int digits = et->digits-et->scale+scale;
+ (void)sql_find_subtype(&st, ct->type->base.name,
digits, scale);
+ return exp_convert(sql->sa, e, et, &st);
}
} else if (always && et->scale) { /* scale down */
int scale_diff = -(int) et->scale;
@@ -523,7 +494,7 @@ check_arguments_and_find_largest_any_typ
ntp = res;
} else if (t && ntp->scale == 0 && ntp->type->eclass == EC_DEC)
{
ntp = sql_create_subtype(sql->sa, a->type.type,
t->type->eclass == EC_NUM?bits2digits(t->digits):t->digits, t->scale);
- } else if (sf->func->fix_scale != SCALE_EQ && t->type ==
ntp->type) {
+ } else if (t->type == ntp->type) {
ntp = t;
}
if (!(e = exp_check_type(sql, ntp, rel, e, type_equal)))
diff --git a/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
b/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
--- a/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
+++ b/sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
@@ -64,7 +64,7 @@ project (
| | | | ) [ "sys"."st_point"("tmp_2"."a2", "tmp_3"."a2") as "a1" ]
| | | ) [ ]
| | ) [ "v"."a1", "v"."a2", "a1" as "p"."a1" ]
-| ) [ "v"."a1" as "a1", geometry["v"."a2"] as "%1"."%1",
"sys"."st_distance"("%1"."%1", "p"."a1") as "prob" ]
+| ) [ "v"."a1" as "a1", "sys"."st_distance"("v"."a2", "p"."a1") as "prob" ]
) [ "a1" as "r"."a1", "prob" as "r"."prob" ]
statement ok
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]