diff --git a/NEWS.md b/NEWS.md index 9c358ae..f4d1e46 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ # glue (development version) * The required version of R is now 3.2 (#189) +* `glue_sql()` now collapses `DBI::SQL()` elements correctly (#192 @shrektan) # glue 1.4.1 diff --git a/R/sql.R b/R/sql.R index f36e6ef..bb1a357 100644 --- a/R/sql.R +++ b/R/sql.R @@ -164,6 +164,9 @@ sql_quote_transformer <- function(connection, .na) { } else { res <- eval(parse(text = text, keep.source = FALSE), envir) if (inherits(res, "SQL")) { + if (should_collapse) { + res <- glue_collapse(res, ", ") + } return(res) } diff --git a/tests/testthat/test-sql.R b/tests/testthat/test-sql.R index 0d5d850..3b4f18b 100644 --- a/tests/testthat/test-sql.R +++ b/tests/testthat/test-sql.R @@ -89,6 +89,10 @@ describe("glue_sql", { expect_identical(glue_sql("x IN ({c(NA, 1L)*})", .con = con), DBI::SQL(paste0("x IN (NULL, 1)"))) expect_identical(glue_sql("x IN ({c(NA, TRUE)*})", .con = con), DBI::SQL(paste0("x IN (NULL, TRUE)"))) }) + + it("should handle DBI::SQL() elements correctly when collapsing (#191)", { + expect_identical(glue_sql("x IN ({DBI::SQL(c('a','b'))*})", .con = con), DBI::SQL(paste0("x IN (a, b)"))) + }) }) describe("glue_data_sql", {