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