Changeset: 8ea09480b1ea for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8ea09480b1ea
Added Files:
        monetdb5/optimizer/opt_strimps.c
        monetdb5/optimizer/opt_strimps.h
Modified Files:
        monetdb5/modules/mal/strimps.c
        monetdb5/optimizer/CMakeLists.txt
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_wrapper.c
        monetdb5/optimizer/optimizer.c
Branch: string_imprints
Log Message:

Scaffolding for strimp optimizer


diffs (242 lines):

diff --git a/monetdb5/modules/mal/strimps.c b/monetdb5/modules/mal/strimps.c
--- a/monetdb5/modules/mal/strimps.c
+++ b/monetdb5/modules/mal/strimps.c
@@ -86,10 +86,10 @@ PATstrimpCreate(Client cntxt, MalBlkPtr 
 
        bid = *getArgReference_bat(stk, pci, 1);
        if ((b = BATdescriptor(bid)) == NULL)
-               throw(MAL, "strimps.strimpHeader", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
+               throw(MAL, "strimps.strimpCreate", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
 
        if(STRMPcreate(b) != GDK_SUCCEED)
-               throw(MAL, "strimps.strimpHistogram", SQLSTATE(HY002) 
OPERATION_FAILED);
+               throw(MAL, "strimps.strimpCreate", SQLSTATE(HY002) 
OPERATION_FAILED);
 
        // *getArgReference_lng(stk, pci, 0) = 0;
        return MAL_SUCCEED;
diff --git a/monetdb5/optimizer/CMakeLists.txt 
b/monetdb5/optimizer/CMakeLists.txt
--- a/monetdb5/optimizer/CMakeLists.txt
+++ b/monetdb5/optimizer/CMakeLists.txt
@@ -49,6 +49,7 @@ target_sources(optimizer
   opt_postfix.c opt_postfix.h
   opt_volcano.c opt_volcano.h
   opt_fastpath.c opt_fastpath.h
+  opt_strimps.c opt_strimps.h
   opt_wrapper.c
   PUBLIC
   ${CMAKE_CURRENT_SOURCE_DIR}/opt_pipes.h)
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -49,7 +49,20 @@ static struct PIPELINES {
         "optimizer.deadcode();"
         "optimizer.multiplex();"
         "optimizer.generator();"
-        "optimizer.profiler();" 
+        "optimizer.profiler();"
+        //"optimizer.candidates();" only for decoration in explain
+        //"optimizer.mask();"
+        "optimizer.garbageCollector();",
+        "stable", NULL, 1},
+       {"minimal_strimps_pipe",
+        "optimizer.inline();"
+        "optimizer.remap();"
+        "optimizer.bincopyfrom();"
+        "optimizer.strimps();"
+        "optimizer.deadcode();"
+        "optimizer.multiplex();"
+        "optimizer.generator();"
+        "optimizer.profiler();"
         //"optimizer.candidates();" only for decoration in explain
         //"optimizer.mask();"
         "optimizer.garbageCollector();",
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -188,6 +188,7 @@ const char *minusRef;
 const char *mirrorRef;
 const char *mitosisRef;
 const char *mkeyRef;
+const char *mkstrimpsRef;
 const char *mmathRef;
 const char *modRef;
 const char *mtimeRef;
@@ -279,6 +280,8 @@ const char *startRef;
 const char *starttraceRef;
 const char *stoptraceRef;
 const char *streamsRef;
+const char *strimpFilterSelectRef;
+const char *strimpsRef;
 const char *strRef;
 const char *subavgRef;
 const char *subcountRef;
@@ -495,6 +498,7 @@ void optimizerInit(void)
        mirrorRef = putName("mirror");
        mitosisRef = putName("mitosis");
        mkeyRef = putName("mkey");
+       mkstrimpsRef = putName("mkstrimp");
        mmathRef = putName("mmath");
        modRef = putName("%");
        mtimeRef = putName("mtime");
@@ -586,6 +590,7 @@ void optimizerInit(void)
        starttraceRef = putName("starttrace");
        stoptraceRef = putName("stoptrace");
        streamsRef = putName("streams");
+       strimpsRef = putName("strimps");
        strRef = putName("str");
        subavgRef = putName("subavg");
        subcountRef = putName("subcount");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -186,6 +186,7 @@ mal_export  const char *minusRef;
 mal_export  const char *mirrorRef;
 mal_export  const char *mitosisRef;
 mal_export  const char *mkeyRef;
+mal_export  const char *mkstrimpsRef;
 mal_export  const char *mmathRef;
 mal_export  const char *modRef;
 mal_export  const char *mtimeRef;
@@ -278,6 +279,8 @@ mal_export  const char *startRef;
 mal_export  const char *starttraceRef;
 mal_export  const char *stoptraceRef;
 mal_export  const char *streamsRef;
+mal_export  const char *strimpFilterSelectRef;
+mal_export  const char *strimpsRef;
 mal_export  const char *strRef;
 mal_export  const char *subavgRef;
 mal_export  const char *subcountRef;
diff --git a/monetdb5/optimizer/opt_strimps.c b/monetdb5/optimizer/opt_strimps.c
new file mode 100644
--- /dev/null
+++ b/monetdb5/optimizer/opt_strimps.c
@@ -0,0 +1,76 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
+ */
+
+/*
+ * Selectively inject serialization operations when we know the
+ * raw footprint of the query exceeds 80% of RAM.
+ */
+
+#include "monetdb_config.h"
+#include "mal_instruction.h"
+#include "opt_strimps.h"
+
+// delaying the startup should not be continued throughout the plan
+// after the startup phase there should be intermediate work to do
+//A heuristic to check it
+#define MAXdelays 128
+
+str
+OPTstrimpsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
+{
+       int i, limit;
+       // int mvcvar = -1;
+       int count=0;
+       InstrPtr p,q, *old = mb->stmt;
+       char buf[256];
+       lng usec = GDKusec();
+       str msg = MAL_SUCCEED;
+
+       (void) pci;
+       (void) cntxt;
+       (void) stk;             /* to fool compilers */
+
+
+       if ( mb->inlineProp )
+               return MAL_SUCCEED;
+
+       limit= mb->stop;
+       if ( newMalBlkStmt(mb, mb->ssize + 20) < 0)
+               throw(MAL,"optimizer.volcano", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+       for (i = 0; i < limit; i++) {
+               p = old[i];
+               if (getModuleId(p) == algebraRef && getFunctionId(p) == 
likeselectRef) {
+                       q = newInstruction(0, strimpsRef, mkstrimpsRef); /* 
This should be void? */
+                       setDestVar(q, newTmpVariable(mb, TYPE_void));
+                       q = addArgument(mb, q, getArg(p, 1));
+
+                       pushInstruction(mb, q);
+                       typeChecker(cntxt->usermodule, mb, q, mb->stop-1, TRUE);
+
+                       count++;
+               }
+               pushInstruction(mb, p);
+       }
+
+    /* Defense line against incorrect plans */
+    if( count){
+        msg = chkTypes(cntxt->usermodule, mb, FALSE);
+       if (!msg)
+               msg = chkFlow(mb);
+       if (!msg)
+               msg = chkDeclarations(mb);
+    }
+    /* keep all actions taken as a post block comment */
+       usec = GDKusec()- usec;
+    snprintf(buf,256,"%-20s actions=%2d time=" LLFMT " 
usec","volcano",count,usec);
+    newComment(mb,buf);
+       if( count > 0)
+               addtoMalBlkHistory(mb);
+       return msg;
+}
diff --git a/monetdb5/optimizer/opt_strimps.h b/monetdb5/optimizer/opt_strimps.h
new file mode 100644
--- /dev/null
+++ b/monetdb5/optimizer/opt_strimps.h
@@ -0,0 +1,18 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
+ */
+
+#ifndef _OPT_STRIMPS_
+#define _OPT_STRIMPS_
+#include "opt_prelude.h"
+#include "opt_support.h"
+#include "mal_exception.h"
+
+extern str OPTstrimpsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
+
+
+#endif
diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c
--- a/monetdb5/optimizer/opt_wrapper.c
+++ b/monetdb5/optimizer/opt_wrapper.c
@@ -53,6 +53,7 @@
 #include "opt_reorder.h"
 #include "opt_volcano.h"
 #include "opt_fastpath.h"
+#include "opt_strimps.h"
 #include "opt_wlc.h"
 #include "optimizer_private.h"
 
@@ -95,6 +96,7 @@ struct{
        {"remap", &OPTremapImplementation,0,0},
        {"remoteQueries", &OPTremoteQueriesImplementation,0,0},
        {"reorder", &OPTreorderImplementation,0,0},
+       {"strimps", &OPTstrimpsImplementation,0,0},
        {"volcano", &OPTvolcanoImplementation,0,0},
        {"wlc", &OPTwlcImplementation,0,0},
        {0,0,0,0}
diff --git a/monetdb5/optimizer/optimizer.c b/monetdb5/optimizer/optimizer.c
--- a/monetdb5/optimizer/optimizer.c
+++ b/monetdb5/optimizer/optimizer.c
@@ -130,6 +130,7 @@ static mel_func optimizer_init_funcs[] =
  optwrapper_pattern("oltp", "Inject the OLTP locking primitives"),
  optwrapper_pattern("wlc", "Inject the workload capture-replay primitives"),
  optwrapper_pattern("postfix", "Postfix the plan,e.g. pushing projections"),
+ optwrapper_pattern("strimps", "Use strimps index if appropriate"),
  pattern("optimizer", "mask", OPTwrapper, false, "", args(1,1, arg("",str))),
  pattern("optimizer", "mask", OPTwrapper, false, "Manipulate the MSK objects", 
args(1,3, arg("",str),arg("mod",str),arg("fcn",str))),
  { .imp=NULL }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to