Changeset: 3d1c6c6fd89b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/3d1c6c6fd89b
Added Files:
        sql/backends/monet5/vaults/monetdb/CMakeLists.txt
        sql/backends/monet5/vaults/monetdb/monetdb.c
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/MAL-signatures.test
        monetdb5/mal/mal_embedded.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/vaults/CMakeLists.txt
        sql/server/rel_remote.c
        sql/server/rel_select.c
        tools/mserver/mserver5.c
Branch: odbc_loader
Log Message:

first version of select * from 'monetdb://localhost:50000/db/schema/table' rt;


diffs (truncated from 549 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -47378,6 +47378,16 @@ tanh
 command mmath.tanh(X_0:flt):flt
 MATHunary_TANHflt;
 (empty)
+monetdb
+epilogue
+command monetdb.epilogue():void
+MONETDBepilogue;
+(empty)
+monetdb
+prelude
+pattern monetdb.prelude():void
+MONETDBprelude;
+(empty)
 mtime
 addmonths
 command mtime.addmonths(X_0:date, X_1:int):date
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -35858,6 +35858,16 @@ tanh
 command mmath.tanh(X_0:flt):flt
 MATHunary_TANHflt;
 (empty)
+monetdb
+epilogue
+command monetdb.epilogue():void
+MONETDBepilogue;
+(empty)
+monetdb
+prelude
+pattern monetdb.prelude():void
+MONETDBprelude;
+(empty)
 mtime
 addmonths
 command mtime.addmonths(X_0:date, X_1:int):date
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
@@ -122,7 +122,7 @@ malEmbeddedBoot(int workerlimit, int mem
                MT_thread_set_qry_ctx(qc_old);
                return msg;
        }
-       char *modules[6] = { "embedded", "sql", "generator", "udf", "csv" };
+       char *modules[7] = { "embedded", "sql", "generator", "udf", "csv", 
"monetdb_loader" };
        if ((msg = malIncludeModules(c, modules, 0, !with_mapi_server, NULL)) 
!= MAL_SUCCEED) {
                MCcloseClient(c);
                MT_thread_set_qry_ctx(qc_old);
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -23,6 +23,7 @@
 #include "rel_updates.h"
 #include "rel_predicates.h"
 #include "rel_file_loader.h"
+#include "rel_proto_loader.h"
 #include "sql_env.h"
 #include "sql_optimizer.h"
 #include "sql_gencode.h"
@@ -1461,6 +1462,42 @@ exp2bin_file_loader(backend *be, sql_exp
        return (stmt*)fl->load(be, f, filename, topn);
 }
 
+static stmt*
+exp2bin_proto_loader(backend *be, sql_exp *fe, stmt *left, stmt *right, stmt 
*sel)
+{
+       assert(left == NULL); (void)left;
+       assert(right == NULL); (void)right;
+       assert(sel == NULL); (void)sel;
+       sql_subfunc *f = fe->f;
+
+       list *arg_list = fe->l;
+       /*
+       list *type_list = f->res;
+       assert(1 + list_length(type_list) == list_length(arg_list));
+       */
+
+       sql_exp *eexp = arg_list->h->next->data;
+       assert(is_atom(eexp->type));
+       atom *ea = eexp->l;
+       assert(ea->data.vtype == TYPE_str);
+       char *ext = ea->data.val.sval;
+
+       proto_loader_t *pl = pl_find(ext);
+       if (!pl)
+               pl = pl_find("mapi");
+       if (!pl)
+               return NULL;
+       sql_exp *fexp = arg_list->h->data;
+       assert(is_atom(fexp->type));
+       atom *fa = fexp->l;
+       assert(fa->data.vtype == TYPE_str);
+       char *filename = fa->data.val.sval;
+       sql_exp *topn = NULL;
+       if (list_length(arg_list) == 3)
+               topn = list_fetch(arg_list, 2);
+       return (stmt*)pl->load(be, f, filename, topn);
+}
+
 stmt *
 exp_bin(backend *be, sql_exp *e, stmt *left, stmt *right, stmt *grp, stmt 
*ext, stmt *cnt, stmt *sel, int depth, int reduce, int push)
 {
@@ -1654,6 +1691,8 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                                return exp2bin_copyfrombinary(be, e, left, 
right, sel);
                        if (strcmp(fname, "file_loader") == 0)
                                return exp2bin_file_loader(be, e, left, right, 
sel);
+                       if (strcmp(fname, "proto_loader") == 0)
+                               return exp2bin_proto_loader(be, e, left, right, 
sel);
                        if (strcmp(fname, "-1") == 0) /* map arguments to A0 .. 
An */
                                return exp2bin_named_placeholders(be, e);
                }
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -333,6 +333,7 @@ static int
        char *lname = NULL, *rel_str, *buf = NULL, *mal_session_uuid, *err = 
NULL, *pwhash = NULL;
        str username = NULL, password = NULL, msg = NULL;
        sql_rel *r = rel;
+       bool temp = 0;
 
        lname = sa_strdup(m->ta, name);
        if (lname == NULL) {
@@ -360,6 +361,19 @@ static int
        curInstr = getInstrPtr(curBlk, 0);
 
        sql_table *rt = sql_trans_find_table(m->session->tr, table_id);
+       if (!rt) {
+               if (is_project(rel->op)) {
+                       sql_rel *b = rel->l;
+                       if (is_basetable(b->op)) {
+                               rt = b->l;
+                               temp = true;
+                       }
+               }
+       }
+       if (!rt) {
+               sql_error(m, 10, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+               goto cleanup;
+       }
        const char *uri = mapiuri_uri(rt->query, m->sa);
        assert(strcmp(tu->uri, uri) == 0);
        if (!rt) {
@@ -412,32 +426,45 @@ static int
        }
 
        /* get username / password */
-       msg = remote_get(m, table_id, &username, &password);
-       if (msg) {
-               sql_error(m, 10, "%s", msg);
-               freeException(msg);
-               msg = NULL;
-               goto cleanup;
+       if (!temp) {
+               msg = remote_get(m, table_id, &username, &password);
+               if (msg) {
+                       sql_error(m, 10, "%s", msg);
+                       freeException(msg);
+                       msg = NULL;
+                       goto cleanup;
+               }
+       } else {
+               username = "monetdb";
+               password = "monetdb";
        }
        /* q := remote.connect("uri", "username", "password", "msql"); */
        p = newStmt(curBlk, remoteRef, connectRef);
        if (p == NULL) {
-               GDKfree(username);
-               GDKfree(password);
+               if (!temp) {
+                       GDKfree(username);
+                       GDKfree(password);
+               }
                sql_error(m, 10, SQLSTATE(HY013) MAL_MALLOC_FAIL);
                goto cleanup;
        }
        p = pushStr(curBlk, p, uri);
        p = pushStr(curBlk, p, username);
-       GDKfree(username);
+       if (!temp)
+               GDKfree(username);
        pwlen = strlen(password);
     pwhash = (char*)GDKmalloc(pwlen + 2);
        if (pwhash == NULL) {
-               GDKfree(password);
+               if (!temp)
+                       GDKfree(password);
                goto cleanup;
        }
-       strconcat_len(pwhash, pwlen + 2, "\1", password, NULL);
-       GDKfree(password);
+       if (!temp) {
+               strconcat_len(pwhash, pwlen + 2, "\1", password, NULL);
+               GDKfree(password);
+       } else {
+               strconcat_len(pwhash, pwlen + 2, "", password, NULL);
+       }
        p = pushStr(curBlk, p, pwhash);
        GDKfree(pwhash);
        p = pushStr(curBlk, p, "msql");
diff --git a/sql/backends/monet5/vaults/CMakeLists.txt 
b/sql/backends/monet5/vaults/CMakeLists.txt
--- a/sql/backends/monet5/vaults/CMakeLists.txt
+++ b/sql/backends/monet5/vaults/CMakeLists.txt
@@ -14,4 +14,5 @@ add_subdirectory(fits)
 add_subdirectory(netcdf)
 add_subdirectory(shp)
 add_subdirectory(csv)
+add_subdirectory(monetdb)
 
diff --git a/sql/backends/monet5/vaults/monetdb/CMakeLists.txt 
b/sql/backends/monet5/vaults/monetdb/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/vaults/monetdb/CMakeLists.txt
@@ -0,0 +1,49 @@
+#[[
+# SPDX-License-Identifier: MPL-2.0
+#
+# 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 2024 MonetDB Foundation;
+# Copyright August 2008 - 2023 MonetDB B.V.;
+# Copyright 1997 - July 2008 CWI.
+#]]
+
+add_library(monetdb_loader MODULE)
+
+target_sources(monetdb_loader
+    PRIVATE
+    monetdb.c)
+
+target_include_directories(monetdb_loader
+    PRIVATE
+    $<TARGET_PROPERTY:mal,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:malmodules,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:atoms,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:sql,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:sqlcommon,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:sqlserver,INTERFACE_INCLUDE_DIRECTORIES>
+    $<TARGET_PROPERTY:sqlstorage,INTERFACE_INCLUDE_DIRECTORIES>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+    $<INSTALL_INTERFACE:${INCLUDEDIR}/monetdb>)
+
+target_link_libraries(monetdb_loader
+    PRIVATE
+    monetdb_config_header
+    sqlinclude
+    sql
+    monetdb5
+    bat
+    stream
+  )
+
+set_target_properties(monetdb_loader
+    PROPERTIES
+    OUTPUT_NAME
+    _monetdb_loader)
+
+install(TARGETS
+    monetdb_loader
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/monetdb5-${MONETDB_VERSION}
+    COMPONENT server)
diff --git a/sql/backends/monet5/vaults/monetdb/monetdb.c 
b/sql/backends/monet5/vaults/monetdb/monetdb.c
new file mode 100644
--- /dev/null
+++ b/sql/backends/monet5/vaults/monetdb/monetdb.c
@@ -0,0 +1,218 @@
+/*
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * 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 2024 MonetDB Foundation;
+ * Copyright August 2008 - 2023 MonetDB B.V.;
+ * Copyright 1997 - July 2008 CWI.
+ */
+
+#include "monetdb_config.h"
+#include "rel_proto_loader.h"
+#include "rel_exp.h"
+
+#include "mal_instruction.h"
+#include "mal_interpreter.h"
+#include "mal_parser.h"
+#include "mal_builder.h"
+#include "mal_namespace.h"
+#include "mal_exception.h"
+#include "mal_linker.h"
+#include "mal_backend.h"
+#include "sql_types.h"
+#include "rel_bin.h"
+#include "mapi.h"
+
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to