diff --git a/NEWS.md b/NEWS.md index 78ff3aa75..9860353d9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -15,6 +15,8 @@ * `across(everything())` doesn't select grouping columns created via `.by` in `summarise()` (@mgirlich, #1493). +* Use `COUNT_BIG` instead of `COUNT` for SQL server so that `tally()` and + `count()` work regardless of size of the data (@edward-burn, #1498). * New translations of clock function `date_count_between()` for SQL server, Redshift, Snowflake, Postgres, and Spark (@edward-burn, #1495). diff --git a/R/backend-mssql.R b/R/backend-mssql.R index ac65bc08e..0bb3b9d9d 100644 --- a/R/backend-mssql.R +++ b/R/backend-mssql.R @@ -425,6 +425,7 @@ simulate_mssql <- function(version = "15.0") { sql_variant( mssql_scalar, sql_translator(.parent = base_odbc_agg, + n = function() sql("COUNT_BIG(*)"), sd = sql_aggregate("STDEV", "sd"), var = sql_aggregate("VAR", "var"), str_flatten = function(x, collapse = "") sql_expr(string_agg(!!x, !!collapse)), diff --git a/tests/testthat/_snaps/backend-mssql.md b/tests/testthat/_snaps/backend-mssql.md index 3ad0ef302..4f9918900 100644 --- a/tests/testthat/_snaps/backend-mssql.md +++ b/tests/testthat/_snaps/backend-mssql.md @@ -497,6 +497,38 @@ FROM `df` ORDER BY `y` +# count_big + + Code + dplyr::count(mf) + Output + + SELECT COUNT_BIG(*) AS `n` + FROM `df` + +--- + + Code + dplyr::tally(mf) + Output + + SELECT COUNT_BIG(*) AS `n` + FROM `df` + +# can copy_to() and compute() with temporary tables (#438) + + Code + db <- copy_to(con, df, name = unique_table_name(), temporary = TRUE) + Message + Created a temporary table named #dbplyr_{tmp} + +--- + + Code + db2 <- db %>% mutate(y = x + 1) %>% compute() + Message + Created a temporary table named #dbplyr_{tmp} + # add prefix to temporary table Code