How is this not a new feature?
Martin Kersten wrote:
> Update of /cvsroot/monetdb/MonetDB5/src/optimizer
> In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv2998/optimizer
>
> Modified Files:
> Tag: Feb2009
> Makefile.ag opt_prelude.mx
> Added Files:
> Tag: Feb2009
> opt_derivepath.mx
> Log Message:
> Added the framework for the commissioned derivepath optimizer.
>
>
> U opt_prelude.mx
> Index: opt_prelude.mx
> ===================================================================
> RCS file: /cvsroot/monetdb/MonetDB5/src/optimizer/opt_prelude.mx,v
> retrieving revision 1.55.2.3
> retrieving revision 1.55.2.4
> diff -u -d -r1.55.2.3 -r1.55.2.4
> --- opt_prelude.mx 1 Mar 2009 19:15:30 -0000 1.55.2.3
> +++ opt_prelude.mx 5 Mar 2009 00:17:12 -0000 1.55.2.4
> @@ -57,6 +57,7 @@
> opt_export str deleteRef;
> opt_export str depositRef;
> opt_export str deriveRef;
> +opt_export str derivePathRef;
> opt_export str differenceRef;
> opt_export str divRef;
> opt_export str disconnectRef;
> @@ -216,6 +217,7 @@
> str deleteRef;
> str depositRef;
> str deriveRef;
> +str derivePathRef;
> str differenceRef;
> str divRef;
> str disconnectRef;
> @@ -371,6 +373,7 @@
> deleteRef = putName("delete",6);
> depositRef = putName("deposit",7);
> deriveRef = putName("derive",6);
> + derivePathRef = putName("derivePath",10);
> differenceRef= putName("difference",10);
> divRef = putName("/",1);
> disconnectRef= putName("disconnect",10);
>
> U Makefile.ag
> Index: Makefile.ag
> ===================================================================
> RCS file: /cvsroot/monetdb/MonetDB5/src/optimizer/Makefile.ag,v
> retrieving revision 1.66
> retrieving revision 1.66.2.1
> diff -u -d -r1.66 -r1.66.2.1
> --- Makefile.ag 18 Jan 2009 11:44:14 -0000 1.66
> +++ Makefile.ag 5 Mar 2009 00:17:12 -0000 1.66.2.1
> @@ -32,7 +32,7 @@
> opt_singleton.mx opt_costModel.mx opt_reduce.mx opt_macro.mx \
> opt_accumulators.mx opt_qep.mx opt_mergetable.mx \
> opt_remoteQueries.mx opt_joinselect.mx opt_partitions.mx \
> - opt_evaluate.mx opt_inline.mx opt_pushranges.mx \
> + opt_evaluate.mx opt_inline.mx opt_pushranges.mx
> opt_derivepath.mx \
> opt_accessmode.mx opt_joinpath.mx opt_heuristics.mx
> opt_remap.mx \
> opt_statistics.mx opt_trace.mx opt_recycler.mx opt_dataflow.mx
> \
> opt_mitosis.mx opt_octopus.mx opt_replicator.mx opt_history.mx
> @@ -53,7 +53,7 @@
> opt_singleton.mx opt_costModel.mx opt_reduce.mx opt_macro.mx \
> opt_accumulators.mx opt_qep.mx opt_mergetable.mx \
> opt_remoteQueries.mx opt_joinselect.mx opt_partitions.mx \
> - opt_evaluate.mx opt_inline.mx opt_pushranges.mx \
> + opt_evaluate.mx opt_inline.mx opt_pushranges.mx
> opt_derivepath.mx \
> opt_accessmode.mx opt_joinpath.mx opt_heuristics.mx
> opt_remap.mx \
> opt_statistics.mx opt_trace.mx opt_recycler.mx opt_dataflow.mx
> \
> opt_mitosis.mx opt_octopus.mx opt_replicator.mx opt_history.mx
> @@ -72,7 +72,7 @@
> opt_singleton.mx opt_costModel.mx opt_reduce.mx opt_macro.mx \
> opt_accumulators.mx opt_qep.mx opt_mergetable.mx \
> opt_remoteQueries.mx opt_joinselect.mx opt_partitions.mx \
> - opt_evaluate.mx opt_inline.mx opt_pushranges.mx \
> + opt_evaluate.mx opt_inline.mx opt_pushranges.mx
> opt_derivepath.mx \
> opt_accessmode.mx opt_joinpath.mx opt_heuristics.mx
> opt_remap.mx \
> opt_statistics.mx opt_trace.mx opt_recycler.mx opt_dataflow.mx
> \
> opt_mitosis.mx opt_octopus.mx opt_replicator.mx opt_history.mx
>
> --- NEW FILE: opt_derivepath.mx ---
> @' 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://monetdb.cwi.nl/Legal/MonetDBLicense-1.1.html
> @'
> @' 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-2009 MonetDB B.V.
> @' All Rights Reserved.
>
> @f opt_derivepath
> @- Group derive paths
> The routine @sc{optimizer.derivepaths()}
> walks through the program looking for grouping operations
> and cascades them into a single multiple group paths.
> To illustrate, consider
> @verbatim
> (ext1,grp1) := group.new(b);
> (ext2,grp2) := group.derive(ext1,grp1, c);
> (ext3,grp3) := group.derive(ext2,grp2, d);
> @end verbatim
> The result becomes.
> @verbatim
> (ext3,grp3) := group.derivepath(b,c,d);
> @end verbatim
> @{
> @mal
> pattern optimizer.derivePath():str
> address OPTderivePath;
> pattern optimizer.derivePath(mod:str, fcn:str):str
> address OPTderivePath
> comment "Join path constructor";
> pattern group.derivePath(l:bat[:any,:any]...):bat[:any,:any]
> address ALGderivePath
> comment "internal routine to handle join paths.
> The type analysis is rather tricky.";
> @h
> #ifndef _OPT_DERIVEPATH_
> #define _OPT_DERIVEPATH_
> #include "opt_prelude.h"
> #include "opt_support.h"
> #include "mal_interpreter.h"
>
> /* #define DEBUG_OPT_DERIVEPATH */
> @c
> #include "mal_config.h"
> #include "opt_derivepath.h"
>
> static int
> OPTderivePathImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
> InstrPtr p)
> {
> int i, actions=0;
> int *pc;
> str derivePathRef = putName("derivePath",10);
> InstrPtr q;
> InstrPtr *old;
> int limit,slimit;
>
> (void) cntxt;
> (void) stk;
> if (varGetProp(mb, getArg(mb->stmt[0], 0), inlineProp) != NULL)
> return 0;
>
> old= mb->stmt;
> limit= mb->stop;
> slimit= mb->ssize;
> newMalBlkStmt(mb,mb->ssize);
>
> /* beware, new variables and instructions are introduced */
> pc= (int*) GDKmalloc(sizeof(int)* mb->vtop * 2); /* to find last
> assignment */
> memset((char*) pc, 0, sizeof(int)* mb->vtop *2);
>
> for (i = 0; i<limit; i++){
> p= old[i];
> if( getModuleId(p)== groupRef && getFunctionId(p)== newRef ){
> pc[getArg(p,0)] = i;
> pc[getArg(p,1)] = i;
> }
> if( getModuleId(p)== groupRef && getFunctionId(p)== deriveRef ){
> @-
> Try to expand its argument list with what we have found so far.
> This creates a series of join paths, many of which will be removed during
> deadcode elimination.
> @c
> if (pc[getArg(p,2)]== pc[getArg(p,3)]){
> q=
> copyInstruction(getInstrPtr(mb,pc[getArg(p,2)]));
> q= pushArgument(mb,q, getArg(p,5));
> pc[getArg(p,0)] = i;
> pc[getArg(p,1)] = i;
> setFunctionId(q,derivePathRef);
> p= q;
> actions++;
> #ifdef DEBUG_OPT_DERIVEPATH
> stream_printf(cntxt->fdout,"new derivePath
> instruction\n");
> printInstruction(cntxt->fdout,mb, 0, q,
> LIST_MAL_ALL);
> #endif
> }
> }
> pushInstruction(mb,p);
> }
> for(; i<slimit; i++)
> if(old[i])
> freeInstruction(old[i]);
> GDKfree(old);
> GDKfree(pc);
> OPTDEBUG
> if ( actions)
> stream_printf(cntxt->fdout,"#opt_derivepath: %d statements
> glued\n",actions);
> return actions;
> }
> @include optimizerWrapper.mx
> @h
> @:exportOptimizer(derivePath)@
> #endif
> opt_export str ALGderivePath(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
> InstrPtr pci);
> @c
> #include "opt_statistics.h"
> @:wrapOptimizer(derivePath,OPT_CHECK_ALL)@
> @-
> The derive path optimizer takes a derivation sequence and
> attempts to minimize the intermediate result.
> The choice depends on a good estimate of intermediate
> results using properties.
> For the time being, we use a simplistic model, based
> on the assumption that most joins are foreign key joins anyway.
> @c
> str
> ALGderivePath(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
> {
> (void) cntxt;
> (void) mb;
> (void) stk;
> (void) pci;
> throw(MAL,"group.derivePath","nyi");
> }
> @}
>
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
> -Strategies to boost innovation and cut costs with open source participation
> -Receive a $600 discount off the registration fee with the source code: SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> Monetdb-checkins mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/monetdb-checkins-- Sjoerd Mullender
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H
_______________________________________________ Monetdb-developers mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/monetdb-developers
