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

Reply via email to