Changeset: 99f7ab4f895f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=99f7ab4f895f
Added Files:
        monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
        monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.err
        monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.out
Modified Files:
        monetdb5/modules/mosaic/Tests/All
        monetdb5/modules/mosaic/mosaic_calendar.c
Branch: mosaic
Log Message:

Minor fixes to calendar


diffs (truncated from 369 to 300 lines):

diff --git a/monetdb5/modules/mosaic/Tests/All 
b/monetdb5/modules/mosaic/Tests/All
--- a/monetdb5/modules/mosaic/Tests/All
+++ b/monetdb5/modules/mosaic/Tests/All
@@ -8,6 +8,7 @@ mosaic_delta
 mosaic_linear
 mosaic_frame
 mosaic_prefix
+mosaic_calendar
 
 mosaic_literal_double
 
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC 
b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
@@ -0,0 +1,35 @@
+# Calendar compressions
+
+
+d:= bat.new(:date);
+bat.append(d,"2014-08-14":date);
+bat.append(d,"2014-08-14":date);
+bat.append(d,"2014-08-14":date);
+bat.append(d,"2014-08-14":date);
+bat.append(d,"2014-08-15":date);
+bat.append(d,"2015-07-11":date);
+bat.append(d,"2015-07-12":date);
+bat.append(d,"2016-12-31":date);
+d:= bat.append(d,d);
+
+io.print(d);
+mosaic.compress(d,"calendar");
+#mosaic.dump(xd);
+mosaic.decompress(d);
+io.print(d);
+
+bs:= bat.new(:timestamp);
+bat.append(bs,"2014-08-14 12:00:00":timestamp);
+bat.append(bs,"2014-08-14 12:00:00":timestamp);
+bat.append(bs,"2014-08-14 12:00:00":timestamp);
+bat.append(bs,"2014-08-14 12:00:00":timestamp);
+bat.append(bs,"2014-08-14 12:00:00":timestamp);
+bat.append(bs,"2014-08-14 12:01:00":timestamp);
+bat.append(bs,"2014-08-14 12:02:00":timestamp);
+bs:= bat.append(bs,bs);
+
+io.print(bs);
+mosaic.compress(bs,"calendar");
+#mosaic.dump(bs);
+mosaic.decompress(bs);
+io.print(bs);
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.err 
b/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.err
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.err
@@ -0,0 +1,36 @@
+stderr of test 'mosaic_calendar` in directory 'monetdb5/modules/mosaic` itself:
+
+
+# 10:49:14 >  
+# 10:49:14 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=33013" "--set" 
"mapi_usock=/var/tmp/mtest-2985/.s.monetdb.33013" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mosaic"
 "--set" "embedded_r=yes" "--set" "embedded_py=true"
+# 10:49:14 >  
+
+# builtin opt  gdk_dbpath = 
/export/scratch1/mk/mosaic//Linux/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 = 33013
+# cmdline opt  mapi_usock = /var/tmp/mtest-2985/.s.monetdb.33013
+# cmdline opt  monet_prompt = 
+# cmdline opt  gdk_dbpath = 
/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mosaic
+# cmdline opt  embedded_r = yes
+# cmdline opt  embedded_py = true
+# cmdline opt  gdk_debug = 536870922
+
+# 10:49:15 >  
+# 10:49:15 >  "mclient" "-lmal" "-ftest" "-Eutf-8" 
"--host=/var/tmp/mtest-2985" "--port=33013"
+# 10:49:15 >  
+
+
+# 10:49:15 >  
+# 10:49:15 >  "Done."
+# 10:49:15 >  
+
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.out 
b/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.out
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mosaic/Tests/mosaic_calendar.stable.out
@@ -0,0 +1,108 @@
+stdout of test 'mosaic_calendar` in directory 'monetdb5/modules/mosaic` itself:
+
+
+# 10:49:14 >  
+# 10:49:14 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=33013" "--set" 
"mapi_usock=/var/tmp/mtest-2985/.s.monetdb.33013" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/export/scratch1/mk/mosaic//Linux/var/MonetDB/mTests_monetdb5_modules_mosaic"
 "--set" "embedded_r=yes" "--set" "embedded_py=true"
+# 10:49:14 >  
+
+# MonetDB 5 server v11.26.0
+# This is an unreleased version
+# Serving database 'mTests_monetdb5_modules_mosaic', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers
+# Found 15.589 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2016 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://vienna.da.cwi.nl:33013/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-2985/.s.monetdb.33013
+# MonetDB/SQL module loaded
+# MonetDB/Python module loaded
+# MonetDB/R   module loaded
+
+Ready.
+
+# 10:49:15 >  
+# 10:49:15 >  "mclient" "-lmal" "-ftest" "-Eutf-8" 
"--host=/var/tmp/mtest-2985" "--port=33013"
+# 10:49:15 >  
+
+#--------------------------#
+# h    t  # name
+# void date  # type
+#--------------------------#
+[ 0@0, 2014-08-14      ]
+[ 1@0, 2014-08-14      ]
+[ 2@0, 2014-08-14      ]
+[ 3@0, 2014-08-14      ]
+[ 4@0, 2014-08-15      ]
+[ 5@0, 2015-07-11      ]
+[ 6@0, 2015-07-12      ]
+[ 7@0, 2016-12-31      ]
+[ 8@0, 2014-08-14      ]
+[ 9@0, 2014-08-14      ]
+[ 10@0,        2014-08-14      ]
+[ 11@0,        2014-08-14      ]
+[ 12@0,        2014-08-15      ]
+[ 13@0,        2015-07-11      ]
+[ 14@0,        2015-07-12      ]
+[ 15@0,        2016-12-31      ]
+#--------------------------#
+# h    t  # name
+# void date  # type
+#--------------------------#
+[ 0@0, 2014-08-14      ]
+[ 1@0, 2014-08-14      ]
+[ 2@0, 2014-08-14      ]
+[ 3@0, 2014-08-14      ]
+[ 4@0, 2014-08-15      ]
+[ 5@0, 2015-07-11      ]
+[ 6@0, 2015-07-12      ]
+[ 7@0, 2016-12-31      ]
+[ 8@0, 2014-08-14      ]
+[ 9@0, 2014-08-14      ]
+[ 10@0,        2014-08-14      ]
+[ 11@0,        2014-08-14      ]
+[ 12@0,        2014-08-15      ]
+[ 13@0,        2015-07-11      ]
+[ 14@0,        2015-07-12      ]
+[ 15@0,        2016-12-31      ]
+#--------------------------#
+# h    t  # name
+# void timestamp  # type
+#--------------------------#
+[ 0@0, 2014-08-14 12:00:00.000 ]
+[ 1@0, 2014-08-14 12:00:00.000 ]
+[ 2@0, 2014-08-14 12:00:00.000 ]
+[ 3@0, 2014-08-14 12:00:00.000 ]
+[ 4@0, 2014-08-14 12:00:00.000 ]
+[ 5@0, 2014-08-14 12:01:00.000 ]
+[ 6@0, 2014-08-14 12:02:00.000 ]
+[ 7@0, 2014-08-14 12:00:00.000 ]
+[ 8@0, 2014-08-14 12:00:00.000 ]
+[ 9@0, 2014-08-14 12:00:00.000 ]
+[ 10@0,        2014-08-14 12:00:00.000 ]
+[ 11@0,        2014-08-14 12:00:00.000 ]
+[ 12@0,        2014-08-14 12:01:00.000 ]
+[ 13@0,        2014-08-14 12:02:00.000 ]
+#--------------------------#
+# h    t  # name
+# void timestamp  # type
+#--------------------------#
+[ 0@0, 2014-08-14 12:00:00.000 ]
+[ 1@0, 2014-08-14 12:00:00.000 ]
+[ 2@0, 2014-08-14 12:00:00.000 ]
+[ 3@0, 2014-08-14 12:00:00.000 ]
+[ 4@0, 2014-08-14 12:00:00.000 ]
+[ 5@0, 2014-08-14 12:01:00.000 ]
+[ 6@0, 2014-08-14 12:02:00.000 ]
+[ 7@0, 2014-08-14 12:00:00.000 ]
+[ 8@0, 2014-08-14 12:00:00.000 ]
+[ 9@0, 2014-08-14 12:00:00.000 ]
+[ 10@0,        2014-08-14 12:00:00.000 ]
+[ 11@0,        2014-08-14 12:00:00.000 ]
+[ 12@0,        2014-08-14 12:01:00.000 ]
+[ 13@0,        2014-08-14 12:02:00.000 ]
+
+# 10:49:15 >  
+# 10:49:15 >  "Done."
+# 10:49:15 >  
+
diff --git a/monetdb5/modules/mosaic/mosaic_calendar.c 
b/monetdb5/modules/mosaic/mosaic_calendar.c
--- a/monetdb5/modules/mosaic/mosaic_calendar.c
+++ b/monetdb5/modules/mosaic/mosaic_calendar.c
@@ -137,9 +137,37 @@ MOSskip_calendar(Client cntxt, MOStask t
 
 // Create a larger calendar buffer then we allow for in the mosaic header first
 // Store the most frequent ones in the compressed heap header directly based 
on estimated savings
-// Improve by using binary search rather then linear scan
 #define TMPDICT 16*256
 
+#define makeCalendar(TPE, MASK)\
+{      TPE *val = ((TPE*)task->src) + task->start,v,w;\
+       BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): 
task->stop - task->start;\
+       lng cw,cv;\
+       for(i = 0; i< limit; i++, val++){\
+               v= *val & DAYMASK; \
+               MOSfind(j,dict.val##TPE,v,0,dictsize);\
+               if(j == dictsize && dictsize == 0 ){\
+                       dict.val##TPE[j]= v;\
+                       cnt[j] = 1;\
+                       dictsize++;\
+               } else  \
+               if( dictsize < TMPDICT && dict.val##TPE[j] != v){\
+                       w= v; cw= 1;\
+                       for( ; j< dictsize; j++)\
+                       if (dict.val##TPE[j] > w){\
+                               v =dict.val##TPE[j];\
+                               dict.val##TPE[j]= w;\
+                               w = v;\
+                               cv = cnt[j];\
+                               cnt[j]= cw;\
+                               cw = cv;\
+                       }\
+                       dictsize++;\
+                       dict.val##TPE[j]= w;\
+                       cnt[j] = 1;\
+               } else if (dictsize < TMPDICT) cnt[j]++;\
+} }
+
 /* there are only three kinds of calendardictionaries */
 void
 MOScreatecalendar(Client cntxt, MOStask task)
@@ -162,34 +190,7 @@ MOScreatecalendar(Client cntxt, MOStask 
 
        // compress by factoring out the year-month, keeping 5 bits for the day
        if( task->type == TYPE_date)
-       {       int *val = ((int*)task->src) + task->start,v,w;
-               BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): 
task->stop - task->start;
-               lng cw,cv;
-               for(i = 0; i< limit; i++, val++){
-                       v= *val & ~DAYMASK;
-                       MOSfind(j,dict.valint,v,0,dictsize);
-                       if(j == dictsize && dictsize == 0 ){
-                               dict.valint[j]= v;
-                               cnt[j] = 1;
-                               dictsize++;
-                       } else  
-                       if(dictsize < TMPDICT &&  dict.valint[j] != v){
-                               w= v; cw= 1;
-                               for( ; j< dictsize; j++)
-                               if (dict.valint[j] > w){
-                                       v =dict.valint[j];
-                                       dict.valint[j]= w;
-                                       w = v;
-                                       cv = cnt[j];
-                                       cnt[j]= cw;
-                                       cw = cv;
-                               }
-                               dictsize++;
-                               dict.valint[j]= w;
-                               cnt[j] = cw;
-                       } else cnt[j]++;
-               }
-       }
+               makeCalendar(int,DAYMASK)
        if( task->type == TYPE_daytime){
        }
        if( task->type == TYPE_timestamp){
@@ -282,6 +283,25 @@ MOSestimate_calendar(Client cntxt, MOSta
 }
 
 // insert a series of values into the compressor block using calendar
+#define CALcompress(TPE, MASK)\
+{      TPE *val = ((TPE*)task->src) + task->start, v;\
+       BitVector base = (BitVector) MOScodevector(task);\
+       BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): 
task->stop - task->start;\
+       for(i =0; i<limit; i++, val++){\
+               v = *val & ~MASK;\
+               MOSfind(j,task->hdr->dict.val##TPE,v,0,hdr->dictsize);\
+               if(j == hdr->dictsize || task->hdr->dict.val##TPE[j] !=  v) \
+                       break;\
+               else {\
+                       hdr->checksum.sum##TPE += v;\
+                       hdr->dictfreq[j]++;\
+                       MOSincCnt(blk,1);\
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to