From eaaabea43d01e7edd7c5b1994ad0e4716439bf9a Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Fri, 24 Sep 2021 21:47:15 -0400 Subject: [PATCH 01/14] move string functions with locale to nse_funcs and validate --- r/R/dplyr-functions.R | 30 ++++++++++++++++++++++++++++++ r/R/expression.R | 6 +++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 0ce4bdcdd5e..83c56c31abf 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -330,6 +330,36 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { } } +# Arrow does not supports a locale option for string case conversion functions, +# contrast to stringr's API, so the `locale` argument is only valid for the +# standard/default ones: "en", "C", and "POSIX". The following are string +# functions that take a `locale` option as its second argument: +# str_to_lower +# str_to_upper +# str_to_title +.valid_locales_for_string_functions <- list("en", "C", "POSIX") +arrow_string_function_with_locale_arg <- function(function_name, string, locale) { + assert_that( + exists(locale, .valid_locales_for_string_functions), + msg = paste( + "`locale` must be any of: ", + paste(.valid_locales_for_string_functions, collapse=",") + ) + ) +} + +nse_funcs$str_to_lower <- function(string, locale = "en") { + arrow_string_function_with_locale_arg("utf8_lower", string, locale) +} + +nse_funcs$str_to_upper <- function(string, locale = "en") { + arrow_string_function_with_locale_arg("utf8_upper", string, locale) +} + +nse_funcs$str_to_title <- function(string, locale = "en") { + arrow_string_function_with_locale_arg("utf8_title", string, locale) +} + nse_funcs$str_trim <- function(string, side = c("both", "left", "right")) { side <- match.arg(side) trim_fun <- switch(side, diff --git a/r/R/expression.R b/r/R/expression.R index 857be74f5ce..e3e425c02fd 100644 --- a/r/R/expression.R +++ b/r/R/expression.R @@ -50,9 +50,9 @@ "str_length" = "utf8_length", # str_pad is defined in dplyr-functions.R # str_sub is defined in dplyr-functions.R - "str_to_lower" = "utf8_lower", - "str_to_title" = "utf8_title", - "str_to_upper" = "utf8_upper", + # str_to_lower is defined in dplyr-functions.R + # str_to_title is defined in dplyr-functions.R + # str_to_upper is defined in dplyr-functions.R # str_trim is defined in dplyr-functions.R "stri_reverse" = "utf8_reverse", # substr is defined in dplyr-functions.R From 2883c083d030b49f340d8000a3457ed47ff284cf Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Fri, 24 Sep 2021 22:11:24 -0400 Subject: [PATCH 02/14] add missing Expression$create statement --- r/R/dplyr-functions.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 83c56c31abf..4aa6b72fce5 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -338,7 +338,7 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { # str_to_upper # str_to_title .valid_locales_for_string_functions <- list("en", "C", "POSIX") -arrow_string_function_with_locale_arg <- function(function_name, string, locale) { +arrow_string_function_with_locale_arg <- function(fun, string, locale) { assert_that( exists(locale, .valid_locales_for_string_functions), msg = paste( @@ -346,6 +346,7 @@ arrow_string_function_with_locale_arg <- function(function_name, string, locale) paste(.valid_locales_for_string_functions, collapse=",") ) ) + Expression$create(fun, string) } nse_funcs$str_to_lower <- function(string, locale = "en") { From 891d5cc7461bb7e3d3c1b0351607df492d7bd00c Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Fri, 24 Sep 2021 23:13:06 -0400 Subject: [PATCH 03/14] add tests --- .../testthat/test-dplyr-string-functions.R | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index 2946ebdb606..8434f67cdce 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -467,6 +467,46 @@ test_that("strsplit and str_split", { ) }) +test_that("str_to_lower, str_to_upper, and str_to_title", { + df <- tibble(x = c("Foo", " B\na R", "ⱭɽⱤoW", "ıI")) + + expect_dplyr_equal( + input %>% + transmute(x = str_to_lower(x)) %>% + collect(), + df + ) + + expect_error( + nse_funcs$str_to_lower("Apache Arrow", locale = "sp"), + "`locale` must be any of" + ) + + expect_dplyr_equal( + input %>% + transmute(x = str_to_upper(x)) %>% + collect(), + df + ) + + expect_error( + nse_funcs$str_to_upper("Apache Arrow", locale = "sp"), + "`locale` must be any of" + ) + + expect_dplyr_equal( + input %>% + transmute(x = str_to_title(x)) %>% + collect(), + df + ) + + expect_error( + nse_funcs$str_to_title("Apache Arrow", locale = "sp"), + "`locale` must be any of" + ) +}) + test_that("arrow_*_split_whitespace functions", { # use only ASCII whitespace characters df_ascii <- tibble(x = c("Foo\nand bar", "baz\tand qux and quux")) From bcd3a95e08f7cd3ba2d78dc71e3d181218788f22 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Sat, 25 Sep 2021 01:21:10 -0400 Subject: [PATCH 04/14] rename variable --- r/R/dplyr-functions.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 4aa6b72fce5..3b1e176752e 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -338,7 +338,8 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { # str_to_upper # str_to_title .valid_locales_for_string_functions <- list("en", "C", "POSIX") -arrow_string_function_with_locale_arg <- function(fun, string, locale) { + +arrow_string_function_with_locale_arg <- function(func, string, locale) { assert_that( exists(locale, .valid_locales_for_string_functions), msg = paste( @@ -346,7 +347,7 @@ arrow_string_function_with_locale_arg <- function(fun, string, locale) { paste(.valid_locales_for_string_functions, collapse=",") ) ) - Expression$create(fun, string) + Expression$create(func, string) } nse_funcs$str_to_lower <- function(string, locale = "en") { From c3d3364960367138cb8b20f15a2467032d936441 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Tue, 28 Sep 2021 13:28:23 -0400 Subject: [PATCH 05/14] fix "found in list" check for locale value --- r/R/dplyr-functions.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 3b1e176752e..b52bf607206 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -341,7 +341,7 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { arrow_string_function_with_locale_arg <- function(func, string, locale) { assert_that( - exists(locale, .valid_locales_for_string_functions), + locale %in% .valid_locales_for_string_functions, msg = paste( "`locale` must be any of: ", paste(.valid_locales_for_string_functions, collapse=",") From a108b63232f0c0bf11c329de60b58b9668e81642 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Tue, 28 Sep 2021 16:42:30 -0400 Subject: [PATCH 06/14] update locale validation approach --- r/R/dplyr-functions.R | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index b52bf607206..970f171902d 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -330,36 +330,34 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { } } -# Arrow does not supports a locale option for string case conversion functions, -# contrast to stringr's API, so the `locale` argument is only valid for the -# standard/default ones: "en", "C", and "POSIX". The following are string -# functions that take a `locale` option as its second argument: +# Currently, Arrow does not supports a locale option for string case conversion +# functions, contrast to stringr's API, so the 'locale' argument is only valid +# for stringr's default value ("en"). The following are string functions that +# take a 'locale' option as its second argument: # str_to_lower # str_to_upper # str_to_title -.valid_locales_for_string_functions <- list("en", "C", "POSIX") - -arrow_string_function_with_locale_arg <- function(func, string, locale) { - assert_that( - locale %in% .valid_locales_for_string_functions, - msg = paste( - "`locale` must be any of: ", - paste(.valid_locales_for_string_functions, collapse=",") - ) - ) - Expression$create(func, string) -} - +# +# Arrow locale will be supported with ARROW-14126 nse_funcs$str_to_lower <- function(string, locale = "en") { - arrow_string_function_with_locale_arg("utf8_lower", string, locale) + if (!identical(locale, "en")) { + stop("Providing 'locale' to 'str_to_lower' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + } + Expression$create("utf8_lower", string) } nse_funcs$str_to_upper <- function(string, locale = "en") { - arrow_string_function_with_locale_arg("utf8_upper", string, locale) + if (!identical(locale, "en")) { + stop("Providing 'locale' to 'str_to_upper' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + } + Expression$create("utf8_upper", string) } nse_funcs$str_to_title <- function(string, locale = "en") { - arrow_string_function_with_locale_arg("utf8_title", string, locale) + if (!identical(locale, "en")) { + stop("Providing 'locale' to 'str_to_title' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + } + Expression$create("utf8_title", string) } nse_funcs$str_trim <- function(string, side = c("both", "left", "right")) { From 67c6a6a44d9ae7fd41f6ea7a49fdaa7d7156aaa5 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Tue, 28 Sep 2021 16:46:47 -0400 Subject: [PATCH 07/14] update tests --- r/tests/testthat/test-dplyr-string-functions.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index 8434f67cdce..b97700795a1 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -479,7 +479,7 @@ test_that("str_to_lower, str_to_upper, and str_to_title", { expect_error( nse_funcs$str_to_lower("Apache Arrow", locale = "sp"), - "`locale` must be any of" + "Providing 'locale' to 'str_to_lower' is not supported in Arrow" ) expect_dplyr_equal( @@ -491,7 +491,7 @@ test_that("str_to_lower, str_to_upper, and str_to_title", { expect_error( nse_funcs$str_to_upper("Apache Arrow", locale = "sp"), - "`locale` must be any of" + "Providing 'locale' to 'str_to_upper' is not supported in Arrow" ) expect_dplyr_equal( @@ -503,7 +503,7 @@ test_that("str_to_lower, str_to_upper, and str_to_title", { expect_error( nse_funcs$str_to_title("Apache Arrow", locale = "sp"), - "`locale` must be any of" + "Providing 'locale' to 'str_to_title' is not supported in Arrow" ) }) From 168e558f9ba5ae8503d5fc6c68a5d08f9984797a Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Tue, 28 Sep 2021 23:28:30 -0400 Subject: [PATCH 08/14] fix long lines (linter) --- r/R/dplyr-functions.R | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 970f171902d..35834385232 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -341,21 +341,24 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { # Arrow locale will be supported with ARROW-14126 nse_funcs$str_to_lower <- function(string, locale = "en") { if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_lower' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + stop("Providing 'locale' to 'str_to_lower' is not supported in Arrow; ", + "to change locale use 'Sys.setlocale()'", call. = FALSE) } Expression$create("utf8_lower", string) } nse_funcs$str_to_upper <- function(string, locale = "en") { if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_upper' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + stop("Providing 'locale' to 'str_to_upper' is not supported in Arrow; ", + "to change locale use 'Sys.setlocale()'", call. = FALSE) } Expression$create("utf8_upper", string) } nse_funcs$str_to_title <- function(string, locale = "en") { if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_title' is not supported in Arrow; to change locale use 'Sys.setlocale()'", call. = FALSE) + stop("Providing 'locale' to 'str_to_title' is not supported in Arrow; ", + "to change locale use 'Sys.setlocale()'", call. = FALSE) } Expression$create("utf8_title", string) } From bf58bb930e4a1740393543a89393022e71d9a0c0 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 14:49:46 -0400 Subject: [PATCH 09/14] remove unicode from tests and simplify --- .../testthat/test-dplyr-string-functions.R | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index b97700795a1..a7fa3754bcf 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -468,43 +468,22 @@ test_that("strsplit and str_split", { }) test_that("str_to_lower, str_to_upper, and str_to_title", { - df <- tibble(x = c("Foo", " B\na R", "ⱭɽⱤoW", "ıI")) - - expect_dplyr_equal( - input %>% - transmute(x = str_to_lower(x)) %>% - collect(), - df - ) - - expect_error( - nse_funcs$str_to_lower("Apache Arrow", locale = "sp"), - "Providing 'locale' to 'str_to_lower' is not supported in Arrow" - ) - - expect_dplyr_equal( - input %>% - transmute(x = str_to_upper(x)) %>% - collect(), - df - ) - - expect_error( - nse_funcs$str_to_upper("Apache Arrow", locale = "sp"), - "Providing 'locale' to 'str_to_upper' is not supported in Arrow" - ) - - expect_dplyr_equal( - input %>% - transmute(x = str_to_title(x)) %>% - collect(), - df - ) + df <- tibble(x = c("1Foo1", " \tB a R\n", "!apACHe aRroW!")) + funcs <- c(str_to_lower, str_to_upper, str_to_title) + for (func in funcs) { + expect_dplyr_equal( + input %>% + transmute(x = func(x)) %>% + collect(), + df + ) - expect_error( - nse_funcs$str_to_title("Apache Arrow", locale = "sp"), - "Providing 'locale' to 'str_to_title' is not supported in Arrow" - ) + funcname = as.character(substitute(func)) + expect_error( + nse_funcs[[funcname]]("Apache Arrow", locale = "sp"), + "Providing a value for 'locale' other than the default ('en') is not supported by Arrow" + ) + } }) test_that("arrow_*_split_whitespace functions", { From 42f68601667f9a541f9c4d2854837fec4295e235 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 14:50:21 -0400 Subject: [PATCH 10/14] update locale error message and consolidate error --- r/R/dplyr-functions.R | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index 35834385232..ad538f997cb 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -339,28 +339,24 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { # str_to_title # # Arrow locale will be supported with ARROW-14126 -nse_funcs$str_to_lower <- function(string, locale = "en") { +.arrow_string_function_with_locale_arg <- function(func, string, locale) { if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_lower' is not supported in Arrow; ", - "to change locale use 'Sys.setlocale()'", call. = FALSE) + stop("Providing a value for 'locale' other than the default ('en') is not supported by Arrow. ", + "To change locale, use 'Sys.setlocale()'", call. = FALSE) } - Expression$create("utf8_lower", string) + Expression$create(func, string) +} + +nse_funcs$str_to_lower <- function(string, locale = "en") { + .arrow_string_function_with_locale_arg("utf8_lower", string, locale) } nse_funcs$str_to_upper <- function(string, locale = "en") { - if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_upper' is not supported in Arrow; ", - "to change locale use 'Sys.setlocale()'", call. = FALSE) - } - Expression$create("utf8_upper", string) + .arrow_string_function_with_locale_arg("utf8_upper", string, locale) } nse_funcs$str_to_title <- function(string, locale = "en") { - if (!identical(locale, "en")) { - stop("Providing 'locale' to 'str_to_title' is not supported in Arrow; ", - "to change locale use 'Sys.setlocale()'", call. = FALSE) - } - Expression$create("utf8_title", string) + .arrow_string_function_with_locale_arg("utf8_title", string, locale) } nse_funcs$str_trim <- function(string, side = c("both", "left", "right")) { From 172db90d99e591bdd320bbdc0d2a5727b26408a0 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 15:51:29 -0400 Subject: [PATCH 11/14] simplify tests, mutate with multiple columns --- .../testthat/test-dplyr-string-functions.R | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index a7fa3754bcf..9f410fb9bc2 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -469,21 +469,22 @@ test_that("strsplit and str_split", { test_that("str_to_lower, str_to_upper, and str_to_title", { df <- tibble(x = c("1Foo1", " \tB a R\n", "!apACHe aRroW!")) - funcs <- c(str_to_lower, str_to_upper, str_to_title) - for (func in funcs) { - expect_dplyr_equal( - input %>% - transmute(x = func(x)) %>% - collect(), - df - ) + expect_dplyr_equal( + input %>% + transmute( + x_lower = str_to_lower(x), + x_upper = str_to_upper(x), + x_title = str_to_title(x) + ) %>% + collect(), + df + ) - funcname = as.character(substitute(func)) - expect_error( - nse_funcs[[funcname]]("Apache Arrow", locale = "sp"), - "Providing a value for 'locale' other than the default ('en') is not supported by Arrow" - ) - } + # Error checking a single function because they all use the same code path. + expect_error( + nse_funcs$str_to_lower("Apache Arrow", locale = "sp"), + "Providing a value for 'locale' other than the default ('en') is not supported by Arrow" + ) }) test_that("arrow_*_split_whitespace functions", { From 2d350be28201251c151d93489d4fbf4d20fdf367 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 17:07:24 -0400 Subject: [PATCH 12/14] rename/restructure function for invalid locale --- r/R/dplyr-functions.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/r/R/dplyr-functions.R b/r/R/dplyr-functions.R index ad538f997cb..78f2e393305 100644 --- a/r/R/dplyr-functions.R +++ b/r/R/dplyr-functions.R @@ -339,24 +339,26 @@ arrow_string_join_function <- function(null_handling, null_replacement = NULL) { # str_to_title # # Arrow locale will be supported with ARROW-14126 -.arrow_string_function_with_locale_arg <- function(func, string, locale) { +stop_if_locale_provided <- function(locale) { if (!identical(locale, "en")) { stop("Providing a value for 'locale' other than the default ('en') is not supported by Arrow. ", "To change locale, use 'Sys.setlocale()'", call. = FALSE) } - Expression$create(func, string) } nse_funcs$str_to_lower <- function(string, locale = "en") { - .arrow_string_function_with_locale_arg("utf8_lower", string, locale) + stop_if_locale_provided(locale) + Expression$create("utf8_lower", string) } nse_funcs$str_to_upper <- function(string, locale = "en") { - .arrow_string_function_with_locale_arg("utf8_upper", string, locale) + stop_if_locale_provided(locale) + Expression$create("utf8_upper", string) } nse_funcs$str_to_title <- function(string, locale = "en") { - .arrow_string_function_with_locale_arg("utf8_title", string, locale) + stop_if_locale_provided(locale) + Expression$create("utf8_title", string) } nse_funcs$str_trim <- function(string, side = c("both", "left", "right")) { From a98eb2726cb3ab125439227aab0c7d09bd75d596 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 22:55:47 -0400 Subject: [PATCH 13/14] remove inconsistent test with stringr str_to_title --- r/tests/testthat/test-dplyr-string-functions.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index 9f410fb9bc2..92a56aa0deb 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -468,7 +468,7 @@ test_that("strsplit and str_split", { }) test_that("str_to_lower, str_to_upper, and str_to_title", { - df <- tibble(x = c("1Foo1", " \tB a R\n", "!apACHe aRroW!")) + df <- tibble(x = c("foo1", " \tB a R\n", "!apACHe aRroW!")) expect_dplyr_equal( input %>% transmute( From 9a51d7179d6e615d7cde78a512f9ff29c252bd36 Mon Sep 17 00:00:00 2001 From: Eduardo Ponce Date: Wed, 29 Sep 2021 23:38:28 -0400 Subject: [PATCH 14/14] enable fixed parameter of expect_error --- r/tests/testthat/test-dplyr-string-functions.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r/tests/testthat/test-dplyr-string-functions.R b/r/tests/testthat/test-dplyr-string-functions.R index 92a56aa0deb..8e603bc0d97 100644 --- a/r/tests/testthat/test-dplyr-string-functions.R +++ b/r/tests/testthat/test-dplyr-string-functions.R @@ -483,7 +483,8 @@ test_that("str_to_lower, str_to_upper, and str_to_title", { # Error checking a single function because they all use the same code path. expect_error( nse_funcs$str_to_lower("Apache Arrow", locale = "sp"), - "Providing a value for 'locale' other than the default ('en') is not supported by Arrow" + "Providing a value for 'locale' other than the default ('en') is not supported by Arrow", + fixed = TRUE ) })