go <- requireNamespace("DBI", quietly = TRUE) &&
requireNamespace("RSQLite", quietly = TRUE)
From dplyr
issue 3095.
if(go) {
suppressPackageStartupMessages(library("dplyr"))
packageVersion("dplyr")
db <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
d <- copy_to(db, data.frame(a = 1))
# works
d %>%
mutate(a2 := a, a3 := a2) %>%
show_query()
d %>%
mutate(a2 := a, a3 := a2) %>%
print()
# fails
d %>%
mutate(a2 := a, a3 := a2, a4 := a3) %>%
show_query()
d %>%
mutate(a2 := a, a3 := a2, a4 := a3) %>%
print()
}
## <SQL>
## SELECT `a`, `a2`, `a2` AS `a3`
## FROM (SELECT `a`, `a` AS `a2`
## FROM `data.frame(a = 1)`)
## # Source: lazy query [?? x 3]
## # Database: sqlite 3.19.3 [:memory:]
## a a2 a3
## <dbl> <dbl> <dbl>
## 1 1 1 1
## <SQL>
## SELECT `a`, `a2`, `a2` AS `a3`, `a3` AS `a4`
## FROM (SELECT `a`, `a` AS `a2`
## FROM `data.frame(a = 1)`)
## Error in rsqlite_send_query(conn@ptr, statement): no such column: a3
Current work around, dev verson of seplyr.
if(go) {
library("seplyr")
packageVersion("seplyr")
# works
d %>%
mutate_nse(a2 := a, a3 := a2, a4 := a3) %>%
show_query()
d %>%
mutate_nse(a2 := a, a3 := a2, a4 := a3) %>%
print()
}
## <SQL>
## SELECT `a`, `a2`, `a3`, `a3` AS `a4`
## FROM (SELECT `a`, `a2`, `a2` AS `a3`
## FROM (SELECT `a`, `a` AS `a2`
## FROM `data.frame(a = 1)`))
## # Source: lazy query [?? x 4]
## # Database: sqlite 3.19.3 [:memory:]
## a a2 a3 a4
## <dbl> <dbl> <dbl> <dbl>
## 1 1 1 1 1