Changeset: 863789648b23 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=863789648b23 Modified Files: sql/common/sql_types.c sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.sql sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.err sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 Branch: typing Log Message:
Disabled multiplication and division between interval and numeric types other than fixed sized ones (ie decimals, floating-points and oids) (according to the SQL standard). There are no backend functions for it, and in some cases we cannot compute it eg. interval '1' month * 1.5 diffs (truncated from 571 to 300 lines): 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 @@ -1653,12 +1653,14 @@ sqltypeinit( sql_allocator *sa) sql_create_func(sa, "scale_up", "calc", "*", FALSE, FALSE, SCALE_NONE, 0, *t, 2, *t, lt->type); sql_create_func(sa, "scale_down", "sql", "dec_round", FALSE, FALSE, SCALE_NONE, 0, *t, 2, *t, lt->type); /* numeric functions on INTERVALS */ - sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, MONINT, 2, MONINT, *t); - sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, MONINT, 2, MONINT, *t); - sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, DAYINT, 2, DAYINT, *t); - sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, DAYINT, 2, DAYINT, *t); - sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, SECINT, 2, SECINT, *t); - sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, SECINT, 2, SECINT, *t); + if (t < decimals && *t != OID) { + sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, MONINT, 2, MONINT, *t); + sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, MONINT, 2, MONINT, *t); + sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, DAYINT, 2, DAYINT, *t); + sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, DAYINT, 2, DAYINT, *t); + sql_create_func(sa, "sql_mul", "calc", "*", FALSE, FALSE, SCALE_MUL, 0, SECINT, 2, SECINT, *t); + sql_create_func(sa, "sql_div", "calc", "/", FALSE, FALSE, SCALE_DIV, 0, SECINT, 2, SECINT, *t); + } } for (t = decimals, t++; t != floats; t++) { diff --git a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql --- a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql +++ b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql @@ -2,6 +2,6 @@ SELECT (str_to_timestamp('2015-10-01', ' SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') - str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400; -SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') - str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400.0; +SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') - str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400.0; --error, cannot divide interval with decimal SELECT date '2015-03-01' - (date '2015-02-01' - date '2015-01-01'); diff --git a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err --- a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err +++ b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err @@ -5,26 +5,10 @@ stderr of test 'timestamp_convert.Bug-38 # 19:04:37 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=33045" "--set" "mapi_usock=/var/tmp/mtest-17747/.s.monetdb.33045" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/scratch/niels/build/rc/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015" "--set" "mal_listing=0" "--set" "embedded_r=yes" # 19:04:37 > -# builtin opt gdk_dbpath = /scratch/niels/build/rc/Linux-x86_64/var/monetdb5/dbfarm/demo -# builtin opt gdk_debug = 0 -# builtin opt gdk_vmtrim = no -# 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 mapi_open = true -# cmdline opt mapi_port = 33045 -# cmdline opt mapi_usock = /var/tmp/mtest-17747/.s.monetdb.33045 -# cmdline opt monet_prompt = -# cmdline opt mal_listing = 2 -# cmdline opt gdk_dbpath = /scratch/niels/build/rc/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015 -# cmdline opt mal_listing = 0 -# cmdline opt embedded_r = yes -# cmdline opt gdk_debug = 536870922 +MAPI = (monetdb) /var/tmp/mtest-234042/.s.monetdb.30034 +QUERY = SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') - str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400.0; --error, cannot divide interval with decimal +ERROR = !overflow in conversion of 864000 to bte. +CODE = 22003 # 19:04:38 > # 19:04:38 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-17747" "--port=33045" diff --git a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out --- a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out +++ b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out @@ -17,12 +17,6 @@ stdout of test 'timestamp_convert.Bug-38 % sec_interval # type % 5 # length [ 1.000 ] -#SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') - str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400.0; -% .%2 # table_name -% %2 # name -% sec_interval # type -% 5 # length -[ 1.000 ] #SELECT date '2015-03-01' - (date '2015-02-01' - date '2015-01-01'); % .%2 # table_name % %2 # name diff --git a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.sql b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.sql --- a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.sql +++ b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.sql @@ -1,5 +1,8 @@ -SELECT INTERVAL '1' HOUR / 2, INTERVAL '1' HOUR / 2.0, INTERVAL '1' HOUR * 1000 / 2000, INTERVAL '1' HOUR * 1000.0 / 2000.0; --all output 1800.000 +SELECT INTERVAL '1' HOUR / 2, INTERVAL '1' HOUR * 1000 / 2000; --all output 1800.000 +SELECT INTERVAL '1' HOUR / 2.0; --cannot divide interval with decimal +SELECT INTERVAL '1' HOUR * 1000.0 / 2000.0; --cannot multiply interval with decimal SELECT INTERVAL '1' HOUR * 1000 / 1800000; -- 2.000 -SELECT INTERVAL '1' HOUR * CAST(1000 AS DOUBLE); -SELECT INTERVAL '1' MONTH * 1.2, INTERVAL '1' SECOND * 1.2; +SELECT INTERVAL '1' HOUR * CAST(1000 AS DOUBLE); --cannot multiply interval with floating-point +SELECT INTERVAL '1' MONTH * 1.2; --cannot multiply interval with decimal +SELECT INTERVAL '1' SECOND * 1.2; --cannot multiply interval with decimal SELECT INTERVAL '1' HOUR / INTERVAL '1800' SECOND; --error on typing branch, cannot divide intervals diff --git a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.err b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.err --- a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.err +++ b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.err @@ -5,7 +5,20 @@ stderr of test 'interval-math.Bug-6935` # 10:13:31 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-80282" "--port=37020" # 10:13:31 > -# 10:13:31 > -# 10:13:31 > "Done." -# 10:13:31 > +MAPI = (monetdb) /var/tmp/mtest-237353/.s.monetdb.30721 +QUERY = SELECT INTERVAL '1' HOUR * 1000.0 / 2000.0; --cannot multiply interval with decimal +ERROR = !overflow in conversion of 10000 to bte. +CODE = 22003 +MAPI = (monetdb) /var/tmp/mtest-237353/.s.monetdb.30721 +QUERY = SELECT INTERVAL '1' HOUR * CAST(1000 AS DOUBLE); --cannot multiply interval with floating-point +ERROR = !overflow in conversion of 1000 to bte. +CODE = 22003 +MAPI = (monetdb) /var/tmp/mtest-237353/.s.monetdb.30721 +QUERY = SELECT INTERVAL '1' HOUR / INTERVAL '1800' SECOND; --error on typing branch, cannot divide intervals +ERROR = !SELECT: no such binary operator 'sql_div(sec_interval,sec_interval)' +CODE = 42000 +# 12:56:20 > +# 12:56:20 > "Done." +# 12:56:20 > + diff --git a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.out b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.out --- a/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.out +++ b/sql/test/BugTracker-2020/Tests/interval-math.Bug-6935.stable.out @@ -5,18 +5,36 @@ stdout of test 'interval-math.Bug-6935` # 10:13:31 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-80282" "--port=37020" # 10:13:31 > -#SELECT INTERVAL '1' HOUR / 2, INTERVAL '1' HOUR / 2.0, INTERVAL '1' HOUR * 1000 / 2000, INTERVAL '1' HOUR * 1000.0 / 2000.0; -% .%2, .%3, .%4, .%5 # table_name -% %2, %3, %4, %5 # name -% sec_interval, sec_interval, sec_interval, sec_interval # type -% 8, 8, 8, 8 # length -[ 1800.000, 1800.000, 1800.000, 1800.000 ] +#SELECT INTERVAL '1' HOUR / 2, INTERVAL '1' HOUR * 1000 / 2000; --all output 1800.000 +% .%2, .%3 # table_name +% %2, %3 # name +% sec_interval, sec_interval # type +% 8, 8 # length +[ 1800.000, 1800.000 ] +#SELECT INTERVAL '1' HOUR / 2.0; --cannot divide interval with decimal +% .%2 # table_name +% %2 # name +% sec_interval # type +% 8 # length +[ 1800.000 ] #SELECT INTERVAL '1' HOUR * 1000 / 1800000; -- 2.000 % .%2 # table_name % %2 # name % sec_interval # type % 5 # length [ 2.000 ] +#SELECT INTERVAL '1' MONTH * 1.2; --cannot multiply interval with decimal +% .%2 # table_name +% %2 # name +% month_interval # type +% 1 # length +[ 1 ] +#SELECT INTERVAL '1' SECOND * 1.2; --cannot multiply interval with decimal +% .%2 # table_name +% %2 # name +% sec_interval # type +% 5 # length +[ 1.000 ] # 10:13:31 > # 10:13:31 > "Done." diff --git a/sql/test/sys-schema/Tests/systemfunctions.stable.out b/sql/test/sys-schema/Tests/systemfunctions.stable.out --- a/sql/test/sys-schema/Tests/systemfunctions.stable.out +++ b/sql/test/sys-schema/Tests/systemfunctions.stable.out @@ -3814,15 +3814,6 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_div", 0, "oid", "/" ] [ "sys", "sql_div", 1, "oid", "" ] [ "sys", "sql_div", 2, "oid", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "oid", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "oid", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "oid", "" ] [ "sys", "sql_div", 0, "tinyint", "/" ] [ "sys", "sql_div", 1, "tinyint", "" ] [ "sys", "sql_div", 2, "tinyint", "" ] @@ -3874,75 +3865,21 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_div", 0, "decimal", "/" ] [ "sys", "sql_div", 1, "decimal", "" ] [ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] [ "sys", "sql_div", 0, "decimal", "/" ] [ "sys", "sql_div", 1, "decimal", "" ] [ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] [ "sys", "sql_div", 0, "decimal", "/" ] [ "sys", "sql_div", 1, "decimal", "" ] [ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] [ "sys", "sql_div", 0, "decimal", "/" ] [ "sys", "sql_div", 1, "decimal", "" ] [ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "decimal", "" ] [ "sys", "sql_div", 0, "real", "/" ] [ "sys", "sql_div", 1, "real", "" ] [ "sys", "sql_div", 2, "real", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "real", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "real", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "real", "" ] [ "sys", "sql_div", 0, "double", "/" ] [ "sys", "sql_div", 1, "double", "" ] [ "sys", "sql_div", 2, "double", "" ] -[ "sys", "sql_div", 0, "month_interval", "/" ] -[ "sys", "sql_div", 1, "month_interval", "" ] -[ "sys", "sql_div", 2, "double", "" ] -[ "sys", "sql_div", 0, "day_interval", "/" ] -[ "sys", "sql_div", 1, "day_interval", "" ] -[ "sys", "sql_div", 2, "double", "" ] -[ "sys", "sql_div", 0, "sec_interval", "/" ] -[ "sys", "sql_div", 1, "sec_interval", "" ] -[ "sys", "sql_div", 2, "double", "" ] [ "sys", "sql_exists", 0, "boolean", "exist" ] [ "sys", "sql_exists", 1, "any", "" ] [ "sys", "sql_max", 0, "any", "max" ] @@ -4035,15 +3972,6 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_mul", 0, "oid", "*" ] [ "sys", "sql_mul", 1, "oid", "" ] [ "sys", "sql_mul", 2, "oid", "" ] -[ "sys", "sql_mul", 0, "month_interval", "*" ] -[ "sys", "sql_mul", 1, "month_interval", "" ] -[ "sys", "sql_mul", 2, "oid", "" ] -[ "sys", "sql_mul", 0, "day_interval", "*" ] -[ "sys", "sql_mul", 1, "day_interval", "" ] -[ "sys", "sql_mul", 2, "oid", "" ] -[ "sys", "sql_mul", 0, "sec_interval", "*" ] -[ "sys", "sql_mul", 1, "sec_interval", "" ] -[ "sys", "sql_mul", 2, "oid", "" ] [ "sys", "sql_mul", 0, "tinyint", "*" ] [ "sys", "sql_mul", 1, "tinyint", "" ] [ "sys", "sql_mul", 2, "tinyint", "" ] @@ -4095,75 +4023,21 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_mul", 0, "decimal", "*" ] [ "sys", "sql_mul", 1, "decimal", "" ] [ "sys", "sql_mul", 2, "decimal", "" ] -[ "sys", "sql_mul", 0, "month_interval", "*" ] -[ "sys", "sql_mul", 1, "month_interval", "" ] -[ "sys", "sql_mul", 2, "decimal", "" ] -[ "sys", "sql_mul", 0, "day_interval", "*" ] -[ "sys", "sql_mul", 1, "day_interval", "" ] -[ "sys", "sql_mul", 2, "decimal", "" ] -[ "sys", "sql_mul", 0, "sec_interval", "*" ] -[ "sys", "sql_mul", 1, "sec_interval", "" ] -[ "sys", "sql_mul", 2, "decimal", "" ] [ "sys", "sql_mul", 0, "decimal", "*" ] [ "sys", "sql_mul", 1, "decimal", "" ] [ "sys", "sql_mul", 2, "decimal", "" ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list