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__