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