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