R/diff.r

Defines functions diff.GrafoDB

Documented in diff.GrafoDB

#' diff implementation for GrafoDB
#'
#' Returns diffs as data and formulas
#'
#' @export
#' @param x GrafoDB instance
#' @param ... eventual GrafoDB instance; if not `stop`
#' @method diff GrafoDB

diff.GrafoDB <- function(x, ...) {
  y <- list(...)[[1]]

  stopifnot(is.grafodb(y))

  not_common <- union(
    setdiff(names(x), names(y)),
    setdiff(names(y), names(x)))
  if (length(not_common)) {
    warning("not common names: ", paste0(not_common, collapse = ", "))
  }

  con <- build_connection()
  on.exit(disconnect(con))
  sql <- sql_by_key("DIFF_FORMULE", new = x@tag, old = y@tag, .con = con)
  rutils::.trace("Diff query: %s", sql, name = "GrafoDB.diff")
  df <- DBI::dbGetQuery(con, sql)

  if (nrow(df)) {
    colnames(df) <- c(
      "name", x@tag, paste0(x@tag, "_autore"),
        paste0(x@tag, "_last_updated"),
        y@tag, paste0(y@tag, "_autore"),
        paste0(y@tag, "_last_updated"))
  }
  df
}
giupo/GrafoDB documentation built on Oct. 12, 2022, 9:43 a.m.