From a46249ec68f585e17fad932ceb9ed3864e9d1f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sat, 27 Jan 2018 21:34:33 +0100 Subject: [PATCH] default implementations of dbQuoteIdentifier() and dbQuoteLiteral() preserve names, closes #173 - Default implementations of `dbQuoteIdentifier()` and `dbQuoteLiteral()` preserve names, default implementation of `dbQuoteString()` strips names (#173). --- R/quote.R | 8 ++++---- tests/testthat/test-quote.R | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/R/quote.R b/R/quote.R index 5145a9638..6c2f15a8f 100644 --- a/R/quote.R +++ b/R/quote.R @@ -112,10 +112,10 @@ quote_identifier <- # Avoid fixed = TRUE due to https://github.com/r-dbi/DBItest/issues/156 x <- gsub('"', '""', enc2utf8(x)) if (length(x) == 0L) { - SQL(character()) + SQL(character(), names = names(x)) } else { # Not calling encodeString() here to keep things simple - SQL(paste('"', x, '"', sep = "")) + SQL(paste('"', x, '"', sep = ""), names = names(x)) } } @@ -285,12 +285,12 @@ setMethod("dbQuoteLiteral", signature("DBIConnection"), }, character(1) ) - return(SQL(blob_data)) + return(SQL(blob_data, names = names(x))) } if (is.logical(x)) x <- as.numeric(x) x <- as.character(x) x[is.na(x)] <- "NULL" - SQL(x) + SQL(x, names = names(x)) } ) diff --git a/tests/testthat/test-quote.R b/tests/testthat/test-quote.R index 84ec40bc2..cfca97d5c 100644 --- a/tests/testthat/test-quote.R +++ b/tests/testthat/test-quote.R @@ -9,6 +9,15 @@ test_that("identifier", { expect_equal(dbQuoteIdentifier(ANSI(), SQL('"a b"')), SQL('"a b"')) }) +test_that("identifier names", { + expect_equal(dbQuoteIdentifier(ANSI(), setNames(character(), character())), SQL(character(), names = character())) + expect_equal(dbQuoteIdentifier(ANSI(), c(a = "a")), SQL('"a"', names = "a")) + expect_equal(dbQuoteIdentifier(ANSI(), c(ab = "a b")), SQL('"a b"', names = "ab")) + + expect_equal(dbQuoteIdentifier(ANSI(), SQL('"a"', names = "a")), SQL('"a"', names = "a")) + expect_equal(dbQuoteIdentifier(ANSI(), SQL('"a b"', names = "ab")), SQL('"a b"', names = "ab")) +}) + test_that("SQL names", { expect_null(names(SQL(letters))) expect_equal(names(SQL(letters, names = LETTERS)), LETTERS)