Changeset: a0445900a140 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a0445900a140
Modified Files:
sql/benchmarks/tpcds/Tests/one.test.in
sql/common/sql_types.c
sql/server/rel_select.c
sql/server/sql_semantic.c
Branch: cleanup_types
Log Message:
small fixes for the no hugeint case
diffs (71 lines):
diff --git a/sql/benchmarks/tpcds/Tests/one.test.in
b/sql/benchmarks/tpcds/Tests/one.test.in
--- a/sql/benchmarks/tpcds/Tests/one.test.in
+++ b/sql/benchmarks/tpcds/Tests/one.test.in
@@ -6377,7 +6377,7 @@ 3590.470
102.500
3305.820
94.400
-3501.600
+3501.603
query TTIRRRRRRR rowsort
-- query 59
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -174,7 +174,7 @@ int sql_type_convert (int from, int to)
static int convert_preference_matrix[EC_MAX][EC_MAX] = {
/* FROM, A, T, B, C, V,BLB, P, N, M, S, D, F,
T, TZ, D, TS,TSZ, G, E */
-/* EC_ANY */ { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10 },/*NULL*/
+/* EC_ANY */ { 10, 10, 10, 10, 10, 10, 10, 10, 5, 5, 10, 10, 10, 10, 10,
10, 10, 10, 10 },/*NULL*/
/* EC_TABLE */ { 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0 },
/* EC_BIT */ { 10, 0, 99, -1, -1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0 },
/* EC_CHAR */ { 10, 0,-10, 99, 20,-10, 0, -1, 0, 0,
0,-99,-10,-10,-10,-10,-10,-10,-10 },
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
@@ -408,7 +408,7 @@ exp_fix_scale(mvc *sql, sql_subtype *ct,
return e;
sql_subtype st;
int scale = ct->scale;
- int digits = et->digits-et->scale+scale;
+ int digits = ((et->type->eclass ==
EC_NUM)?bits2digits(et->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);
}
@@ -497,7 +497,6 @@ check_arguments_and_find_largest_any_typ
return NULL;
if (sf->func->fix_scale == SCALE_FIX) {
ntp = sql_create_subtype(sql->sa,
a->type.type->localtype?a->type.type:t?t->type:atp->type, digits, scale);
-
e = exp_fix_scale(sql, ntp, e);
} else if (sf->func->fix_scale == SCALE_EQ) {
e = exp_fix_scale(sql, &a->type, e);
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
@@ -511,10 +511,10 @@ score_func( sql_func *f, list *tl, bool
score++;
if (ec == EC_DEC)
return 0;
- if (a && EC_NUMBER(ec))
+ if (a && EC_NUMBER(ec) && !EC_INTERVAL(ec))
score += a->type.type->localtype * 10; /*
premium on larger types */
else if (a) /* all other types */
- score += 110;
+ score += 109;
continue;
}
@@ -525,6 +525,10 @@ score_func( sql_func *f, list *tl, bool
t->type->eclass == EC_EXTERNAL &&
t->type->localtype == a->type.type->localtype)
nscore = 10;
+ if (nscore &&
+ t->type->eclass == EC_NUM && a->type.type->eclass ==
EC_DEC &&
+ t->type->localtype > a->type.type->localtype)
+ *downcast = true;
if (nscore == 0)
return 0;
nscore *= 100; /* first based on prefered conversions */
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]