Changeset: 4c465199b13a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4c465199b13a
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_round_impl.h
sql/server/rel_select.c
sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.err
sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.err
sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.out
sql/test/BugTracker-2012/Tests/interval_timestamp.Bug-3002.stable.err
sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
sql/test/Skyserver/Skyserver_functions.sql
sql/test/Skyserver/Skyserver_functions_v6.sql
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: default
Log Message:
Merged with Jun2020
diffs (truncated from 453 to 300 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
@@ -1455,6 +1455,25 @@ rel_numeric_supertype(mvc *sql, sql_exp
return e;
}
+static sql_subtype*
+largest_numeric_type(sql_subtype *res, int ec)
+{
+ if (ec == EC_NUM) {
+#ifdef HAVE_HGE
+ *res = *sql_bind_localtype(have_hge ? "hge" : "lng");
+#else
+ *res = *sql_bind_localtype("lng");
+#endif
+ return res;
+ }
+ if (ec == EC_DEC && sql_find_subtype(res, "decimal", 38, 0)) {
+ /* we don't know the precision nor scale ie we use a double */
+ *res = *sql_bind_localtype("dbl");
+ return res;
+ }
+ return NULL;
+}
+
sql_exp *
rel_check_type(mvc *sql, sql_subtype *t, sql_rel *rel, sql_exp *exp,
check_type tpe)
{
@@ -3068,6 +3087,10 @@ rel_unop(sql_query *query, sql_rel **rel
#define is_addition(fname) (strcmp(fname, "sql_add") == 0)
#define is_subtraction(fname) (strcmp(fname, "sql_sub") == 0)
+#define is_multiplication(fname) (strcmp(fname, "sql_mul") == 0)
+#define is_division(fname) (strcmp(fname, "sql_div") == 0)
+
+#define is_numeric_dyadic_func(fname) (is_addition(fname) ||
is_subtraction(fname) || is_multiplication(fname) || is_division(fname))
sql_exp *
rel_binop_(mvc *sql, sql_rel *rel, sql_exp *l, sql_exp *r, sql_schema *s, char
*fname, int card)
@@ -3128,6 +3151,31 @@ rel_binop_(mvc *sql, sql_rel *rel, sql_e
r = res;
}
}
+ if (!f) {
+ if (is_numeric_dyadic_func(fname)) {
+ if (EC_NUMBER(t1->type->eclass) &&
!EC_NUMBER(t2->type->eclass)) {
+ sql_subtype tp;
+ if (!largest_numeric_type(&tp,
t1->type->eclass))
+ tp = *t1; /* for float and interval
fall back too the same as left */
+ r = rel_check_type(sql, &tp, rel, r,
type_equal);
+ if (!r)
+ return NULL;
+ t2 = exp_subtype(r);
+ } else if (!EC_NUMBER(t1->type->eclass) &&
!EC_TEMP(t1->type->eclass) && EC_NUMBER(t2->type->eclass)) {
+ sql_subtype tp;
+ if (!largest_numeric_type(&tp,
t2->type->eclass))
+ tp = *t2; /* for float and interval
fall back too the same as right */
+ l = rel_check_type(sql, &tp, rel, l,
type_equal);
+ if (!l)
+ return NULL;
+ t1 = exp_subtype(l);
+ } else if (!EC_NUMBER(t1->type->eclass) &&
!EC_TEMP(t1->type->eclass) && !EC_NUMBER(t2->type->eclass)) {
+ return sql_error(sql, 02, SQLSTATE(42000)
"SELECT: no such binary operator '%s(%s,%s)'", fname,
+ exp_subtype(l)->type->sqlname,
+ exp_subtype(r)->type->sqlname);
+ }
+ }
+ }
if (f && check_card(card,f)) {
if (f->func->fix_scale == SCALE_FIX) {
l = exp_fix_scale(sql, t2, l, 0, 0);
diff --git
a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.err
b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.err
--- a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.err
+++ b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.err
@@ -81,11 +81,11 @@ stderr of test 'mixed_type.SF-917372` in
MAPI = (monetdb) /var/tmp/mtest-10022/.s.monetdb.31381
QUERY = select 'a'+1;
-ERROR = !Daytime (a) has incorrect format
-CODE = 22007
-MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+ERROR = !conversion of string 'a' to type hge failed.
+CODE = 22018
+MAPI = (monetdb) /var/tmp/mtest-2179869/.s.monetdb.37655
QUERY = select 1-'a';
-ERROR = !conversion of string 'a' to type bte failed.
+ERROR = !conversion of string 'a' to type hge failed.
CODE = 22018
# 19:21:06 >
diff --git
a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
--- a/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.8/Tests/mixed_type.SF-917372.stable.out
@@ -24,9 +24,9 @@ stdout of test 'mixed_type.SF-917372` in
# 11:50:16 >
#select true+1;
-% .%1 # table_name
-% %1 # name
-% tinyint # type
+% .%2 # table_name
+% %2 # name
+% hugeint # type
% 1 # length
[ 2 ]
diff --git
a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
--- a/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
+++ b/sql/test/BugTracker-2011/Tests/CASE_nested_functions.Bug-2852.stable.out
@@ -46,9 +46,9 @@ stdout of test 'CASE_nested_functions.Bu
# FROM
# t2852
# ;
-% sys. # table_name
-% %13 # name
-% bigint # type
+% sys.%15 # table_name
+% %15 # name
+% hugeint # type
% 1 # length
[ 0 ]
#DROP TABLE t2852;
diff --git
a/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.err
b/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.err
---
a/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.err
+++
b/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.err
@@ -5,25 +5,10 @@ stderr of test 'incorrect_cast_from_doub
# 11:13:50 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"gdk_dbfarm=/ufs/goncalve/scratch/MonetDB/current/debug/MonetDB/var/MonetDB"
"--set" "mapi_open=true" "--set" "mapi_port=31897" "--set" "monet_prompt="
"--trace" "--forcemito" "--set" "mal_listing=2"
"--dbname=mTests_test_BugTracker-2012" "--set" "mal_listing=0"
# 11:13:50 >
-# builtin opt gdk_dbname = demo
-# builtin opt gdk_dbfarm =
/ufs/goncalve/scratch/MonetDB/current/debug/MonetDB/var/monetdb5/dbfarm
-# builtin opt gdk_debug = 0
-# builtin opt gdk_vmtrim = yes
-# builtin opt monet_prompt = >
-# builtin opt monet_daemon = no
-# builtin opt mapi_port = 50000
-# builtin opt mapi_open = false
-# builtin opt mapi_autosense = false
-# builtin opt sql_optimizer = default_pipe
-# builtin opt sql_debug = 0
-# cmdline opt gdk_nr_threads = 0
-# cmdline opt gdk_dbfarm =
/ufs/goncalve/scratch/MonetDB/current/debug/MonetDB/var/MonetDB
-# cmdline opt mapi_open = true
-# cmdline opt mapi_port = 31897
-# cmdline opt monet_prompt =
-# cmdline opt mal_listing = 2
-# cmdline opt gdk_dbname = mTests_test_BugTracker-2012
-# cmdline opt mal_listing = 0
+MAPI = (monetdb) /var/tmp/mtest-2179869/.s.monetdb.37655
+QUERY = SELECT '3.1'/'5.1';
+ERROR = !SELECT: no such binary operator 'sql_div(char,char)'
+CODE = 42000
# 11:13:50 >
# 11:13:50 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=lyon"
"--port=31897"
diff --git
a/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.out
b/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.out
---
a/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.out
+++
b/sql/test/BugTracker-2012/Tests/incorrect_cast_from_double_to_int.Bug-2579.stable.out
@@ -44,71 +44,65 @@ stdout of test 'incorrect_cast_from_doub
# 11:13:50 >
#select 1.0/2.0;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.500 ]
#select cast (1 as double)/2;
-% . # table_name
-% %1 # name
+% .%3 # table_name
+% %3 # name
% double # type
% 24 # length
[ 0.5 ]
#select 1.0/2.0;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.500 ]
#select 1.0/2.1;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.476 ]
#select 1.1/2.1;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.523 ]
#select 1.1/2.0;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.550 ]
#select 1.0/2.0;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.500 ]
-#SELECT '3.1'/'5.1';
-% . # table_name
-% %1 # name
-% sec_interval # type
-% 5 # length
-[ 0.000 ]
#SELECT '3.1'/5.1;
-% . # table_name
-% %1 # name
-% sec_interval # type
-% 5 # length
-[ 0.000 ]
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ 0.6078431373 ]
#SELECT 3.1/5.1;
-% . # table_name
-% %1 # name
+% .%2 # table_name
+% %2 # name
% decimal # type
% 7 # length
[ 0.607 ]
#SELECT 3.1/'5.1';
-% . # table_name
-% %1 # name
-% decimal # type
-% 9 # length
-[ 0.607 ]
+% .%2 # table_name
+% %2 # name
+% double # type
+% 24 # length
+[ 0.6078431373 ]
# 11:13:50 >
# 11:13:50 > "Done."
diff --git
a/sql/test/BugTracker-2012/Tests/interval_timestamp.Bug-3002.stable.err
b/sql/test/BugTracker-2012/Tests/interval_timestamp.Bug-3002.stable.err
--- a/sql/test/BugTracker-2012/Tests/interval_timestamp.Bug-3002.stable.err
+++ b/sql/test/BugTracker-2012/Tests/interval_timestamp.Bug-3002.stable.err
@@ -32,11 +32,11 @@ stderr of test 'interval_timestamp.Bug-3
MAPI = (monetdb) /var/tmp/mtest-27483/.s.monetdb.35395
QUERY = select '1970-01-01 11:00' - interval '600' second;
-ERROR = !SELECT: no such binary operator 'sql_sub(char,sec_interval)'
+ERROR = !Wrong format (1970-01-01 11:00)
CODE = 42000
MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
QUERY = select cast('1970-01-01 11:00' as timestamp) = '1970-01-01 11:00' -
interval '600' second;
-ERROR = !SELECT: no such binary operator 'sql_sub(char,sec_interval)'
+ERROR = !types sec_interval(13,0) and timestamp(7,0) are not equal
CODE = 42000
# 15:55:41 >
diff --git a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
--- a/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
+++ b/sql/test/BugTracker-2017/Tests/one-plus-nil.Bug-6243.stable.out
@@ -68,7 +68,7 @@ stdout of test 'one-plus-nil.Bug-6243` i
#select 1 + null;
% .%2 # table_name
% %2 # name
-% tinyint # type
+% hugeint # type
% 1 # length
[ NULL ]
diff --git a/sql/test/Skyserver/Skyserver_functions.sql
b/sql/test/Skyserver/Skyserver_functions.sql
--- a/sql/test/Skyserver/Skyserver_functions.sql
+++ b/sql/test/Skyserver/Skyserver_functions.sql
@@ -1996,8 +1996,8 @@ BEGIN
FROM Field WHERE fieldId=fiel;
SELECT cast(field as varchar(8)) into fieldd
FROM Field WHERE fieldId=fiel;
- SET run6 = substring('000000',1,6-length(runn)) + runn;
- SET fieldd = substring('0000',1,4-length(fieldd)) + fieldd;
+ SET run6 = substring('000000',1,6-length(runn)) || runn;
+ SET fieldd = substring('0000',1,4-length(fieldd)) || fieldd;
RETURN link || runn || '/' || rerunn || '/corr/' || camcoll ||
'/fpC-' || run6 || '-' || filter || camcoll || '-' || fieldd ||'.fit.gz';
END;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list