File: optimise-utils.R

package info (click to toggle)
r-cran-dbplyr 2.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,644 kB
  • sloc: sh: 13; makefile: 2
file content (39 lines) | stat: -rw-r--r-- 928 bytes parent folder | download
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
38
39
uses_mutated_vars <- function(dots, select) {
  if (is_null(select)) {
    return(TRUE)
  }

  vars <- set_names(select$expr, select$name)
  mutated_vars <- names(purrr::discard(vars, is_symbol))

  if (is_empty(mutated_vars)) {
    return(FALSE)
  }

  any(purrr::map_lgl(dots, expr_uses_var, mutated_vars))
}

expr_uses_var <- function(x, vars) {
  if (is.sql(x)) return(TRUE)
  if (is_call(x, "sql")) return(TRUE)
  if (is_quosure(x)) return(expr_uses_var(quo_get_expr(x), vars))
  if (is_symbol(x)) {
    return(is_symbol(x, vars))
  }

  any(purrr::map_lgl(as.list(x[-1]), expr_uses_var, vars))
}

any_expr_uses_sql <- function(dots) {
  purrr::some(dots, expr_uses_sql)
}

expr_uses_sql <- function(x) {
  if (is.sql(x)) return(TRUE)
  if (is_call(x, "sql")) return(TRUE)
  if (is_quosure(x)) return(expr_uses_sql(quo_get_expr(x)))

  if (!is_call(x)) return(FALSE)

  any(purrr::map_lgl(as.list(x[-1]), expr_uses_sql))
}