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 -- [email protected]
To unsubscribe send an email to [email protected]