1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#' @export
#' @rdname sql_build
semi_join_query <- function(x, y, vars, anti = FALSE, by = NULL, na_matches = FALSE) {
structure(
list(
x = x,
y = y,
vars = vars,
anti = anti,
by = by,
na_matches = na_matches
),
class = c("semi_join_query", "query")
)
}
#' @export
print.semi_join_query <- function(x, ...) {
cat_line("<SQL ", if (x$anti) "ANTI" else "SEMI", " JOIN>")
cat_line("By:")
cat_line(indent(paste0(x$by$x, "-", x$by$y)))
cat_line("X:")
cat_line(indent_print(sql_build(x$x)))
cat_line("Y:")
cat_line(indent_print(sql_build(x$y)))
}
#' @export
sql_render.semi_join_query <- function(query, con = NULL, ..., subquery = FALSE, lvl = 0) {
from_x <- sql_render(query$x, con, ..., subquery = TRUE, lvl = lvl + 1)
from_y <- sql_render(query$y, con, ..., subquery = TRUE, lvl = lvl + 1)
dbplyr_query_semi_join(con, from_x, from_y, vars = query$vars, anti = query$anti, by = query$by, lvl = lvl)
}
|