Changeset: 4ad19218d64c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ad19218d64c
Modified Files:
        monetdb5/mal/mal_embedded.c
        monetdb5/mal/mal_embedded.h
        monetdb5/modules/mal/mdb.c
        sql/backends/monet5/sql_embedded.c
Branch: translate-scripts
Log Message:

Include MAL embedded scripts in CMDmodules call so Mtest can run again.


diffs (181 lines):

diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -16,12 +16,10 @@
  */
 #include "mal_embedded.h"
 
-static int embeddedinitialized = 0;
+static bool embeddedinitialized = false;
 
 /* The source for the MAL signatures*/
-static struct{
-       str modnme, source;
-} malSignatures[] = 
+malSignatures malModules[MAXMODULES] =
 {
 // Include the MAL definitions files in the proper order.
 
@@ -119,11 +117,35 @@ malEmbeddedBoot(Client c)
 
        if( embeddedinitialized )
                return MAL_SUCCEED;
-       for(i = 0; malSignatures[i].modnme; i++){
-               if ((msg = callString(c, malSignatures[i].source, FALSE)) != 
MAL_SUCCEED)
+       for(i = 0; malModules[i].modnme; i++) {
+               if ((msg = callString(c, malModules[i].source, FALSE)) != 
MAL_SUCCEED)
                        return msg;
        }
-       embeddedinitialized = 1;
+       embeddedinitialized = true;
+       return msg;
+}
+
+str
+malExtraModulesBoot(Client c, malSignatures extraMalModules[])
+{
+       int i, j, k;
+       str msg = MAL_SUCCEED;
+
+       for (i = 0; malModules[i].modnme; i++);
+       if (i == MAXMODULES-1) //the last entry must be set to NULL
+               throw(MAL, "malInclude", "too many MAL modules loaded");
+
+       for (j = 0, k = i; k < MAXMODULES-1 && extraMalModules[j].modnme && 
extraMalModules[j].source; k++, j++);
+       if (k == MAXMODULES-1)
+               throw(MAL, "malInclude", "the number of MAL modules to load, 
exceed the available MAL modules slots");
+
+       memcpy(&malModules[i], &extraMalModules[0], j * sizeof(malSignatures));
+       memset(&malModules[k], 0, sizeof(malSignatures));
+
+       for(i = 0; extraMalModules[i].modnme && extraMalModules[i].source; i++) 
{
+               if ((msg = callString(c, extraMalModules[i].source, FALSE)) != 
MAL_SUCCEED)
+                       return msg;
+       }
        return msg;
 }
 
diff --git a/monetdb5/mal/mal_embedded.h b/monetdb5/mal/mal_embedded.h
--- a/monetdb5/mal/mal_embedded.h
+++ b/monetdb5/mal/mal_embedded.h
@@ -10,18 +10,22 @@
 #define _MAL_EMBEDDED_H
 
 #include "monetdb_config.h"
-#include "mal_type.h"
+
 #include "mal_client.h"
-#include "mal_namespace.h"
-#include "mal_exception.h"
-#include "mal_linker.h"
 #include "mal_import.h"
-#include "mal_builder.h"
-#include "mal_private.h"
 
 /* #define MAL_EMBEDDED_DEBUG  */
 
+#define MAXMODULES  128
+
+typedef struct {
+       str modnme, source;
+} malSignatures;
+
+mal_export malSignatures malModules[];
+
 mal_export str malEmbeddedBoot(Client c);
+mal_export str malExtraModulesBoot(Client c, malSignatures extraMalModules[]);
 mal_export str malEmbeddedStop(Client c);
 mal_export str malEmbeddedRestart(Client c);
 
diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c
--- a/monetdb5/modules/mal/mdb.c
+++ b/monetdb5/modules/mal/mdb.c
@@ -39,6 +39,7 @@
 #include "monetdb_config.h"
 #include "mdb.h"
 #include "mal_function.h"
+#include "mal_embedded.h"
 
 #define MDBstatus(X) \
        if( stk->cmd && X==0 ) \
@@ -660,7 +661,7 @@ MDBdummy(int *ret)
 /*
  * CMDmodules
  * Obtains a list of modules by looking at what files are present in the
- * module directory.
+ * module directory and embedded in the source code.
  */
 static BAT *
 TBL_getdir(void)
@@ -676,6 +677,14 @@ TBL_getdir(void)
 
        if ( b == 0)
                return NULL;
+
+       for (int j = 0; malModules[j].modnme ; j++ ) { //add MAL embedded 
loaded modules
+               if (BUNappend(b, malModules[j].modnme, false) != GDK_SUCCEED) {
+                       BBPreclaim(b);
+                       return NULL;
+               }
+       }
+
        mod_path = GDKgetenv("monet_mod_path");
        if (mod_path == NULL)
                return b;
diff --git a/sql/backends/monet5/sql_embedded.c 
b/sql/backends/monet5/sql_embedded.c
--- a/sql/backends/monet5/sql_embedded.c
+++ b/sql/backends/monet5/sql_embedded.c
@@ -9,15 +9,15 @@
 #include "monetdb_config.h"
 
 #include "sql_embedded.h"
+#include "mal_embedded.h"
 #include "gdk.h"
-#include "mal.h"
 #include "mal_client.h"
-#include "language.h"
+#include "mal_import.h"
 
-static struct mal_sql_scripts {
-       char *modnme;
-       char *script;
-} mal_sql_scripts[] = {
+static bool SQLembeddedinitialized = false;
+
+malSignatures sqlMalModules[] = //these modules will be added to the
+{
 #include "sql_decimal.mal.h"
 #include "sql_rank.mal.h"
 #include "sql_aggr_bte.mal.h"
@@ -50,6 +50,9 @@ sqlEmbeddedBoot(void)
        str msg;
        Client c;
 
+       if( SQLembeddedinitialized )
+               return 0;
+
        if (mal_init())
                return -1;
 
@@ -61,14 +64,14 @@ sqlEmbeddedBoot(void)
        }
 
        c = &mal_clients[0];
-       for (int i = 0; mal_sql_scripts[i].modnme; i++) {
-               if ((msg = callString(c, mal_sql_scripts[i].script, FALSE)) != 
MAL_SUCCEED) {
-                       fprintf(stderr,"#sqlEmbeddedBoot: Failed to start SQL 
MAL scripts: %s", msg);
-                       freeException(msg);
-                       mal_exit(1);
-                       return -1;
-               }
+
+       if ((msg = malExtraModulesBoot(c, sqlMalModules)) != MAL_SUCCEED) {
+               fprintf(stderr, "%s\n", msg);
+               freeException(msg);
+               mal_exit(1);
+               return -1;
        }
 
+       SQLembeddedinitialized = true;
        return 0;
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to