From 179cc2850231a099eb980a287a43a389f1727857 Mon Sep 17 00:00:00 2001 From: avsdev-cw Date: Mon, 9 Nov 2020 12:35:10 +0000 Subject: [PATCH] Added the ability to get the last run query in R --- R/Database.R | 6 ++++++ src/R_modb_manage.c | 17 +++++++++++++++++ src/R_modb_manage.h | 2 ++ 3 files changed, 25 insertions(+) diff --git a/R/Database.R b/R/Database.R index eec9b0b..4b4e132 100644 --- a/R/Database.R +++ b/R/Database.R @@ -230,4 +230,10 @@ modb_use <- function(modb_name, override = FALSE, ...) { conn_ref <- modb_conn_ref(args = list(...)) res <- .Call(c_rmodb_use, conn_ref, modb_name, as.logical(override)) return(res) +} + +modb_get_last_query <- function(...) { + conn_ref <- modb_conn_ref(args = list(...)) + res <- .Call(c_rmodb_getLastQuery, conn_ref) + return(res) } \ No newline at end of file diff --git a/src/R_modb_manage.c b/src/R_modb_manage.c index 70fa806..908caaf 100644 --- a/src/R_modb_manage.c +++ b/src/R_modb_manage.c @@ -236,3 +236,20 @@ SEXP rmodb_use(SEXP r_conn_ref, SEXP r_name, SEXP r_override) return Rf_ScalarLogical(TRUE); } + + +SEXP rmodb_getLastQuery(SEXP r_conn_ref) +{ + stored_conn *sconn; + SEXP r_res; + + if ((sconn = getConnectionByRef(r_conn_ref)) == 0) { + Rf_error("invalid connection reference\n"); + } + + r_res = Rf_allocVector(STRSXP, 1); + SET_STRING_ELT(r_res, 0, PROTECT(Rf_mkCharLen(sconn->last_qry, (int)sconn->last_qry_len))); + + UNPROTECT(2); + return r_res; +} diff --git a/src/R_modb_manage.h b/src/R_modb_manage.h index f8aa930..dc5cabe 100644 --- a/src/R_modb_manage.h +++ b/src/R_modb_manage.h @@ -24,4 +24,6 @@ SEXP rmodb_destroy(SEXP r_conn_ref, SEXP r_name); SEXP rmodb_use(SEXP r_conn_ref, SEXP r_name, SEXP r_override); +SEXP rmodb_getLastQuery(SEXP r_conn_ref); + #endif // H__R_MODB_MANAGE__