From dddd35f056ea90e6f43d12794f24cd04d79c89c6 Mon Sep 17 00:00:00 2001 From: Romain Francois Date: Tue, 21 May 2024 09:44:06 +0000 Subject: [PATCH 1/3] mark min, max and sum as aggregates --- src/include/rfuns_extension.hpp | 6 +++--- src/minmax.cpp | 8 ++++---- src/rfuns_extension.cpp | 6 +++--- src/sum.cpp | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/include/rfuns_extension.hpp b/src/include/rfuns_extension.hpp index 0940b99..543c79d 100644 --- a/src/include/rfuns_extension.hpp +++ b/src/include/rfuns_extension.hpp @@ -64,9 +64,9 @@ ScalarFunctionSet base_r_as_integer(); ScalarFunctionSet base_r_as_numeric(); // sum -AggregateFunctionSet base_r_sum(); -AggregateFunctionSet base_r_min(); -AggregateFunctionSet base_r_max(); +AggregateFunctionSet base_r_aggregate_sum(); +AggregateFunctionSet base_r_aggregate_min(); +AggregateFunctionSet base_r_aggregate_max(); ScalarFunctionSet binary_dispatch(ScalarFunctionSet fn) ; diff --git a/src/minmax.cpp b/src/minmax.cpp index 0ce750f..cc718d5 100644 --- a/src/minmax.cpp +++ b/src/minmax.cpp @@ -142,12 +142,12 @@ AggregateFunctionSet base_r_minmax(std::string name) { return set; } -AggregateFunctionSet base_r_min() { - return base_r_minmax("r_base::min"); +AggregateFunctionSet base_r_aggregate_min() { + return base_r_minmax("r_base::aggregate::min"); } -AggregateFunctionSet base_r_max() { - return base_r_minmax("r_base::max"); +AggregateFunctionSet base_r_aggregate_max() { + return base_r_minmax("r_base::aggregate::max"); } diff --git a/src/rfuns_extension.cpp b/src/rfuns_extension.cpp index 82fe5ef..6916df4 100644 --- a/src/rfuns_extension.cpp +++ b/src/rfuns_extension.cpp @@ -37,9 +37,9 @@ static void register_rfuns(DatabaseInstance &instance) { ExtensionUtil::RegisterFunction(instance, base_r_as_integer()); ExtensionUtil::RegisterFunction(instance, base_r_as_numeric()); - ExtensionUtil::RegisterFunction(instance, base_r_sum()); - ExtensionUtil::RegisterFunction(instance, base_r_min()); - ExtensionUtil::RegisterFunction(instance, base_r_max()); + ExtensionUtil::RegisterFunction(instance, base_r_aggregate_sum()); + ExtensionUtil::RegisterFunction(instance, base_r_aggregate_min()); + ExtensionUtil::RegisterFunction(instance, base_r_aggregate_max()); } } // namespace rfuns diff --git a/src/sum.cpp b/src/sum.cpp index 069a500..fce14f2 100644 --- a/src/sum.cpp +++ b/src/sum.cpp @@ -117,8 +117,8 @@ void add_RSum(AggregateFunctionSet& set, const LogicalType& type) { )); } -AggregateFunctionSet base_r_sum() { - AggregateFunctionSet set("r_base::sum"); +AggregateFunctionSet base_r_aggregate_sum() { + AggregateFunctionSet set("r_base::aggregate::sum"); add_RSum(set, LogicalType::BOOLEAN); add_RSum(set, LogicalType::INTEGER); From 35bb5b25155b4b87c49cb8055d6211e6cb0e87e0 Mon Sep 17 00:00:00 2001 From: Romain Francois Date: Tue, 21 May 2024 09:44:26 +0000 Subject: [PATCH 2/3] adjst tests --- duckdb-rfuns-r/R/aggregate.R | 6 +++--- duckdb-rfuns-r/R/project.R | 6 +++--- duckdb-rfuns-r/R/rfuns.R | 8 +++++++- duckdb-rfuns-r/tests/testthat/_snaps/minmax.md | 4 ++-- duckdb-rfuns-r/tests/testthat/_snaps/sum.md | 12 ++++++------ duckdb-rfuns-r/tests/testthat/test-sum.R | 8 ++++---- 6 files changed, 25 insertions(+), 19 deletions(-) diff --git a/duckdb-rfuns-r/R/aggregate.R b/duckdb-rfuns-r/R/aggregate.R index 168c964..40a8a08 100644 --- a/duckdb-rfuns-r/R/aggregate.R +++ b/duckdb-rfuns-r/R/aggregate.R @@ -11,18 +11,18 @@ #' @rdname aggregate #' @export rfuns_sum <- function(x, ...) { - rfuns("aggregate", "sum", tibble(x = x), ...) + rfuns("aggregate::sum", tibble(x = x), ...) } #' @rdname aggregate #' @export rfuns_min <- function(x, ...) { - rfuns("aggregate", "min", tibble(x = x), ...) + rfuns("aggregate::min", tibble(x = x), ...) } #' @rdname aggregate #' @export rfuns_max <- function(x, ...) { - rfuns("aggregate", "max", tibble(x = x), ...) + rfuns("aggregate::max", tibble(x = x), ...) } diff --git a/duckdb-rfuns-r/R/project.R b/duckdb-rfuns-r/R/project.R index bb9222b..5898357 100644 --- a/duckdb-rfuns-r/R/project.R +++ b/duckdb-rfuns-r/R/project.R @@ -4,7 +4,7 @@ #' #' @export rfuns_is.na <- function(x) { - rfuns("project", "is.na", tibble(x = x)) + rfuns("is.na", tibble(x = x)) } #' as.integer() @@ -13,7 +13,7 @@ rfuns_is.na <- function(x) { #' #' @export rfuns_as.integer <- function(x) { - rfuns("project", "as.integer", tibble(x = x)) + rfuns("as.integer", tibble(x = x)) } #' as.numeric() @@ -22,5 +22,5 @@ rfuns_as.integer <- function(x) { #' #' @export rfuns_as.numeric <- function(x) { - rfuns("project", "as.numeric", tibble(x = x)) + rfuns("as.numeric", tibble(x = x)) } diff --git a/duckdb-rfuns-r/R/rfuns.R b/duckdb-rfuns-r/R/rfuns.R index 8b33e23..031d7a1 100644 --- a/duckdb-rfuns-r/R/rfuns.R +++ b/duckdb-rfuns-r/R/rfuns.R @@ -1,4 +1,4 @@ -rfuns <- function(op = c("project", "aggregate"), fun, data, ..., error_call = caller_env()) { +rfuns <- function(fun, data, ..., error_call = caller_env()) { withr::local_options(list(duckdb.materialize_message = FALSE)) con <- local_duckdb_con() @@ -13,6 +13,12 @@ rfuns <- function(op = c("project", "aggregate"), fun, data, ..., error_call = c ) ) + op <- if (grepl("aggregate::", fun)) { + "aggregate" + } else { + "project" + } + result <- switch(op, "project" = duckdb:::rel_project(in_rel, exprs), "aggregate" = duckdb:::rel_aggregate(in_rel, list(), exprs) diff --git a/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md b/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md index f17cb65..2ba1871 100644 --- a/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md +++ b/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md @@ -6,7 +6,7 @@ Error in `rfuns_min()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::min(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::min(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::min(BOOLEAN) -> BOOLEAN\n\tr_base::min(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::min(INTEGER) -> INTEGER\n\tr_base::min(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::min(DOUBLE) -> DOUBLE\n\tr_base::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::min(TIMESTAMP) -> TIMESTAMP\n\tr_base::min(DATE, BOOLEAN) -> DATE\n\tr_base::min(DATE) -> DATE\n","name":"r_base::min","candidates":"r_base::min(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::min(BOOLEAN) -> BOOLEAN,r_base::min(INTEGER, BOOLEAN) -> INTEGER,r_base::min(INTEGER) -> INTEGER,r_base::min(DOUBLE, BOOLEAN) -> DOUBLE,r_base::min(DOUBLE) -> DOUBLE,r_base::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::min(TIMESTAMP) -> TIMESTAMP,r_base::min(DATE, BOOLEAN) -> DATE,r_base::min(DATE) -> DATE","call":"r_base::min(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::min(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::min(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::min(BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::min(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::min(INTEGER) -> INTEGER\n\tr_base::aggregate::min(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::min(DOUBLE) -> DOUBLE\n\tr_base::aggregate::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::aggregate::min(TIMESTAMP) -> TIMESTAMP\n\tr_base::aggregate::min(DATE, BOOLEAN) -> DATE\n\tr_base::aggregate::min(DATE) -> DATE\n","name":"r_base::aggregate::min","candidates":"r_base::aggregate::min(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::aggregate::min(BOOLEAN) -> BOOLEAN,r_base::aggregate::min(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::min(INTEGER) -> INTEGER,r_base::aggregate::min(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::min(DOUBLE) -> DOUBLE,r_base::aggregate::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::aggregate::min(TIMESTAMP) -> TIMESTAMP,r_base::aggregate::min(DATE, BOOLEAN) -> DATE,r_base::aggregate::min(DATE) -> DATE","call":"r_base::aggregate::min(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -16,5 +16,5 @@ Error in `rfuns_max()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::max(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::max(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::max(BOOLEAN) -> BOOLEAN\n\tr_base::max(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::max(INTEGER) -> INTEGER\n\tr_base::max(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::max(DOUBLE) -> DOUBLE\n\tr_base::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::max(TIMESTAMP) -> TIMESTAMP\n\tr_base::max(DATE, BOOLEAN) -> DATE\n\tr_base::max(DATE) -> DATE\n","name":"r_base::max","candidates":"r_base::max(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::max(BOOLEAN) -> BOOLEAN,r_base::max(INTEGER, BOOLEAN) -> INTEGER,r_base::max(INTEGER) -> INTEGER,r_base::max(DOUBLE, BOOLEAN) -> DOUBLE,r_base::max(DOUBLE) -> DOUBLE,r_base::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::max(TIMESTAMP) -> TIMESTAMP,r_base::max(DATE, BOOLEAN) -> DATE,r_base::max(DATE) -> DATE","call":"r_base::max(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::max(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::max(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::max(BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::max(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::max(INTEGER) -> INTEGER\n\tr_base::aggregate::max(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::max(DOUBLE) -> DOUBLE\n\tr_base::aggregate::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::aggregate::max(TIMESTAMP) -> TIMESTAMP\n\tr_base::aggregate::max(DATE, BOOLEAN) -> DATE\n\tr_base::aggregate::max(DATE) -> DATE\n","name":"r_base::aggregate::max","candidates":"r_base::aggregate::max(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::aggregate::max(BOOLEAN) -> BOOLEAN,r_base::aggregate::max(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::max(INTEGER) -> INTEGER,r_base::aggregate::max(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::max(DOUBLE) -> DOUBLE,r_base::aggregate::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::aggregate::max(TIMESTAMP) -> TIMESTAMP,r_base::aggregate::max(DATE, BOOLEAN) -> DATE,r_base::aggregate::max(DATE) -> DATE","call":"r_base::aggregate::max(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} diff --git a/duckdb-rfuns-r/tests/testthat/_snaps/sum.md b/duckdb-rfuns-r/tests/testthat/_snaps/sum.md index d213d17..1eda8f7 100644 --- a/duckdb-rfuns-r/tests/testthat/_snaps/sum.md +++ b/duckdb-rfuns-r/tests/testthat/_snaps/sum.md @@ -6,7 +6,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(BOOLEAN, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(BOOLEAN, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(BOOLEAN, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(BOOLEAN, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -16,7 +16,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(INTEGER, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(INTEGER, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(INTEGER, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(INTEGER, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -26,7 +26,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(DOUBLE, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(DOUBLE, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(DOUBLE, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(DOUBLE, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} # r_base::sum( @@ -36,7 +36,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -46,7 +46,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -56,5 +56,5 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} diff --git a/duckdb-rfuns-r/tests/testthat/test-sum.R b/duckdb-rfuns-r/tests/testthat/test-sum.R index fce0d9c..c99d881 100644 --- a/duckdb-rfuns-r/tests/testthat/test-sum.R +++ b/duckdb-rfuns-r/tests/testthat/test-sum.R @@ -2,13 +2,13 @@ test_that("r_base::sum()", { x <- c(TRUE, TRUE, FALSE, NA) empty <- logical() - expect_equal(rfuns_sum(x, na.rm = TRUE) , sum(x, na.rm = TRUE)) - expect_equal(rfuns_sum(x, na.rm = FALSE), sum(x, na.rm = FALSE)) + expect_equal(rfuns_sum(x, na.rm = TRUE)[1] , sum(x, na.rm = TRUE)) + expect_equal(rfuns_sum(x, na.rm = FALSE)[1], sum(x, na.rm = FALSE)) expect_equal(rfuns_sum(empty, na.rm = FALSE), sum(empty, na.rm = TRUE)) expect_equal(rfuns_sum(empty, na.rm = TRUE) , sum(empty, na.rm = FALSE)) - expect_equal(rfuns_sum(x) , sum(x)) - expect_equal(rfuns_sum(x), sum(x)) + expect_equal(rfuns_sum(x)[1] , sum(x)) + expect_equal(rfuns_sum(x)[1], sum(x)) expect_equal(rfuns_sum(empty), sum(empty)) expect_equal(rfuns_sum(empty), sum(empty)) }) From 1c79eb860fe06801a918b0b5f0c7d721864d93b5 Mon Sep 17 00:00:00 2001 From: Romain Francois Date: Wed, 22 May 2024 10:12:05 +0000 Subject: [PATCH 3/3] revert to r_base::(min,max,sum) --- duckdb-rfuns-r/R/aggregate.R | 7 +++---- duckdb-rfuns-r/R/rfuns.R | 9 ++------- duckdb-rfuns-r/tests/testthat/_snaps/minmax.md | 4 ++-- duckdb-rfuns-r/tests/testthat/_snaps/sum.md | 12 ++++++------ src/include/rfuns_extension.hpp | 8 ++++---- src/minmax.cpp | 8 ++++---- src/rfuns_extension.cpp | 6 +++--- src/sum.cpp | 4 ++-- 8 files changed, 26 insertions(+), 32 deletions(-) diff --git a/duckdb-rfuns-r/R/aggregate.R b/duckdb-rfuns-r/R/aggregate.R index 40a8a08..9f45d74 100644 --- a/duckdb-rfuns-r/R/aggregate.R +++ b/duckdb-rfuns-r/R/aggregate.R @@ -11,18 +11,17 @@ #' @rdname aggregate #' @export rfuns_sum <- function(x, ...) { - rfuns("aggregate::sum", tibble(x = x), ...) + rfuns("sum", tibble(x = x), ..., op = "aggregate") } #' @rdname aggregate #' @export rfuns_min <- function(x, ...) { - rfuns("aggregate::min", tibble(x = x), ...) + rfuns("min", tibble(x = x), ..., op = "aggregate") } #' @rdname aggregate #' @export rfuns_max <- function(x, ...) { - rfuns("aggregate::max", tibble(x = x), ...) + rfuns("max", tibble(x = x), ..., op = "aggregate") } - diff --git a/duckdb-rfuns-r/R/rfuns.R b/duckdb-rfuns-r/R/rfuns.R index 031d7a1..5b4b647 100644 --- a/duckdb-rfuns-r/R/rfuns.R +++ b/duckdb-rfuns-r/R/rfuns.R @@ -1,4 +1,4 @@ -rfuns <- function(fun, data, ..., error_call = caller_env()) { +rfuns <- function(fun, data, ..., error_call = caller_env(), op = c("project", "aggregate")) { withr::local_options(list(duckdb.materialize_message = FALSE)) con <- local_duckdb_con() @@ -13,12 +13,7 @@ rfuns <- function(fun, data, ..., error_call = caller_env()) { ) ) - op <- if (grepl("aggregate::", fun)) { - "aggregate" - } else { - "project" - } - + op <- rlang::arg_match(op, error_call = error_call) result <- switch(op, "project" = duckdb:::rel_project(in_rel, exprs), "aggregate" = duckdb:::rel_aggregate(in_rel, list(), exprs) diff --git a/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md b/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md index 2ba1871..f17cb65 100644 --- a/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md +++ b/duckdb-rfuns-r/tests/testthat/_snaps/minmax.md @@ -6,7 +6,7 @@ Error in `rfuns_min()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::min(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::min(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::min(BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::min(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::min(INTEGER) -> INTEGER\n\tr_base::aggregate::min(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::min(DOUBLE) -> DOUBLE\n\tr_base::aggregate::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::aggregate::min(TIMESTAMP) -> TIMESTAMP\n\tr_base::aggregate::min(DATE, BOOLEAN) -> DATE\n\tr_base::aggregate::min(DATE) -> DATE\n","name":"r_base::aggregate::min","candidates":"r_base::aggregate::min(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::aggregate::min(BOOLEAN) -> BOOLEAN,r_base::aggregate::min(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::min(INTEGER) -> INTEGER,r_base::aggregate::min(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::min(DOUBLE) -> DOUBLE,r_base::aggregate::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::aggregate::min(TIMESTAMP) -> TIMESTAMP,r_base::aggregate::min(DATE, BOOLEAN) -> DATE,r_base::aggregate::min(DATE) -> DATE","call":"r_base::aggregate::min(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::min(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::min(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::min(BOOLEAN) -> BOOLEAN\n\tr_base::min(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::min(INTEGER) -> INTEGER\n\tr_base::min(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::min(DOUBLE) -> DOUBLE\n\tr_base::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::min(TIMESTAMP) -> TIMESTAMP\n\tr_base::min(DATE, BOOLEAN) -> DATE\n\tr_base::min(DATE) -> DATE\n","name":"r_base::min","candidates":"r_base::min(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::min(BOOLEAN) -> BOOLEAN,r_base::min(INTEGER, BOOLEAN) -> INTEGER,r_base::min(INTEGER) -> INTEGER,r_base::min(DOUBLE, BOOLEAN) -> DOUBLE,r_base::min(DOUBLE) -> DOUBLE,r_base::min(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::min(TIMESTAMP) -> TIMESTAMP,r_base::min(DATE, BOOLEAN) -> DATE,r_base::min(DATE) -> DATE","call":"r_base::min(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -16,5 +16,5 @@ Error in `rfuns_max()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::max(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::max(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::max(BOOLEAN) -> BOOLEAN\n\tr_base::aggregate::max(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::max(INTEGER) -> INTEGER\n\tr_base::aggregate::max(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::max(DOUBLE) -> DOUBLE\n\tr_base::aggregate::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::aggregate::max(TIMESTAMP) -> TIMESTAMP\n\tr_base::aggregate::max(DATE, BOOLEAN) -> DATE\n\tr_base::aggregate::max(DATE) -> DATE\n","name":"r_base::aggregate::max","candidates":"r_base::aggregate::max(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::aggregate::max(BOOLEAN) -> BOOLEAN,r_base::aggregate::max(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::max(INTEGER) -> INTEGER,r_base::aggregate::max(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::max(DOUBLE) -> DOUBLE,r_base::aggregate::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::aggregate::max(TIMESTAMP) -> TIMESTAMP,r_base::aggregate::max(DATE, BOOLEAN) -> DATE,r_base::aggregate::max(DATE) -> DATE","call":"r_base::aggregate::max(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::max(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::max(BOOLEAN, BOOLEAN) -> BOOLEAN\n\tr_base::max(BOOLEAN) -> BOOLEAN\n\tr_base::max(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::max(INTEGER) -> INTEGER\n\tr_base::max(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::max(DOUBLE) -> DOUBLE\n\tr_base::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP\n\tr_base::max(TIMESTAMP) -> TIMESTAMP\n\tr_base::max(DATE, BOOLEAN) -> DATE\n\tr_base::max(DATE) -> DATE\n","name":"r_base::max","candidates":"r_base::max(BOOLEAN, BOOLEAN) -> BOOLEAN,r_base::max(BOOLEAN) -> BOOLEAN,r_base::max(INTEGER, BOOLEAN) -> INTEGER,r_base::max(INTEGER) -> INTEGER,r_base::max(DOUBLE, BOOLEAN) -> DOUBLE,r_base::max(DOUBLE) -> DOUBLE,r_base::max(TIMESTAMP, BOOLEAN) -> TIMESTAMP,r_base::max(TIMESTAMP) -> TIMESTAMP,r_base::max(DATE, BOOLEAN) -> DATE,r_base::max(DATE) -> DATE","call":"r_base::max(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} diff --git a/duckdb-rfuns-r/tests/testthat/_snaps/sum.md b/duckdb-rfuns-r/tests/testthat/_snaps/sum.md index 1eda8f7..d213d17 100644 --- a/duckdb-rfuns-r/tests/testthat/_snaps/sum.md +++ b/duckdb-rfuns-r/tests/testthat/_snaps/sum.md @@ -6,7 +6,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(BOOLEAN, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(BOOLEAN, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(BOOLEAN, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(BOOLEAN, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -16,7 +16,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(INTEGER, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(INTEGER, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(INTEGER, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(INTEGER, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -26,7 +26,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(DOUBLE, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(DOUBLE, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(DOUBLE, VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(DOUBLE, VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} # r_base::sum( @@ -36,7 +36,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -46,7 +46,7 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} --- @@ -56,5 +56,5 @@ Error in `rfuns_sum()`: ! binding error Caused by error: - ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::aggregate::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::aggregate::sum(INTEGER) -> INTEGER\n\tr_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::aggregate::sum(DOUBLE) -> DOUBLE\n","name":"r_base::aggregate::sum","candidates":"r_base::aggregate::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::aggregate::sum(BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::aggregate::sum(INTEGER) -> INTEGER,r_base::aggregate::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::aggregate::sum(DOUBLE) -> DOUBLE","call":"r_base::aggregate::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} + ! {"exception_type":"Binder","exception_message":"No function matches the given name and argument types 'r_base::sum(VARCHAR, BOOLEAN)'. You might need to add explicit type casts.\n\tCandidate functions:\n\tr_base::sum(BOOLEAN, BOOLEAN) -> INTEGER\n\tr_base::sum(BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER, BOOLEAN) -> INTEGER\n\tr_base::sum(INTEGER) -> INTEGER\n\tr_base::sum(DOUBLE, BOOLEAN) -> DOUBLE\n\tr_base::sum(DOUBLE) -> DOUBLE\n","name":"r_base::sum","candidates":"r_base::sum(BOOLEAN, BOOLEAN) -> INTEGER,r_base::sum(BOOLEAN) -> INTEGER,r_base::sum(INTEGER, BOOLEAN) -> INTEGER,r_base::sum(INTEGER) -> INTEGER,r_base::sum(DOUBLE, BOOLEAN) -> DOUBLE,r_base::sum(DOUBLE) -> DOUBLE","call":"r_base::sum(VARCHAR, BOOLEAN)","error_subtype":"NO_MATCHING_FUNCTION"} diff --git a/src/include/rfuns_extension.hpp b/src/include/rfuns_extension.hpp index 543c79d..df8271f 100644 --- a/src/include/rfuns_extension.hpp +++ b/src/include/rfuns_extension.hpp @@ -63,10 +63,10 @@ ScalarFunctionSet base_r_is_na(); ScalarFunctionSet base_r_as_integer(); ScalarFunctionSet base_r_as_numeric(); -// sum -AggregateFunctionSet base_r_aggregate_sum(); -AggregateFunctionSet base_r_aggregate_min(); -AggregateFunctionSet base_r_aggregate_max(); +// aggregates +AggregateFunctionSet base_r_sum(); +AggregateFunctionSet base_r_min(); +AggregateFunctionSet base_r_max(); ScalarFunctionSet binary_dispatch(ScalarFunctionSet fn) ; diff --git a/src/minmax.cpp b/src/minmax.cpp index cc718d5..0ce750f 100644 --- a/src/minmax.cpp +++ b/src/minmax.cpp @@ -142,12 +142,12 @@ AggregateFunctionSet base_r_minmax(std::string name) { return set; } -AggregateFunctionSet base_r_aggregate_min() { - return base_r_minmax("r_base::aggregate::min"); +AggregateFunctionSet base_r_min() { + return base_r_minmax("r_base::min"); } -AggregateFunctionSet base_r_aggregate_max() { - return base_r_minmax("r_base::aggregate::max"); +AggregateFunctionSet base_r_max() { + return base_r_minmax("r_base::max"); } diff --git a/src/rfuns_extension.cpp b/src/rfuns_extension.cpp index 6916df4..82fe5ef 100644 --- a/src/rfuns_extension.cpp +++ b/src/rfuns_extension.cpp @@ -37,9 +37,9 @@ static void register_rfuns(DatabaseInstance &instance) { ExtensionUtil::RegisterFunction(instance, base_r_as_integer()); ExtensionUtil::RegisterFunction(instance, base_r_as_numeric()); - ExtensionUtil::RegisterFunction(instance, base_r_aggregate_sum()); - ExtensionUtil::RegisterFunction(instance, base_r_aggregate_min()); - ExtensionUtil::RegisterFunction(instance, base_r_aggregate_max()); + ExtensionUtil::RegisterFunction(instance, base_r_sum()); + ExtensionUtil::RegisterFunction(instance, base_r_min()); + ExtensionUtil::RegisterFunction(instance, base_r_max()); } } // namespace rfuns diff --git a/src/sum.cpp b/src/sum.cpp index fce14f2..069a500 100644 --- a/src/sum.cpp +++ b/src/sum.cpp @@ -117,8 +117,8 @@ void add_RSum(AggregateFunctionSet& set, const LogicalType& type) { )); } -AggregateFunctionSet base_r_aggregate_sum() { - AggregateFunctionSet set("r_base::aggregate::sum"); +AggregateFunctionSet base_r_sum() { + AggregateFunctionSet set("r_base::sum"); add_RSum(set, LogicalType::BOOLEAN); add_RSum(set, LogicalType::INTEGER);