Changeset: f0696222226a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f0696222226a
Modified Files:
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/vaults/odbc/odbc_loader.c
Branch: Mar2025
Log Message:

added function ODBCloader infra, missing loading data into bats


diffs (88 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -86,7 +86,7 @@ dump_2(MalBlkPtr mb, const char *mod, co
        return q;
 }
 
-static InstrPtr
+InstrPtr
 pushPtr(MalBlkPtr mb, InstrPtr q, ptr val)
 {
        int _t;
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -283,4 +283,5 @@ extern stmt *const_column(backend *ba, s
 extern stmt *stmt_fetch(backend *ba, stmt *val);
 extern stmt *stmt_rename(backend *ba, sql_exp *e, stmt *s);
 
+extern InstrPtr pushPtr(MalBlkPtr mb, InstrPtr q, ptr val);
 #endif /* _SQL_STATEMENT_H_ */
diff --git a/sql/backends/monet5/vaults/odbc/odbc_loader.c 
b/sql/backends/monet5/vaults/odbc/odbc_loader.c
--- a/sql/backends/monet5/vaults/odbc/odbc_loader.c
+++ b/sql/backends/monet5/vaults/odbc/odbc_loader.c
@@ -15,6 +15,7 @@
 #include "rel_exp.h"
 
 #include "mal_exception.h"
+#include "mal_builder.h"
 #include "mal_client.h"
 
 //#ifdef _MSC_VER
@@ -532,8 +533,45 @@ static void *
 odbc_load(void *BE, sql_subfunc *f, char *url, sql_exp *topn)
 {
        backend *be = (backend*)BE;
-       mvc *sql = be->mvc;
-       return odbc_query(sql, f, url, NULL, topn, 2);
+       if (!f)
+               return NULL;
+
+       (void)topn;
+
+       InstrPtr q = newStmtArgs(be->mb, "odbc", "loader", 
list_length(f->coltypes) + 2);
+       int col = 0;
+       list *l = sa_list(be->mvc->sa);
+       for (node *n = f->coltypes->h, *nn = f->colnames->h; n && nn; col++, n 
= n->next, nn = nn->next) {
+               const char *name = nn->data;
+               sql_subtype *tp = n->data;
+               int type = newBatType(tp->type->localtype);
+               if (col)
+                       q = pushReturn(be->mb, q, newTmpVariable(be->mb, type));
+               else
+                       getArg(q, 0) = newTmpVariable(be->mb, type);
+               stmt *s = stmt_blackbox_result(be, q, col, tp);
+               s = stmt_alias(be, s, col+1, f->tname, name);
+               list_append(l, s);
+       }
+       q = pushStr(be->mb, q, url);
+       q = pushPtr(be->mb, q, f);
+       pushInstruction(be->mb, q);
+       return stmt_list(be, l);
+}
+
+static str
+ODBCloader(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       backend *be = NULL;
+       str msg;
+       if ((msg = getBackendContext(cntxt, &be)) != NULL)
+               return msg;
+       (void)mb;
+       str uri = *getArgReference_str(stk, pci, pci->retc);
+       sql_subfunc *f = *(sql_subfunc**)getArgReference_ptr(stk, pci, 
pci->retc+1);
+
+       return odbc_query(be->mvc, f, uri, NULL, NULL, 2);
+       //return MAL_SUCCEED;
 }
 
 static str
@@ -558,6 +596,7 @@ ODBCepilogue(void *ret)
 static mel_func odbc_init_funcs[] = {
        pattern("odbc", "prelude", ODBCprelude, false, "", noargs),
        command("odbc", "epilogue", ODBCepilogue, false, "", noargs),
+    pattern("odbc", "loader", ODBCloader, true, "Import a table via the odbc 
uri", args(1,3, batvarargany("",0),arg("uri",str),arg("func",ptr))),
 { .imp=NULL }
 };
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to