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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list