duckdb-r icon indicating copy to clipboard operation
duckdb-r copied to clipboard

Bind `NULL` to `NA` (logical)

Open krlmlr opened this issue 1 month ago • 0 comments

Closes #155.

We'd need to either upstream this, or patch here. Unclear about the consequences.

duckdb <- asNamespace("duckdb")
drv <- duckdb::duckdb()
con <- DBI::dbConnect(drv)
experimental <- FALSE
df1 <- tibble::tibble(a = 1)

rel1 <- duckdb$rel_from_df(con, df1, experimental = experimental)
rel2 <- duckdb$rel_project(
  rel1,
  list(
    {
      tmp_expr <- duckdb$expr_reference("a")
      duckdb$expr_set_alias(tmp_expr, "a")
      tmp_expr
    },
    {
      tmp_expr <- if ("experimental" %in% names(formals(duckdb$expr_constant))) {
        duckdb$expr_constant(NA, experimental = experimental)
      } else {
        duckdb$expr_constant(NA)
      }
      duckdb$expr_set_alias(tmp_expr, "b")
      tmp_expr
    }
  )
)
rel2
#> DuckDB Relation: 
#> ---------------------
#> --- Relation Tree ---
#> ---------------------
#> Projection [a as a, NULL as b]
#>   r_dataframe_scan(0x138dfe8e8)
#> 
#> ---------------------
#> -- Result Columns  --
#> ---------------------
#> - a (DOUBLE)
#> - b (BOOLEAN)
dput(duckdb$rel_to_altrep(rel2))
#> structure(list(a = 1, b = NA), row.names = c(NA, -1L), class = "data.frame")

DBI::dbDisconnect(con)

Created on 2024-05-04 with reprex v2.1.0

krlmlr avatar May 04 '24 18:05 krlmlr