Skip to content

Commit

Permalink
new option for glue_sql delimiters
Browse files Browse the repository at this point in the history
  • Loading branch information
daranzolin committed May 1, 2024
1 parent aaef58d commit 233f21d
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 3 deletions.
5 changes: 4 additions & 1 deletion R/source_sql_to_dataframe.R
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@ source_sql_to_dataframe <- function(path, query_params = NULL) {
connection_call <- paste0("con <- ", connection_string)
eval(parse(text = connection_call))
on.exit(DBI::dbDisconnect(con))
delimiters <- strsplit(sqltargets_option_get("sqltargets.glue_sql_delimiters"), "")[[1]]
open <- delimiters[1]
close <- delimiters[2]
query <- lines[2:length(lines)]
query <- query[!grepl("tar_load", query)]
query <- paste(query, collapse = " ")
query <- glue::glue_sql(query, .con = con, .envir = query_params)
query <- glue::glue_sql(query, .con = con, .open = open, .close = close, .envir = query_params)
out <- DBI::dbGetQuery(con, query)
return(out)

Expand Down
3 changes: 2 additions & 1 deletion R/sqltargets-option.R
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
#'
#' ## Available Options
#'
#' - `"sqltargets.target_file_suffix"` - character. Length 1. Suffix appended to target name for SQL file dependency
#' - `"sqltargets.target_file_suffix"` - character. Length 1. Suffix appended to target name for SQL file dependency.
#' - `"sqltargets.glue_sql_delimiters"` - character. Length 1. Two characters. The opening and closing delimiters passed to `glue::glue_sql()`.
#' @rdname sqltargets-options
#' @export
sqltargets_option_get <- function(option_name) {
Expand Down
1 change: 1 addition & 0 deletions R/zzz.R
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ sqltargets_env <- function() {

.onAttach <- function(lib, pkg) {
sqltargets.env$sqltargets.target_file_suffix <- "_query_file"
sqltargets.env$sqltargets.glue_sql_delimiters <- "{}"
}
3 changes: 2 additions & 1 deletion man/sqltargets-options.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions tests/testthat/test-tar-sqltargets-options.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
test_that("sqltargets_option_set() works", {
sqltargets_option_set("sqltargets.target_file_suffix", "_x_query")
sqltargets_option_set("sqltargets.glue_sql_delimiters", "<>")
expect_equal(sqltargets_option_get("sqltargets.target_file_suffix"), "_x_query")
expect_equal(sqltargets_option_get("sqltargets.glue_sql_delimiters"), "<>")
})

test_that("different delimiters work", {
lines <- c(
"-- !preview conn=DBI::dbConnect(RSQLite::SQLite())",
"-- tar_load(query_params)",
"select @val@ as @col_name@",
""
)
writeLines(lines, "query.sql")
targets::tar_script({
sqltargets_option_set("sqltargets.glue_sql_delimiters", "@@")
list(
targets::tar_target(query_params, list(val = 3, col_name = "column1")),
tar_sql(
report,
path = "query.sql",
query_params = query_params
)
)
})
suppressMessages(targets::tar_make(callr_function = NULL))
out <- targets::tar_read(report)
expect_equal(out, data.frame(column1 = 3))
})

0 comments on commit 233f21d

Please sign in to comment.