Open krlmlr opened 6 years ago
The argument can't be named n
because there's a conflict with name
:
f <- function(name, ..., n = NULL) {
tibble::lst(name, ..., n)
}
f("a")
#> $name
#> [1] "a"
#>
#> $n
#> NULL
f(n = "a")
#> Error in eval_tidy(xs[[i]], unique_output): argument "name" is missing, with no default
f(name = "a")
#> $name
#> [1] "a"
#>
#> $n
#> NULL
Created on 2019-08-23 by the reprex package (v0.3.0)
Going for max_rows
and establishing consistency in r-dbi/DBI#235.
Scratch that: n
seems perfectly fine. Still need to understand why the first implementation attempt in RSQLite failed.
f <- function(name, ..., n = NULL) {
tibble::lst(name, ..., n)
}
f("b")
#> $name
#> [1] "b"
#>
#> $n
#> NULL
f(n = "a")
#> Error in eval_tidy(xs[[i]], unique_output): argument "name" is missing, with no default
f("b", n = "a")
#> $name
#> [1] "b"
#>
#> $n
#> [1] "a"
f(n = "a", "b")
#> $name
#> [1] "b"
#>
#> $n
#> [1] "a"
Created on 2019-09-23 by the reprex package (v0.3.0)
The problem is partial matching of arguments for backends that don't implement the n
argument yet:
library(tibble)
f <- function(name, ...) {
lst(name, ...)
}
f(3, 1)
#> $name
#> [1] 3
#>
#> $`1`
#> [1] 1
f(1, name = 3)
#> $name
#> [1] 3
#>
#> $`1`
#> [1] 1
# Bad
f(1, n = 3)
#> $name
#> [1] 3
#>
#> $`1`
#> [1] 1
Created on 2019-09-23 by the reprex package (v0.3.0)
Can solve by declaring the n
argument before the ellipsis in the dbReadTable()
generic.
Backends probably want to override this to include LIMIT n
or TOP n
in the query.
Postponing, because if we limit rows we also might want to limit columns. This functionality already exists in much better form in dbplyr and other packages.
The "first n rows" isn't usually a good criterion because the data is returned in an order decided by the server.
to limit the number of rows read.