#' 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)
})
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.