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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list