Changeset: 70f3f8a014f8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=70f3f8a014f8
Added Files:
        sql/backends/monet5/generator/90_generator.mal
        sql/backends/monet5/generator/90_generator.sql
        sql/backends/monet5/generator/Makefile.ag
        sql/backends/monet5/generator/Tests/All
        sql/backends/monet5/generator/Tests/generator00.sql
        sql/backends/monet5/generator/Tests/generator00.stable.err
        sql/backends/monet5/generator/Tests/generator00.stable.out
        sql/backends/monet5/generator/Tests/generator01.sql
        sql/backends/monet5/generator/Tests/generator01.stable.err
        sql/backends/monet5/generator/Tests/generator01.stable.out
        sql/backends/monet5/generator/Tests/generator02.sql
        sql/backends/monet5/generator/Tests/generator02.stable.err
        sql/backends/monet5/generator/Tests/generator02.stable.out
        sql/backends/monet5/generator/Tests/generator03.sql
        sql/backends/monet5/generator/Tests/generator03.stable.err
        sql/backends/monet5/generator/Tests/generator03.stable.out
        sql/backends/monet5/generator/generator.c
        sql/backends/monet5/generator/generator.h
        sql/backends/monet5/generator/generator.mal
Modified Files:
        gdk/gdk.h
        gdk/gdk_imprints.c
        sql/backends/monet5/Makefile.ag
Branch: transaction-replication
Log Message:

Merge with default branch


diffs (truncated from 1718 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2196,6 +2196,8 @@ gdk_export void IMPSdestroy(BAT *b);
 gdk_export BAT *BATimprints(BAT *b);
 gdk_export lng IMPSimprintsize(BAT *b);
 
+gdk_export BAT *BATbloom(BAT *b);
+
 /*
  * @- Multilevel Storage Modes
  *
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -902,3 +902,120 @@ do {                                                      
                \
        free(s);
 }
 #endif
+
+/* round hashing */
+
+#define smpl_xor_rng(R,X) {\
+R = X; \
+R ^= (R<<13); \
+R ^= (R>>17); \
+R ^= (R<<5); \
+}
+
+#define hash_init(S,X,Y,Z) {\
+smpl_xor_rng(X,S); \
+smpl_xor_rng(Y,X); \
+smpl_xor_rng(Z,Y); \
+}
+
+#define next_hash(N,X,Y,Z) {\
+N = (X^(X<<3))^(Y^(Y>>19))^(Z^(Z<<6)); \
+X = Y; \
+Y = Z; \
+Z = N; \
+}
+
+#define hash_mod(V,MOD) ((V) % (MOD))
+
+BAT *
+BATbloom(BAT *b) {
+       BAT *bn;
+       BUN cnt;
+       BUN mn;
+       BUN p;
+       bit *o;
+
+       assert(BAThdense(b)); /* assert void head */
+
+       switch (ATOMstorage(b->T->type)) {
+       case TYPE_bte:
+       case TYPE_sht:
+       case TYPE_int:
+       case TYPE_lng:
+       case TYPE_flt:
+       case TYPE_dbl:
+               break;
+       default: /* type not supported */
+               GDKerror("#BATbloom: col type not "
+                        "suitable for bloom filters.\n");
+               return b; /* do nothing */
+       }
+
+       BATcheck(b, "BATblooms");
+
+       cnt = BATcount(b);
+       mn = 4 * cnt; /* make it power of 2 for faster modulo */
+
+       bn = BATnew(TYPE_void, TYPE_bit, mn);
+       if (bn == NULL) {
+               GDKerror("#BATbloom: memory allocation error");
+               return NULL;
+       }
+
+       o = (bit *) Tloc(bn, BUNfirst(bn));
+       for (p = 0; p < mn; p++) {
+               o[p] = 0;
+       }
+
+#define BLOOM_BUILD(TYPE)                                              \
+do {                                                                           
        \
+       oid key,hv,x,y,z; /* for hashing */                     \
+       TYPE *ob = (TYPE *)Tloc(b, BUNfirst(b));        \
+       for (p = 0; p < cnt; p++) {                                     \
+               key = (oid) ob[p];                                              
\
+               hash_init(key, x,y,z);                                  \
+               next_hash(hv, x,y,z);                                   \
+               o[hash_mod(hv,mn)] = 1;                                 \
+               next_hash(hv, x,y,z);                                   \
+               o[hash_mod(hv,mn)] = 1;                                 \
+               next_hash(hv, x,y,z);                                   \
+               o[hash_mod(hv,mn)] = 1;                                 \
+       }                                                                       
                \
+} while (0)
+               switch (ATOMstorage(b->T->type)) {
+               case TYPE_bte:
+                       BLOOM_BUILD(bte);
+                       break;
+               case TYPE_sht:
+                       BLOOM_BUILD(sht);
+                       break;
+               case TYPE_int:
+                       BLOOM_BUILD(int);
+                       break;
+               case TYPE_lng:
+                       BLOOM_BUILD(lng);
+                       break;
+               case TYPE_flt:
+                       BLOOM_BUILD(flt);
+                       break;
+               case TYPE_dbl:
+                       BLOOM_BUILD(dbl);
+                       break;
+               default:
+                       /* should never reach here */
+                       assert(0);
+               }
+
+               /* property management */
+               BATsetcount(bn, mn);
+               bn->trevsorted = 0;
+               bn->tsorted = 0;
+               bn->tkey = 0;
+               bn->tdense = 0;
+               bn->hdense = 1;
+               bn->hseqbase = 0;
+               bn->hkey = 1;
+               bn->hrevsorted = bn->batCount <= 1;
+
+               return bn;
+}
diff --git a/sql/backends/monet5/Makefile.ag b/sql/backends/monet5/Makefile.ag
--- a/sql/backends/monet5/Makefile.ag
+++ b/sql/backends/monet5/Makefile.ag
@@ -15,7 +15,7 @@
 # Copyright August 2008-2014 MonetDB B.V.
 # All Rights Reserved.
 
-SUBDIRS = NOT_WIN32?vaults UDF LSST ENABLE_DATACELL?datacell 
HAVE_JSONSTORE?rest HAVE_GSL?gsl
+SUBDIRS = NOT_WIN32?vaults UDF LSST ENABLE_DATACELL?datacell 
HAVE_JSONSTORE?rest HAVE_GSL?gsl generator
 
 INCLUDES = ../../include ../../common ../../storage ../../server \
                   ../../../monetdb5/modules/atoms \
diff --git a/sql/backends/monet5/generator/90_generator.mal 
b/sql/backends/monet5/generator/90_generator.mal
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/90_generator.mal
@@ -0,0 +1,18 @@
+# The contents of this file are subject to the MonetDB Public License
+# Version 1.1 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.monetdb.org/Legal/MonetDBLicense
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+# License for the specific language governing rights and limitations
+# under the License.
+#
+# The Original Code is the MonetDB Database System.
+#
+# The Initial Developer of the Original Code is CWI.
+# Portions created by CWI are Copyright (C) 1997-July 2008 CWI.
+# Copyright August 2008-2014 MonetDB B.V.
+# All Rights Reserved.
+
+include generator;
diff --git a/sql/backends/monet5/generator/90_generator.sql 
b/sql/backends/monet5/generator/90_generator.sql
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/90_generator.sql
@@ -0,0 +1,77 @@
+-- The contents of this file are subject to the MonetDB Public License
+-- Version 1.1 (the "License"); you may not use this file except in
+-- compliance with the License. You may obtain a copy of the License at
+-- http://www.monetdb.org/Legal/MonetDBLicense
+--
+-- Software distributed under the License is distributed on an "AS IS"
+-- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-- License for the specific language governing rights and limitations
+-- under the License.
+--
+-- The Original Code is the MonetDB Database System.
+--
+-- The Initial Developer of the Original Code is CWI.
+-- Portions created by CWI are Copyright (C) 1997-July 2008 CWI.
+-- Copyright August 2008-2014 MonetDB B.V.
+-- All Rights Reserved.
+
+-- Author M.Kersten
+-- The vault is the container for all foreign file support functionalities
+
+-- example of a (void) foreign file interface
+
+create function sys.generate_series(first tinyint, last tinyint)
+returns table (value tinyint)
+external name vault.generate_series;
+
+create function sys.generate_series(first tinyint, last tinyint, stepsize 
tinyint)
+returns table (value tinyint)
+external name vault.generate_series;
+
+create function sys.generate_series(first int, last int)
+returns table (value int)
+external name vault.generate_series;
+
+create function sys.generate_series(first int, last int, stepsize int)
+returns table (value int)
+external name vault.generate_series;
+
+create function sys.generate_series(first bigint, last bigint)
+returns table (value bigint)
+external name vault.generate_series;
+
+create function sys.generate_series(first bigint, last bigint, stepsize bigint)
+returns table (value bigint)
+external name vault.generate_series;
+
+create function sys.generate_series(first real, last real, stepsize real)
+returns table (value real)
+external name vault.generate_series;
+
+create function sys.generate_series(first double, last double, stepsize double)
+returns table (value double)
+external name vault.generate_series;
+
+create function sys.generate_series(first decimal(10,2), last decimal(10,2), 
stepsize decimal(10,2))
+returns table (value decimal(10,2))
+external name vault.generate_series;
+
+create function sys.generate_series(first timestamp, last timestamp, stepsize 
interval second)
+returns table (value timestamp)
+external name vault.generate_series;
+
+-- create function sys.generate_series(first timestamp, last timestamp, 
stepsize interval minute)
+-- returns table (value timestamp)
+-- external name vault.generate_series;
+-- 
+-- create function sys.generate_series(first timestamp, last timestamp, 
stepsize interval hour)
+-- returns table (value timestamp)
+-- external name vault.generate_series;
+-- 
+-- create function sys.generate_series(first timestamp, last timestamp, 
stepsize interval day)
+-- returns table (value timestamp)
+-- external name vault.generate_series;
+-- 
+-- create function sys.generate_series(first timestamp, last timestamp, 
stepsize interval month)
+-- returns table (value timestamp)
+-- external name vault.generate_series;
diff --git a/sql/backends/monet5/generator/Makefile.ag 
b/sql/backends/monet5/generator/Makefile.ag
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/Makefile.ag
@@ -0,0 +1,62 @@
+# The contents of this file are subject to the MonetDB Public License
+# Version 1.1 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.monetdb.org/Legal/MonetDBLicense
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+# License for the specific language governing rights and limitations
+# under the License.
+#
+# The Original Code is the MonetDB Database System.
+#
+# The Initial Developer of the Original Code is CWI.
+# Portions created by CWI are Copyright (C) 1997-July 2008 CWI.
+# Copyright August 2008-2014 MonetDB B.V.
+# All Rights Reserved.
+
+INCLUDES = ../../../include \
+                  ../../../common \
+                  ../../../storage \
+                  ../../../server ../.. \
+                  ../../../../monetdb5/modules/atoms \
+                  ../../../../monetdb5/modules/kernel \
+                  ../../../../monetdb5/mal \
+                  ../../../../monetdb5/modules/mal \
+                  ../../../../monetdb5/optimizer \
+                  ../../../../monetdb5/scheduler \
+                  ../../../../clients/mapilib \
+                  ../../../../common/options \
+                  ../../../../common/stream \
+                  ../../../../common/utils \
+                  ../../../../gdk \
+                  $(READLINE_INCS) $(MSEED_CFLAGS) $(curl_CFLAGS)
+
+lib__generator = {
+       MODULE
+       DIR = libdir/monetdb5
+       SOURCES = generator.c 
+       LIBS = ../../../../monetdb5/tools/libmonetdb5 \
+                  ../../../../gdk/libbat $(curl_LIBS)
+}
+
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to