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

Reply via email to