Changeset: 356d665aeb10 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=356d665aeb10
Modified Files:
sql/backends/monet5/Tests/pyapi08.sql
sql/backends/monet5/sql_statement.c
sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out
sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql
sql/test/pg_regress/Tests/interval.stable.out.int128
sql/test/snodgrass/Tests/cast_select.sql
Branch: Nov2019
Log Message:
When converting second interval to any numeric type take decimals into account.
This fixes part of bug 6793.
diffs (95 lines):
diff --git a/sql/backends/monet5/Tests/pyapi08.sql
b/sql/backends/monet5/Tests/pyapi08.sql
--- a/sql/backends/monet5/Tests/pyapi08.sql
+++ b/sql/backends/monet5/Tests/pyapi08.sql
@@ -1125,7 +1125,8 @@ CREATE FUNCTION numpy_distance_fast(stt_
# just for testing purposes, we have an encoded version of numpy_distance_fast
here
CREATE FUNCTION numpy_distance_encoded(stt_in string, tss_in bigint, lat_in
double, lon_in double, alt_in double) returns table (s1 string, s2 string,
timestamp int, mindist int) language P
{@\\x63\\x05\\x00\\x00\\x00\\x1e\\x00\\x00\\x00\\x09\\x00\\x00\\x00\\x43\\x00\\x00\\x00\\x73\\x72\\x03\\x00\\x00\\x64\\x01\\x00\\x64\\x00\\x00\\x6c\\x00\\x00\\x7d\\x05\\x00\\x64\\x01\\x00\\x64\\x00\\x00\\x6c\\x01\\x00\\x7d\\x06\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x7c\\x00\\x00\\x64\\x02\\x00\\x74\\x03\\x00\\x83\\x01\\x01\\x7d\\x07\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x7c\\x01\\x00\\x64\\x02\\x00\\x74\\x03\\x00\\x83\\x01\\x01\\x7d\\x08\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x7c\\x02\\x00\\x64\\x02\\x00\\x74\\x03\\x00\\x83\\x01\\x01\\x7d\\x09\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x7c\\x03\\x00\\x64\\x02\\x00\\x74\\x03\\x00\\x83\\x01\\x01\\x7d\\x0a\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x7c\\x04\\x00\\x64\\x02\\x00\\x74\\x03\\x00\\x83\\x01\\x01\\x7d\\x0b\\x00\\x64\\x03\\x00\\x7d\\x0c\\x00\\x64\\x04\\x00\\x7d
\\x0d\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x67\\x00\\x00\\x64\\x02\\x00\\x64\\x05\\x00\\x83\\x01\\x01\\x7d\\x0e\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x67\\x00\\x00\\x64\\x02\\x00\\x64\\x05\\x00\\x83\\x01\\x01\\x7d\\x0f\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x67\\x00\\x00\\x64\\x02\\x00\\x7c\\x05\\x00\\x6a\\x04\\x00\\x83\\x01\\x01\\x7d\\x10\\x00\\x7c\\x05\\x00\\x6a\\x02\\x00\\x67\\x00\\x00\\x64\\x02\\x00\\x7c\\x05\\x00\\x6a\\x05\\x00\\x83\\x01\\x01\\x7d\\x11\\x00\\x7c\\x05\\x00\\x6a\\x06\\x00\\x7c\\x08\\x00\\x64\\x06\\x00\\x64\\x07\\x00\\x64\\x08\\x00\\x67\\x02\\x00\\x83\\x01\\x01\\x7d\\x12\\x00\\x78\\x5d\\x02\\x7c\\x12\\x00\\x6a\\x07\\x00\\x73\\x61\\x03\\x7c\\x12\\x00\\x6a\\x08\\x00\\x64\\x09\\x00\\x17\\x7c\\x08\\x00\\x6a\\x09\\x00\\x6b\\x05\\x00\\x72\\x28\\x01\\x50\\x6e\\x00\\x00\\x7c\\x09\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x19\\x7d\\x13\\x00\\x7c\\x0a\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x19\\x7d\\x14\\x00\\x7c\\x0b\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x19\\x7d\\x15\\x00\\x7c\\x0d\\x00\\
x7d\\x16\\x00\\x64\\x01\\x00\\x7d\\x17\\x00\\x7c\\x05\\x00\\x6a\\x06\\x00\\x7c\\x08\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x64\\x09\\x00\\x17\\x1f\\x64\\x06\\x00\\x64\\x07\\x00\\x64\\x08\\x00\\x67\\x02\\x00\\x83\\x01\\x01\\x7d\\x18\\x00\\x78\\x4e\\x01\\x7c\\x18\\x00\\x6a\\x07\\x00\\x73\\xd1\\x02\\x7c\\x18\\x00\\x64\\x0a\\x00\\x19\\x7c\\x12\\x00\\x64\\x0a\\x00\\x19\\x18\\x7d\\x19\\x00\\x7c\\x19\\x00\\x7c\\x0c\\x00\\x6b\\x04\\x00\\x72\\xaf\\x01\\x50\\x6e\\x00\\x00\\x7c\\x07\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x19\\x7c\\x07\\x00\\x7c\\x18\\x00\\x6a\\x08\\x00\\x19\\x6b\\x02\\x00\\x72\\xd9\\x01\\x7c\\x18\\x00\\x6a\\x0a\\x00\\x83\\x00\\x00\\x01\\x71\\x84\\x01\\x6e\\x00\\x00\\x74\\x0b\\x00\\x7c\\x0b\\x00\\x7c\\x18\\x00\\x6a\\x08\\x00\\x19\\x7c\\x15\\x00\\x18\\x83\\x01\\x00\\x7d\\x1a\\x00\\x7c\\x1a\\x00\\x7c\\x0d\\x00\\x6b\\x04\\x00\\x72\\x0c\\x02\\x7c\\x18\\x00\\x6a\\x0a\\x00\\x83\\x00\\x00\\x01\\x71\\x84\\x01\\x6e\\x00\\x00\\x7c\\x09\\x00\\x7c\\x18\\x00\\x6a\\x08\\x00\\x19\\x7d\\x1b\\x00\\x7
c\\x0a\\x00\\x7c\\x18\\x00\\x6a\\x08\\x00\\x19\\x7d\\x1c\\x00\\x64\\x0b\\x00\\x7c\\x06\\x00\\x6a\\x0c\\x00\\x7c\\x06\\x00\\x6a\\x0d\\x00\\x7c\\x14\\x00\\x64\\x0c\\x00\\x14\\x7c\\x1c\\x00\\x64\\x0c\\x00\\x14\\x18\\x7c\\x06\\x00\\x6a\\x0e\\x00\\x64\\x0d\\x00\\x7c\\x13\\x00\\x64\\x0c\\x00\\x14\\x7c\\x1b\\x00\\x64\\x0c\\x00\\x14\\x17\\x14\\x83\\x01\\x00\\x14\\x64\\x0e\\x00\\x83\\x02\\x00\\x7c\\x06\\x00\\x6a\\x0d\\x00\\x7c\\x13\\x00\\x64\\x0c\\x00\\x14\\x7c\\x1b\\x00\\x64\\x0c\\x00\\x14\\x18\\x64\\x0e\\x00\\x83\\x02\\x00\\x17\\x83\\x01\\x00\\x14\\x7d\\x1d\\x00\\x7c\\x1d\\x00\\x7c\\x0d\\x00\\x6b\\x04\\x00\\x72\\xa6\\x02\\x7c\\x18\\x00\\x6a\\x0a\\x00\\x83\\x00\\x00\\x01\\x71\\x84\\x01\\x6e\\x00\\x00\\x7c\\x1d\\x00\\x7c\\x16\\x00\\x6b\\x00\\x00\\x72\\xc4\\x02\\x7c\\x1d\\x00\\x7d\\x16\\x00\\x7c\\x18\\x00\\x6a\\x08\\x00\\x7d\\x17\\x00\\x6e\\x00\\x00\\x7c\\x18\\x00\\x6a\\x0a\\x00\\x83\\x00\\x00\\x01\\x71\\x84\\x01\\x57\\x7c\\x16\\x00\\x7c\\x0d\\x00\\x6b\\x00\\x00\\x72\\x54\\x03\\x74\\x00\\x00\
\x6a\\x0f\\x00\\x7c\\x0e\\x00\\x74\\x10\\x00\\x7c\\x07\\x00\\x7c\\x12\\x00\\x6a\\x08\\x00\\x19\\x83\\x01\\x00\\x83\\x02\\x00\\x7d\\x0e\\x00\\x74\\x00\\x00\\x6a\\x0f\\x00\\x7c\\x0f\\x00\\x74\\x10\\x00\\x7c\\x07\\x00\\x7c\\x17\\x00\\x19\\x83\\x01\\x00\\x83\\x02\\x00\\x7d\\x0f\\x00\\x74\\x00\\x00\\x6a\\x0f\\x00\\x7c\\x10\\x00\\x74\\x11\\x00\\x7c\\x12\\x00\\x64\\x0a\\x00\\x19\\x64\\x0f\\x00\\x15\\x83\\x01\\x00\\x83\\x02\\x00\\x7d\\x10\\x00\\x74\\x00\\x00\\x6a\\x0f\\x00\\x7c\\x11\\x00\\x74\\x11\\x00\\x7c\\x16\\x00\\x83\\x01\\x00\\x83\\x02\\x00\\x7d\\x11\\x00\\x6e\\x00\\x00\\x7c\\x12\\x00\\x6a\\x0a\\x00\\x83\\x00\\x00\\x01\\x71\\x05\\x01\\x57\\x7c\\x0e\\x00\\x7c\\x0f\\x00\\x7c\\x10\\x00\\x7c\\x11\\x00\\x67\\x04\\x00\\x53\\x28\\x10\\x00\\x00\\x00\\x4e\\x69\\xff\\xff\\xff\\xff\\x74\\x05\\x00\\x00\\x00\\x64\\x74\\x79\\x70\\x65\\x69\\x0a\\x00\\x00\\x00\\x69\\x20\\x4e\\x00\\x00\\x73\\x04\\x00\\x00\\x00\\x7c\\x53\\x31\\x30\\x74\\x05\\x00\\x00\\x00\\x66\\x6c\\x61\\x67\\x73\\x74\\x07\\x00\\x00\\x
00\\x66\\x5f\\x69\\x6e\\x64\\x65\\x78\\x74\\x07\\x00\\x00\\x00\\x72\\x65\\x66\\x73\\x5f\\x6f\\x6b\\x69\\x01\\x00\\x00\\x00\\x69\\x00\\x00\\x00\\x00\\x69\\xb8\\x36\\x61\\x00\\x67\\xca\\xc3\\x42\\xad\\x69\\xde\\x91\\x3f\\x67\\x00\\x00\\x00\\x00\\x00\\x00\\xe0\\x3f\\x69\\x02\\x00\\x00\\x00\\x69\\xe8\\x03\\x00\\x00\\x28\\x12\\x00\\x00\\x00\\x74\\x05\\x00\\x00\\x00\\x6e\\x75\\x6d\\x70\\x79\\x74\\x04\\x00\\x00\\x00\\x6d\\x61\\x74\\x68\\x74\\x05\\x00\\x00\\x00\\x61\\x72\\x72\\x61\\x79\\x74\\x06\\x00\\x00\\x00\\x6f\\x62\\x6a\\x65\\x63\\x74\\x74\\x05\\x00\\x00\\x00\\x69\\x6e\\x74\\x36\\x34\\x74\\x06\\x00\\x00\\x00\\x75\\x69\\x6e\\x74\\x33\\x32\\x74\\x06\\x00\\x00\\x00\\x6e\\x64\\x69\\x74\\x65\\x72\\x74\\x08\\x00\\x00\\x00\\x66\\x69\\x6e\\x69\\x73\\x68\\x65\\x64\\x74\\x05\\x00\\x00\\x00\\x69\\x6e\\x64\\x65\\x78\\x74\\x04\\x00\\x00\\x00\\x73\\x69\\x7a\\x65\\x74\\x08\\x00\\x00\\x00\\x69\\x74\\x65\\x72\\x6e\\x65\\x78\\x74\\x74\\x03\\x00\\x00\\x00\\x61\\x62\\x73\\x74\\x04\\x00\\x00\\x00\\x73\\x71
\\x72\\x74\\x74\\x03\\x00\\x00\\x00\\x70\\x6f\\x77\\x74\\x03\\x00\\x00\\x00\\x63\\x6f\\x73\\x74\\x06\\x00\\x00\\x00\\x61\\x70\\x70\\x65\\x6e\\x64\\x74\\x03\\x00\\x00\\x00\\x73\\x74\\x72\\x74\\x03\\x00\\x00\\x00\\x69\\x6e\\x74\\x28\\x1e\\x00\\x00\\x00\\x74\\x06\\x00\\x00\\x00\\x73\\x74\\x74\\x5f\\x69\\x6e\\x74\\x06\\x00\\x00\\x00\\x74\\x73\\x73\\x5f\\x69\\x6e\\x74\\x06\\x00\\x00\\x00\\x6c\\x61\\x74\\x5f\\x69\\x6e\\x74\\x06\\x00\\x00\\x00\\x6c\\x6f\\x6e\\x5f\\x69\\x6e\\x74\\x06\\x00\\x00\\x00\\x61\\x6c\\x74\\x5f\\x69\\x6e\\x74\\x02\\x00\\x00\\x00\\x6e\\x70\\x52\\x05\\x00\\x00\\x00\\x74\\x03\\x00\\x00\\x00\\x73\\x74\\x74\\x74\\x03\\x00\\x00\\x00\\x74\\x73\\x73\\x74\\x03\\x00\\x00\\x00\\x6c\\x61\\x74\\x74\\x03\\x00\\x00\\x00\\x6c\\x6f\\x6e\\x74\\x03\\x00\\x00\\x00\\x61\\x6c\\x74\\x74\\x09\\x00\\x00\\x00\\x74\\x69\\x6d\\x65\\x6c\\x69\\x6d\\x69\\x74\\x74\\x09\\x00\\x00\\x00\\x64\\x69\\x73\\x74\\x6c\\x69\\x6d\\x69\\x74\\x74\\x05\\x00\\x00\\x00\\x72\\x65\\x74\\x73\\x31\\x74\\x05\\x00\\x00\\
x00\\x72\\x65\\x74\\x73\\x32\\x74\\x05\\x00\\x00\\x00\\x72\\x65\\x74\\x74\\x73\\x74\\x05\\x00\\x00\\x00\\x72\\x65\\x74\\x6d\\x64\\x74\\x02\\x00\\x00\\x00\\x69\\x74\\x74\\x04\\x00\\x00\\x00\\x6c\\x61\\x74\\x31\\x74\\x04\\x00\\x00\\x00\\x6c\\x6f\\x6e\\x31\\x74\\x04\\x00\\x00\\x00\\x61\\x6c\\x74\\x31\\x74\\x07\\x00\\x00\\x00\\x6d\\x69\\x6e\\x64\\x69\\x73\\x74\\x74\\x08\\x00\\x00\\x00\\x6f\\x74\\x68\\x65\\x72\\x69\\x64\\x78\\x74\\x03\\x00\\x00\\x00\\x69\\x74\\x32\\x74\\x08\\x00\\x00\\x00\\x74\\x69\\x6d\\x65\\x64\\x69\\x66\\x66\\x74\\x07\\x00\\x00\\x00\\x61\\x6c\\x74\\x64\\x69\\x66\\x66\\x74\\x04\\x00\\x00\\x00\\x6c\\x61\\x74\\x32\\x74\\x04\\x00\\x00\\x00\\x6c\\x6f\\x6e\\x32\\x74\\x08\\x00\\x00\\x00\\x64\\x69\\x73\\x74\\x64\\x69\\x66\\x66\\x28\\x00\\x00\\x00\\x00\\x28\\x00\\x00\\x00\\x00\\x73\\x07\\x00\\x00\\x00\\x3c\\x73\\x74\\x64\\x69\\x6e\\x3e\\x74\\x13\\x00\\x00\\x00\\x6e\\x75\\x6d\\x70\\x79\\x5f\\x64\\x69\\x73\\x74\\x61\\x6e\\x63\\x65\\x5f\\x66\\x61\\x73\\x74\\x01\\x00\\x00\\x00\\x7
3\\x6a\\x00\\x00\\x00\\x00\\x01\\x0c\\x01\\x0c\\x01\\x15\\x01\\x15\\x01\\x15\\x01\\x15\\x01\\x15\\x01\\x06\\x01\\x06\\x01\\x15\\x01\\x15\\x01\\x18\\x01\\x18\\x01\\x1b\\x01\\x0c\\x01\\x16\\x00\\x04\\x01\\x0d\\x01\\x0d\\x01\\x0d\\x01\\x06\\x01\\x06\\x01\\x26\\x01\\x0c\\x01\\x12\\x01\\x0c\\x01\\x04\\x01\\x1a\\x01\\x0a\\x01\\x06\\x01\\x17\\x01\\x0c\\x01\\x0a\\x01\\x06\\x01\\x0d\\x01\\x0d\\x01\\x1e\\x01\\x23\\x01\\x23\\x01\\x0c\\x01\\x0a\\x01\\x06\\x01\\x0c\\x01\\x06\\x01\\x0c\\x01\\x0e\\x01\\x0c\\x01\\x1f\\x01\\x1c\\x01\\x20\\x01\\x1b\\x01\\x0e\\x01};
-create temporary table planes as SELECT station, (ts-CAST('1970-01-01' AS
timestamp)), lat, lon, alt*0.3048 FROM streams WHERE type = 2 and alt > 0 with
data;
+-- times 1000 to get milliseconds
+create temporary table planes as SELECT station, (ts-CAST('1970-01-01' AS
timestamp))*1000, lat, lon, alt*0.3048 FROM streams WHERE type = 2 and alt > 0
with data;
select * from numpy_distance_encoded( (SELECT * FROM planes AS p) );
drop table planes;
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2799,7 +2799,8 @@ stmt_convert(backend *be, stmt *v, sql_s
} else if (f->type->eclass == EC_DEC) {
/* scale of the current decimal */
q = pushInt(mb, q, f->scale);
- } else if (f->type->eclass == EC_SEC && t->type->eclass == EC_FLT) {
+ } else if (f->type->eclass == EC_SEC &&
+ (EC_COMPUTE(t->type->eclass) || t->type->eclass == EC_DEC)) {
/* scale of the current decimal */
q = pushInt(mb, q, 3);
}
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
@@ -32,14 +32,14 @@ stdout of test 'timestamp_convert.Bug-38
% .L3 # table_name
% L3 # name
% bigint # type
-% 4 # length
-[ 1000 ]
+% 1 # length
+[ 1 ]
#SELECT CONVERT( (str_to_timestamp('2015-10-01', '%Y-%m-%d') -
str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400, BIGINT);
% .L2 # table_name
% L2 # name
% bigint # type
-% 4 # length
-[ 1000 ]
+% 1 # length
+[ 1 ]
#SELECT (str_to_timestamp('2015-10-01', '%Y-%m-%d') -
str_to_timestamp('2015-09-30', '%Y-%m-%d'))/86400.0;
% .L2 # table_name
% L2 # name
diff --git a/sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql
b/sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql
--- a/sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql
+++ b/sql/test/BugTracker-2016/Tests/epoch.Bug-3979.sql
@@ -1,3 +1,3 @@
SELECT epoch((1460453860-300) * 1000);
SELECT epoch(CAST(1460453860-300 AS INTEGER));
-SELECT epoch(CAST(1460453860-300 AS INTERVAL SECOND));
+SELECT epoch(CAST(CAST(1460453860-300 AS INTERVAL SECOND) AS INTEGER));
diff --git a/sql/test/pg_regress/Tests/interval.stable.out.int128
b/sql/test/pg_regress/Tests/interval.stable.out.int128
--- a/sql/test/pg_regress/Tests/interval.stable.out.int128
+++ b/sql/test/pg_regress/Tests/interval.stable.out.int128
@@ -75,13 +75,13 @@ stdout of test 'interval` in directory '
% L3 # name
% double # type
% 24 # length
-[ 3.1756752e+13 ]
+[ 3.1756752e+10 ]
#select avg(cast(f1 as decimal(22,3))) from interval_tbl;
% sys.L3 # table_name
% L3 # name
% double # type
% 24 # length
-[ 3.1756752e+13 ]
+[ 3.1756752e+10 ]
#select min(f1) from interval_tbl;
% sys.L2 # table_name
% L2 # name
@@ -99,7 +99,7 @@ stdout of test 'interval` in directory '
% L3 # name
% decimal # type
% 40 # length
-[ 63513504001234.000 ]
+[ 63513504001.234 ]
#select count(f1) from interval_tbl;
% sys.L2 # table_name
% L2 # name
diff --git a/sql/test/snodgrass/Tests/cast_select.sql
b/sql/test/snodgrass/Tests/cast_select.sql
--- a/sql/test/snodgrass/Tests/cast_select.sql
+++ b/sql/test/snodgrass/Tests/cast_select.sql
@@ -23,5 +23,5 @@ SELECT CAST( INTERVAL'86 00:00:00' DAY T
SELECT CAST('86 00:00:00' AS INTERVAL HOUR(3) TO SECOND ); -- err: overflow
exception
SELECT CAST( CAST( 7430400 AS INTERVAL SECOND ) AS INTERVAL DAY TO SECOND ) =
INTERVAL '86 00:00:00' DAY TO SECOND;
SELECT CAST(DATE '1997-01-01' AS CHARACTER(10)) = '1997-01-01';
-SELECT CAST(INTERVAL '7430400' SECOND AS BIGINT) = 7430400000;
-SELECT CAST(CAST(INTERVAL '2064:00:00' HOUR TO SECOND AS INTERVAL SECOND) AS
BIGINT) = 7430400000;
+SELECT CAST(INTERVAL '7430400' SECOND AS BIGINT) = 7430400;
+SELECT CAST(CAST(INTERVAL '2064:00:00' HOUR TO SECOND AS INTERVAL SECOND) AS
BIGINT) = 7430400;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list