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

Reply via email to