Changeset: f1010cea0102 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f1010cea0102
Modified Files:
monetdb5/modules/atoms/mtime.mx
sql/common/sql_types.c
sql/test/BugTracker-2011/Tests/All
sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.sql
sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.err
sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.out
Branch: Apr2011
Log Message:
fixed bug 2793, ie implemented extract( seconds) including fractional milli
seconds.
diffs (229 lines):
diff --git a/monetdb5/modules/atoms/mtime.mx b/monetdb5/modules/atoms/mtime.mx
--- a/monetdb5/modules/atoms/mtime.mx
+++ b/monetdb5/modules/atoms/mtime.mx
@@ -581,6 +581,12 @@
command batmtime.seconds(d:bat[:any_1,:daytime]):bat[:any_1,:int]
address MTIMEdaytime_extract_seconds_bulk;
+command sql_seconds(d:daytime) :int
+address MTIMEdaytime_extract_sql_seconds
+comment "extracts seconds (with fractional milliseconds) from daytime";
+command batmtime.sql_seconds(d:bat[:any_1,:daytime]):bat[:any_1,:int]
+address MTIMEdaytime_extract_sql_seconds_bulk;
+
command milliseconds(d:daytime) :int
address MTIMEdaytime_extract_milliseconds
comment "extracts milliseconds from daytime";
@@ -771,6 +777,8 @@
address MTIMEtimestamp_minutes;
command seconds(t:timestamp):int
address MTIMEtimestamp_seconds;
+command sql_seconds(t:timestamp):int
+address MTIMEtimestamp_sql_seconds;
command milliseconds(t:timestamp):int
address MTIMEtimestamp_milliseconds;
@@ -986,6 +994,7 @@
mtime_export str MTIMEdaytime_extract_hours(int *ret, daytime *v);
mtime_export str MTIMEdaytime_extract_minutes(int *ret, daytime *v);
mtime_export str MTIMEdaytime_extract_seconds(int *ret, daytime *v);
+mtime_export str MTIMEdaytime_extract_sql_seconds(int *ret, daytime *v);
mtime_export str MTIMEdaytime_extract_milliseconds(int *ret, daytime *v);
mtime_export str MTIMEtimestamp_extract_daytime(daytime *ret, timestamp *t,
tzone *z);
mtime_export str MTIMEtimestamp_extract_daytime_default(daytime *ret,
timestamp *t);
@@ -1012,6 +1021,7 @@
mtime_export str MTIMEtimestamp_hours(int *ret, timestamp *t);
mtime_export str MTIMEtimestamp_minutes(int *ret, timestamp *t);
mtime_export str MTIMEtimestamp_seconds(int *ret, timestamp *t);
+mtime_export str MTIMEtimestamp_sql_seconds(int *ret, timestamp *t);
mtime_export str MTIMEtimestamp_milliseconds(int *ret, timestamp *t);
mtime_export str MTIMEsql_year(int *ret, int *t);
mtime_export str MTIMEsql_month(int *ret, int *t);
@@ -1093,6 +1103,7 @@
@:ExtractExport(daytime,hours)@
@:ExtractExport(daytime,minutes)@
@:ExtractExport(daytime,seconds)@
+@:ExtractExport(daytime,sql_seconds)@
@:ExtractExport(daytime,milliseconds)@
@@ -2302,6 +2313,20 @@
return GDK_SUCCEED;
}
+/* extracts (milli) seconds from daytime (value between 0 and 59000) */
+static inline int
+daytime_extract_sql_seconds(int *ret, daytime *v)
+{
+ int sec, milli;
+ if (*v == daytime_nil) {
+ *ret = int_nil;
+ } else {
+ fromtime((int) *v, &dummy, &dummy, &sec, &milli);
+ *ret = sec* 1000 + milli;
+ }
+ return GDK_SUCCEED;
+}
+
/* extracts milliseconds from daytime (value between 0 and 999) */
static inline int
daytime_extract_milliseconds(int *ret, daytime *v)
@@ -3303,6 +3328,13 @@
}
str
+MTIMEdaytime_extract_sql_seconds(int *ret, daytime *v)
+{
+ daytime_extract_sql_seconds(ret, v);
+ return MAL_SUCCEED;
+}
+
+str
MTIMEdaytime_extract_milliseconds(int *ret, daytime *v)
{
daytime_extract_milliseconds(ret, v);
@@ -3955,6 +3987,14 @@
return MAL_SUCCEED;
}
str
+MTIMEtimestamp_sql_seconds(int *ret, timestamp *t)
+{
+ daytime d;
+ timestamp_extract_daytime(&d, t, &tzone_local);
+ daytime_extract_sql_seconds(ret, &d);
+ return MAL_SUCCEED;
+}
+str
MTIMEtimestamp_milliseconds(int *ret, timestamp *t)
{
daytime d;
@@ -4052,6 +4092,7 @@
@:Extract(daytime,hours,int)@
@:Extract(daytime,minutes,int)@
@:Extract(daytime,seconds,int)@
+@:Extract(daytime,sql_seconds,int)@
@:Extract(daytime,milliseconds,int)@
str
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
@@ -1423,7 +1423,7 @@
sql_create_func("day", "mtime", "day", DTE, NULL, INT, SCALE_FIX);
sql_create_func("hour", "mtime", "hours", TME, NULL, INT, SCALE_FIX);
sql_create_func("minute", "mtime", "minutes", TME, NULL, INT,
SCALE_FIX);
- f = sql_create_func("second", "mtime", "milliseconds", TME, NULL, DEC,
SCALE_NONE);
+ f = sql_create_func("second", "mtime", "sql_seconds", TME, NULL, DEC,
SCALE_NONE);
/* fix result type */
f->res.scale = 3;
@@ -1432,7 +1432,7 @@
sql_create_func("day", "mtime", "day", TMESTAMP, NULL, INT, SCALE_FIX);
sql_create_func("hour", "mtime", "hours", TMESTAMP, NULL, INT,
SCALE_FIX);
sql_create_func("minute", "mtime", "minutes", TMESTAMP, NULL, INT,
SCALE_FIX);
- f = sql_create_func("second", "mtime", "milliseconds", TMESTAMP, NULL,
DEC, SCALE_NONE);
+ f = sql_create_func("second", "mtime", "sql_seconds", TMESTAMP, NULL,
DEC, SCALE_NONE);
/* fix result type */
f->res.scale = 3;
diff --git a/sql/test/BugTracker-2011/Tests/All
b/sql/test/BugTracker-2011/Tests/All
--- a/sql/test/BugTracker-2011/Tests/All
+++ b/sql/test/BugTracker-2011/Tests/All
@@ -1,3 +1,4 @@
correlated-update.Bug-2771
double_erange.Bug-2774
view_avg_incorrect_result.Bug-2790
+extract_seconds.Bug-2793
diff --git a/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.sql
b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.sql
@@ -0,0 +1,1 @@
+select extract(second from timestamp '2011-3-10 9:30:42.246');
diff --git a/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.err
b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.err
@@ -0,0 +1,39 @@
+stderr of test 'extract_seconds.Bug-2793` in directory 'test/BugTracker-2011`
itself:
+
+
+# 11:57:21 >
+# 11:57:21 > mserver5 --debug=10 --set gdk_nr_threads=0 --set
"gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set
mapi_open=true --set mapi_port=36602 --set monet_prompt= --trace --forcemito
--set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0
; echo ; echo Over..
+# 11:57:21 >
+
+# builtin opt gdk_dbname = demo
+# builtin opt gdk_dbfarm =
/ufs/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm
+# builtin opt gdk_debug = 0
+# builtin opt gdk_alloc_map = no
+# 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 default_pipe =
inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,garbageCollector
+# builtin opt minimal_pipe = inline,remap,deadcode,multiplex,garbageCollector
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt gdk_dbfarm =
/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 36602
+# cmdline opt monet_prompt =
+# cmdline opt mal_listing = 2
+# cmdline opt gdk_dbname = mTests_test_BugTracker-2011
+# cmdline opt mal_listing = 0
+
+# 11:57:21 >
+# 11:57:21 > mclient -lsql -ftest -i -e --host=alf --port=36602
+# 11:57:21 >
+
+
+# 11:57:21 >
+# 11:57:21 > Done.
+# 11:57:21 >
+
diff --git a/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.out
b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2011/Tests/extract_seconds.Bug-2793.stable.out
@@ -0,0 +1,38 @@
+stdout of test 'extract_seconds.Bug-2793` in directory 'test/BugTracker-2011`
itself:
+
+
+# 11:57:21 >
+# 11:57:21 > mserver5 --debug=10 --set gdk_nr_threads=0 --set
"gdk_dbfarm=/ufs/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB" --set
mapi_open=true --set mapi_port=36602 --set monet_prompt= --trace --forcemito
--set mal_listing=2 "--dbname=mTests_test_BugTracker-2011" --set mal_listing=0
; echo ; echo Over..
+# 11:57:21 >
+
+# MonetDB 5 server v11.3.0
+# This is an unreleased version
+# Serving database 'mTests_test_BugTracker-2011', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically
linked
+# Found 7.752 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2011 MonetDB B.V., all rights reserved
+# Visit http://monetdb.cwi.nl/ for further information
+# Listening for connection requests on mapi:monetdb://alf.ins.cwi.nl:36602/
+# MonetDB/SQL module loaded
+# MonetDB/GIS module loaded
+
+Ready.
+
+Over..
+
+# 11:57:21 >
+# 11:57:21 > mclient -lsql -ftest -i -e --host=alf --port=36602
+# 11:57:21 >
+
+#select extract(second from timestamp '2011-3-10 9:30:42.246');
+% . # table_name
+% second_single_value # name
+% decimal # type
+% 11 # length
+[ 42.246 ]
+
+# 11:57:21 >
+# 11:57:21 > Done.
+# 11:57:21 >
+
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list