You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi @hadley@mgirlich, I might be misunderstanding but I think there might be some inconsistency in the way that stringr::str_like() is being translated with respect to the argument ignore_case
In the documentation it says ignore_case: Ignore case of matches? Defaults to TRUE to match the SQL LIKE operator.
In postgres and redshift I see what I would expect - that ILIKE is used when ignore_case is true, while LIKE is used when ignore_case is false. But for the backends without ILIKE we have LIKE being used when ignore_case is true and error thrown when false. But for these latter backends, isn't this the wrong way around (as in I would have expected an error if ignore_case was true [or maybe cast both to lower and use LIKE] and use LIKE if ignore_case is false)
library(dbplyr)
lf_postgres<- lazy_frame(a=TRUE, b=1, c=2, d="zzzyzzz",
con= simulate_postgres())
lf_redshift<- lazy_frame(a=TRUE, b=1, c=2, d="zzzyzzz",
con= simulate_redshift())
lf_mssql<- lazy_frame(a=TRUE, b=1, c=2, d="zzzyzzz",
con= simulate_mssql())
lf_snowflake<- lazy_frame(a=TRUE, b=1, c=2, d="zzzyzzz",
con= simulate_snowflake())
lf_spark<- lazy_frame(a=TRUE, b=1, c=2, d="zzzyzzz",
con= simulate_spark_sql())
# ilike if we ignore case - should we not get an error here for backends without ilike?lf_postgres|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=TRUE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` ILIKE 'Y')lf_redshift|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=TRUE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` ILIKE 'Y')lf_mssql|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=TRUE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` LIKE 'Y')lf_snowflake|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=TRUE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` LIKE 'Y')lf_spark|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=TRUE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` LIKE 'Y')# like if we do not ignore case - should we not get like here for all?lf_postgres|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=FALSE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` LIKE 'Y')lf_redshift|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=FALSE))
#> <SQL>#> SELECT `df`.*#> FROM `df`#> WHERE (`d` LIKE 'Y')lf_mssql|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=FALSE))
#> Error in `stringr::str_like()`:#> ! Backend only supports case insensitve `str_like()`.lf_snowflake|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=FALSE))
#> Error in `stringr::str_like()`:#> ! Backend only supports case insensitve `str_like()`.lf_spark|>dplyr::filter(stringr::str_like(d, "Y", ignore_case=FALSE))
#> Error in `stringr::str_like()`:#> ! Backend only supports case insensitve `str_like()`.
Hi @hadley @mgirlich, I might be misunderstanding but I think there might be some inconsistency in the way that stringr::str_like() is being translated with respect to the argument ignore_case
In the documentation it says
ignore_case: Ignore case of matches? Defaults to TRUE to match the SQL LIKE operator.
In postgres and redshift I see what I would expect - that ILIKE is used when ignore_case is true, while LIKE is used when ignore_case is false. But for the backends without ILIKE we have LIKE being used when ignore_case is true and error thrown when false. But for these latter backends, isn't this the wrong way around (as in I would have expected an error if ignore_case was true [or maybe cast both to lower and use LIKE] and use LIKE if ignore_case is false)
Created on 2024-04-04 with reprex v2.0.2
Here is an additional reprex with a live snowflake database
Created on 2024-04-04 with reprex v2.0.2
The text was updated successfully, but these errors were encountered: