Changeset: 5aee7d6decc4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5aee7d6decc4
Added Files:
        monetdb5/optimizer/optimizer_private.h
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/extras/jaql/jaqlscenario.c
        monetdb5/extras/mal_optimizer_template/opt_sql_append.c
        monetdb5/optimizer/Makefile.ag
        monetdb5/optimizer/opt_macro.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_support.c
        monetdb5/optimizer/opt_wrapper.c
        monetdb5/optimizer/optimizer.c
        sql/backends/monet5/sql_gencode.c
Branch: default
Log Message:

Fix optimizer initialization to not use data races.
Double checking is not safe.


diffs (truncated from 733 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2700,7 +2700,6 @@ str operatorName(int i);
 lng optDebug;
 str optimizeMALBlock(Client cntxt, MalBlkPtr mb);
 str optimizerCheck(Client cntxt, MalBlkPtr mb, str name, int actions, lng 
usec, int flag);
-void optimizerInit(void);
 str optimizerRef;
 str optimizer_prelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
 str pack2Ref;
diff --git a/monetdb5/extras/jaql/jaqlscenario.c 
b/monetdb5/extras/jaql/jaqlscenario.c
--- a/monetdb5/extras/jaql/jaqlscenario.c
+++ b/monetdb5/extras/jaql/jaqlscenario.c
@@ -83,8 +83,6 @@ JAQLinitClient(Client c)
        j = GDKzalloc(sizeof(jc));
        jaqllex_init_extra(j, &j->scanner);
 
-       optimizerInit();  /* for all xxxRef vars in dumpcode */
-
        /* Set state, this indicates an initialized client scenario */
        c->state[MAL_SCENARIO_READER] = c;
        c->state[MAL_SCENARIO_PARSER] = c;
diff --git a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c 
b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
--- a/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
+++ b/monetdb5/extras/mal_optimizer_template/opt_sql_append.c
@@ -269,7 +269,6 @@ str OPTsql_append(Client cntxt, MalBlkPt
        lng t,clk= GDKusec();
        int actions = 0;
 
-       optimizerInit();
        if( p )
                removeInstruction(mb, p);
        OPTDEBUGsql_append mnstr_printf(cntxt->fdout,"=APPLY OPTIMIZER 
sql_append\n");
diff --git a/monetdb5/optimizer/Makefile.ag b/monetdb5/optimizer/Makefile.ag
--- a/monetdb5/optimizer/Makefile.ag
+++ b/monetdb5/optimizer/Makefile.ag
@@ -28,7 +28,7 @@ MTSAFE
 lib_optimizer = {
        NOINST
        SOURCES = \
-               optimizer.c optimizer.h \
+               optimizer.c optimizer.h optimizer_private.h \
                opt_accumulators.c opt_accumulators.h \
                opt_aliases.c opt_aliases.h \
                opt_cluster.c opt_cluster.h \
diff --git a/monetdb5/optimizer/opt_macro.c b/monetdb5/optimizer/opt_macro.c
--- a/monetdb5/optimizer/opt_macro.c
+++ b/monetdb5/optimizer/opt_macro.c
@@ -545,7 +545,6 @@ str OPTmacro(Client cntxt, MalBlkPtr mb,
        lng clk= GDKusec();
        int actions = 0;
 
-       optimizerInit();
        if( p ==NULL )
                return 0;
        removeInstruction(mb, p);
@@ -574,7 +573,6 @@ str OPTorcam(Client cntxt, MalBlkPtr mb,
        lng clk= GDKusec();
        int actions = 0;
 
-       optimizerInit();
        if( p ==NULL )
                return 0;
        removeInstruction(mb, p);
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
@@ -24,6 +24,7 @@
  */
 #include "monetdb_config.h"
 #include "opt_prelude.h"
+#include "optimizer_private.h"
 
 str abortRef;
 str affectedRowsRef;
@@ -291,288 +292,284 @@ int tubProp;
 int horiginProp;               /* original oid source */
 int toriginProp;               /* original oid source */
 
-void optimizerInit(void){
-       if (batRef)
-               return;
-       MT_lock_set(&mal_remoteLock, "optimizerInit");
-       if(batRef == NULL){
-               abortRef = putName("abort",5);
-               affectedRowsRef = putName("affectedRows",12);
-               aggrRef = putName("aggr",4);
-               alarmRef = putName("alarm",5);
-               algebraRef = putName("algebra",7);
-               appendidxRef = putName("append_idxbat",13);
-               appendRef = putName("append",6);
-               assertRef = putName("assert",6);
-               attachRef = putName("attach",6);
-               avgRef = putName("avg",3);
-               arrayRef = putName("array",4);
-               batcalcRef = putName("batcalc",7);
-               basketRef = putName("basket",6);
-               boxRef = putName("box",3);
-               batstrRef = putName("batstr",6);
-               batmtimeRef = putName("batmtime",8);
-               batmmathRef = putName("batmmath",8);
-               batxmlRef = putName("batxml",6);
-               bbpRef = putName("bbp",3);
-               tidRef = putName("tid",3);
-               deltaRef = putName("delta",5);
-               subdeltaRef = putName("subdelta",8);
-               projectdeltaRef = putName("projectdelta",12);
-               binddbatRef = putName("bind_dbat",9);
-               bindidxRef = putName("bind_idxbat",11);
-               bindRef = putName("bind",4);
-               bpmRef = putName("bpm",3);
-               bstreamRef = putName("bstream",7);
-               calcRef = putName("calc",4);
-               catalogRef = putName("catalog",7);
-               centipedeRef = putName("centipede",9);
-               clear_tableRef = putName("clear_table",11);
-               closeRef = putName("close",5);
-               compressRef = putName("compress",8);
-               columnRef = putName("column",6);
-               columnBindRef = putName("columnBind",10);
-               commitRef = putName("commit",6);
-               connectRef = putName("connect",7);
-               constraintsRef = putName("constraints",11);
-               countRef = putName("count",5);
-               subcountRef = putName("subcount",8);
-               copyRef = putName("copy",4);
-               copy_fromRef = putName("copy_from",9);
-               count_no_nilRef = putName("count_no_nil",12);
-               crossRef = putName("crossproduct",12);
-               createRef = putName("create",6);
-               dateRef = putName("date",4);
-               datacellRef = putName("datacell",8);
-               dataflowRef = putName("dataflow",8);
-               datacyclotronRef = putName("datacyclotron",13);
-               dblRef = putName("dbl",3);
-               decompressRef = putName("decompress",10);
-               deleteRef = putName("delete",6);
-               depositRef = putName("deposit",7);
-               differenceRef= putName("difference",10);
-               tdifferenceRef= putName("tdifference",11);
-               tintersectRef= putName("tintersect",10);
-               tdiffRef= putName("tdiff",5);
-               tinterRef= putName("tinter",6);
-               mergecandRef= putName("mergecand",9);
-               mergepackRef= putName("mergepack",9);
-               intersectcandRef= putName("intersectcand",13);
-               eqRef = putName("==",2);
-               disconnectRef= putName("disconnect",10);
-               evalRef = putName("eval",4);
-               execRef = putName("exec",4);
-               expandRef = putName("expand",6);
-               exportOperationRef = putName("exportOperation",15);
-               finishRef = putName("finish",6);
-               getRef = putName("get",3);
-               grabRef = putName("grab",4);
-               groupRef = putName("group",5);
-               subgroupRef = putName("subgroup",8);
-               subgroupdoneRef= putName("subgroupdone",12);
-               groupsRef = putName("groups",6);
-               groupbyRef = putName("groupby",7);
-               hashRef = putName("hash",4);
-               histogramRef = putName("histogram",9);
-               identityRef = putName("identity",8);
-               ifthenelseRef = putName("ifthenelse",10);
-               inplaceRef = putName("inplace",7);
-               insertRef = putName("insert",6);
-               intRef = putName("int",3);
-               ioRef = putName("io",2);
-               iteratorRef = putName("iterator",8);
-               joinPathRef = putName("joinPath",8);
-               joinRef = putName("join",4);
-               antijoinRef = putName("antijoin",8);
-               bandjoinRef = putName("bandjoin",8);
-               thetajoinRef = putName("thetajoin",9);
-               subjoinRef = putName("subjoin",7);
-               subantijoinRef = putName("subantijoin",11);
-               subbandjoinRef = putName("subbandjoin",11);
-               subthetajoinRef = putName("subthetajoin",12);
-               thetauselectRef = putName("thetauselect",12);
-               thetaselectRef = putName("thetaselect",11);
-               jsonRef = putName("json",4);
-               kdifferenceRef= putName("kdifference",11);
-               kunionRef= putName("kunion",6);
-               kuniqueRef= putName("kunique",7);
-               languageRef= putName("language",8);
-               leftfetchjoinRef = putName("leftfetchjoin",13);
-               leftfetchjoinPathRef = putName("leftfetchjoinPath",17);
-               leftjoinRef = putName("leftjoin",8);
-               leftjoinPathRef = putName("leftjoinPath",12);
-               likeselectRef = putName("like_select",11);
-               ilikeselectRef = putName("ilike_select",12);
-               likeuselectRef = putName("like_uselect",12);
-               ilikeuselectRef = putName("ilike_uselect",13);
-               listRef = putName("list",4);
-               likeRef = putName("like",4);
-               ilikeRef = putName("ilike",5);
-               not_likeRef = putName("not_like",8);
-               not_ilikeRef = putName("not_ilike",9);
-               lockRef = putName("lock",4);
-               lookupRef = putName("lookup",6);
-               malRef = putName("mal", 3);
-               mapiRef = putName("mapi", 4);
-               markHRef = putName("markH", 5);
-               markTRef = putName("markT", 5);
-               mark_grpRef = putName("mark_grp", 8);
-               materializeRef = putName("materialize", 11);
-               mtimeRef = putName("mtime", 5);
-               multicolumnRef = putName("multicolumn", 11);
-               dense_rank_grpRef = putName("dense_rank_grp", 14);
-               matRef = putName("mat", 3);
-               max_no_nilRef = putName("max_no_nil", 10);
-               maxRef = putName("max", 3);
-               submaxRef = putName("submax", 6);
-               submedianRef = putName("submedian", 9);
-               mdbRef = putName("mdb", 3);
-               min_no_nilRef = putName("min_no_nil", 10);
-               minRef = putName("min", 3);
-               subminRef = putName("submin", 6);
-               mirrorRef = putName("mirror", 6);
-               mitosisRef = putName("mitosis", 7);
-               mkeyRef = putName("mkey", 4);
-               mmathRef = putName("mmath", 5);
-               multiplexRef = putName("multiplex", 9);
-               manifoldRef = putName("manifold", 8);
-               mvcRef = putName("mvc", 3);
-               newRef = putName("new",3);
-               notRef = putName("not",3);
-               nextRef = putName("next",4);
-               oidRef = putName("oid",3);
-               octopusRef = putName("octopus",7);
-               optimizerRef = putName("optimizer",9);
-               openRef = putName("open",4);
-               packRef = putName("pack",4);
-               pack2Ref = putName("pack2",5);
-               passRef = putName("pass",4);
-               partitionRef = putName("partition",9);
-               pcreRef = putName("pcre",4);
-               pinRef = putName("pin",3);
-               plusRef = putName("+",1);
-               minusRef = putName("-",1);
-               mulRef = putName("*",1);
-               divRef = putName("/",1);
-               printRef = putName("print",5);
-               preludeRef = putName("prelude",7);
-               prodRef = putName("prod",4);
-               subprodRef = putName("subprod",7);
-               profilerRef = putName("profiler",8);
-               postludeRef = putName("postlude",8);
-               pqueueRef = putName("pqueue",6);
-               projectRef = putName("project",7);
-               putRef = putName("put",3);
-               querylogRef = putName("querylog",8);
-               queryRef = putName("query",5);
-               rankRef = putName("rank", 4);
-               rank_grpRef = putName("rank_grp", 8);
-               reconnectRef = putName("reconnect",9);
-               recycleRef = putName("recycle",7);
-               refineRef = putName("refine",6);
-               refine_reverseRef = putName("refine_reverse",14);
-               registerRef = putName("register",8);
-               remapRef = putName("remap",5);
-               remoteRef = putName("remote",6);
-               replaceRef = putName("replace",7);
-               replicatorRef = putName("replicator",10);
-               resultSetRef = putName("resultSet",9);
-               reuseRef = putName("reuse",5);
-               reverseRef = putName("reverse",7);
-               rpcRef = putName("rpc",3);
-               rsColumnRef = putName("rsColumn",8);
-               schedulerRef = putName("scheduler",9);
-               selectNotNilRef = putName("selectNotNil",12);
-               selectRef = putName("select",6);
-               semaRef = putName("sema",4);
-               semijoinRef = putName("semijoin",8);
-               semijoinPathRef = putName("semijoinPath",12);
-               setAccessRef = putName("setAccess",9);
-               setWriteModeRef= putName("setWriteMode",12);
-               sinkRef = putName("sink",4);
-               sliceRef = putName("slice",5);
-               subsliceRef = putName("subslice",8);
-               singleRef = putName("single",6);
-               sortHRef = putName("sortH",5);
-               sortHTRef = putName("sortHT",6);
-               sortRef = putName("sort",4);
-               sortReverseTailRef = putName("sortReverseTail",15);
-               sortTailRef = putName("sortTail",8);
-               sortTHRef = putName("sortTH",6);
-               sqlRef = putName("sql",3);
-               srvpoolRef = putName("srvpool",7);
-               streamsRef = putName("streams",7);
-               startRef = putName("start",5);
-               stopRef = putName("stop",4);
-               strRef = putName("str",3);
-               sumRef = putName("sum",3);
-               subsumRef = putName("subsum",6);
-               subavgRef = putName("subavg",6);
-               subsortRef = putName("subsort",7);
-               takeRef= putName("take",5);
-               topn_minRef= putName("topn_min",8);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to