Changeset: 14b60d882564 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=14b60d882564
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:
        sql/backends/monet5/Makefile.ag
Branch: default
Log Message:

Generate_series module checkin
This directory contains a template to produce a single column table using 
generated data.
(An extended version of the generate_series available in  Postgresql)

The program is optimized by on the fly replacement of the function 
vault.generate_series()
into generate_series.noop()  that allows to work on the parameters of the 
generator directly.
It shows how a (theta)select and leftfetchjoin function are replaced by a 
dedicated version
by self-modifying the MAL plan.

The current implementation does not exploit the candidate set arguments yet.

The collection could be extended to also accomodate arbitrary value joins 
against the generated
sequence, i.e. without its materialization first.


diffs (truncated from 1582 to 300 lines):

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)
+}
+
+headers_mal = {
+       HEADERS = mal
+       DIR = libdir/monetdb5
+       SOURCES = generator.mal
+}
+
+headers_sql = {
+       HEADERS = sql
+       DIR = libdir/monetdb5/createdb
+       SOURCES = 90_generator.sql
+}
+
+headers_autoload = {
+       HEADERS = mal
+       DIR = libdir/monetdb5/autoload
+       SOURCES = 90_generator.mal
+}
+
+EXTRA_DIST_DIR = Tests
+EXTRA_DIST = 90_generator.mal 90_generator.sql generator.mal
diff --git a/sql/backends/monet5/generator/Tests/All 
b/sql/backends/monet5/generator/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/Tests/All
@@ -0,0 +1,4 @@
+generator00
+generator01
+generator02
+generator03
diff --git a/sql/backends/monet5/generator/Tests/generator00.sql 
b/sql/backends/monet5/generator/Tests/generator00.sql
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/Tests/generator00.sql
@@ -0,0 +1,7 @@
+select * from generate_series(0,10,2);
+
+select * from generate_series(0,10,2) 
+where value <5;
+
+select * from generate_series(0,10,2) as v
+where value <7 and value >3;
diff --git a/sql/backends/monet5/generator/Tests/generator00.stable.err 
b/sql/backends/monet5/generator/Tests/generator00.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/Tests/generator00.stable.err
@@ -0,0 +1,36 @@
+stderr of test 'generator00` in directory 'sql/backends/monet5/generator` 
itself:
+
+
+# 18:09:06 >  
+# 18:09:06 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30145" "--set" 
"mapi_usock=/var/tmp/mtest-27022/.s.monetdb.30145" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch1/mk/vault//Linux/var/MonetDB/mTests_sql_backends_monet5_vaults_generator"
 "--set" "mal_listing=0"
+# 18:09:06 >  
+
+# builtin opt  gdk_dbpath = 
/export/scratch1/mk/vault//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 = 30145
+# cmdline opt  mapi_usock = /var/tmp/mtest-27022/.s.monetdb.30145
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/export/scratch1/mk/vault//Linux/var/MonetDB/mTests_sql_backends_monet5_vaults_generator
+# cmdline opt  mal_listing = 0
+# cmdline opt  gdk_debug = 536870922
+
+# 18:09:06 >  
+# 18:09:06 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-27022" "--port=30145"
+# 18:09:06 >  
+
+
+# 18:09:07 >  
+# 18:09:07 >  "Done."
+# 18:09:07 >  
+
diff --git a/sql/backends/monet5/generator/Tests/generator00.stable.out 
b/sql/backends/monet5/generator/Tests/generator00.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/generator/Tests/generator00.stable.out
@@ -0,0 +1,86 @@
+stdout of test 'generator00` in directory 'sql/backends/monet5/generator` 
itself:
+
+
+# 18:09:06 >  
+# 18:09:06 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30145" "--set" 
"mapi_usock=/var/tmp/mtest-27022/.s.monetdb.30145" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch1/mk/vault//Linux/var/MonetDB/mTests_sql_backends_monet5_vaults_generator"
 "--set" "mal_listing=0"
+# 18:09:06 >  
+
+# MonetDB 5 server v11.18.0
+# This is an unreleased version
+# Serving database 'mTests_sql_backends_monet5_vaults_generator', using 8 
threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically 
linked
+# Found 15.591 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2014 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:30145/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-27022/.s.monetdb.30145
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 11_times.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 19_cluster.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_functions.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 24_zorder.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 41_jsonstore.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_gsl.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 99_system.sql
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to