R/rename.r

Defines functions rename_impl

Documented in rename_impl

#' Rinomina una serie del grafo
#'
#' L'operazione lavora direttamente sui dati in modo persistente.
#'
#' @name rename_impl
#' @rdname rename-internal
#' @param x istanza di `GrafoDB`
#' @param vecchio nome vecchio da sostituire
#' @param nuovo nome nuovo da sostituire
#' @return grafo modificato
#' @include db.r functions.r

rename_impl <- function(x, vecchio, nuovo) { # nolint for ciclomatic complexity
  if (isNode(x, nuovo)) stop(nuovo, " e' gia' una serie del grafo")
  if (!isNode(x, vecchio)) stop(vecchio, " non e' una serie del grafo")

  figlie <- downgrf(x, vecchio, livello = 1)
  data <- x@data
  functions <- x@functions
  if (vecchio %in% hash::keys(data) ||
      vecchio %in% hash::keys(functions) ||
      any(figlie %in% hash::keys(data)) ||
      any(figlie %in% hash::keys(functions))) {
    stop(vecchio, " o figlie di ", vecchio,
         " sono in modifica. Salvare prima le modifiche ed ",
         "in seguito rinominare le serie")
  }

  con <- build_connection()
  on.exit(disconnect(con))

  tag <- x@tag
  params <- as.data.frame(list(nuovo = nuovo, vecchio = vecchio))
  tryCatch({
    DBI::dbBegin(con)

    DBI::dbExecute(con, sql_by_key(
      "RENAME_DATI",
      tag = tag,
      nuovo = nuovo,
      vecchio = vecchio,
      .con = con))

    DBI::dbExecute(con, sql_by_key(
      "RENAME_FORMULE",
      tag = tag,
      nuovo = nuovo,
      vecchio = vecchio,
      .con = con))

    for (figlia in figlie) {
      DBI::dbExecute(con, sql_by_key(
        "RENAME_FORMULA",
        tag = tag,
        vecchio = vecchio,
        nuovo = nuovo,
        figlia = figlia,
        .con = con))
    }

    DBI::dbExecute(con, sql_by_key(
      "RENAME_ARCHI_PARTENZA",
      nuovo = nuovo,
      vecchio = vecchio,
      tag = tag,
      .con = con))

    DBI::dbExecute(con, sql_by_key(
      "RENAME_ARCHI_ARRIVO",
      nuovo = nuovo,
      vecchio = vecchio,
      tag = tag,
      .con = con))

    if (DBI::dbExistsTable(con, paste0("metadati_", tag))) {
      DBI::dbExecute(con, sql_by_key(
        "RENAME_METADATI",
        nuovo = nuovo,
        vecchio = vecchio,
        tag = tag,
        .con = con))
    }

    nomiarchi <- igraph::get.vertex.attribute(x@network, "name")
    nomiarchi[nomiarchi == vecchio] <- nuovo

    x@network <- igraph::set.vertex.attribute(
      x@network, "name", value = nomiarchi)

    x <- resync(x, con = con)
    DBI::dbCommit(con)
    x
  }, error = function(cond) {
    DBI::dbRollback(con)
    stop(cond)
  })
}
giupo/GrafoDB documentation built on Oct. 12, 2022, 9:43 a.m.