Skip to content
Snippets Groups Projects
Commit 7db79d70 authored by lisasmah's avatar lisasmah
Browse files

#29 Ajout de fonction "get_table_last_update" qui récupère la date de mise à jour d'une table

parent 8312a732
No related branches found
No related tags found
1 merge request!13#29 Ajout de fonction "get_table_last_update" qui récupère la date de mise à jour d'une table
Pipeline #531863 failed
#' get_table_last_update : Récupérer la date de dernière mise à jour d'une table
#'
#' Cette fonction permet de récupérer la date de dernière mise à jour d'une table
#'
#' @param conn : connexion à la base de données.
#' @param nom_schema : nom du schéma où la table se trouve.
#' @param nom_table : nom de la table dont on souhaite récupérer la date de dernière mise à jour.
#'
#' @return
#' Si `track_commit_timestamp` est activée et qu'une date de commit est trouvée,
#' la fonction renvoie cette date.
#' Si la date de commit n'est pas trouvée et que la table existe dans `zz_r_df_def`,
#' elle renvoie la date trouvée dans le dernier commentaire posté sur la table (au format JJ/MM/AAAA).
#' Si aucune des deux sources n'est disponible, un message est retourné.
#'
#' @export
#'
#' @importFrom DBI dbGetQuery
#' @importFrom rlang .data
#'
#' #' @examples
#' conn <- datalibaba::connect_to_db(db = "base", user = "user")
#' get_table_last_update(conn, "schema", "table")
get_table_last_update <- function(conn, nom_schema, nom_table) {
# Vérifier si track_commit_timestamp est activée
query_pg_settings <- "SHOW track_commit_timestamp;"
track_commit_timestamp <- dbGetQuery(conn, query_pg_settings)
# Vérification de la validité de track_commit_timestamp
if (!is.null(track_commit_timestamp) && nrow(track_commit_timestamp) > 0) {
track_commit_timestamp_value <- track_commit_timestamp$track_commit_timestamp[1]
# Si track_commit_timestamp est activée
if (track_commit_timestamp_value == "on") {
# Requête pour obtenir la dernière date de commit de la table
query_commit_timestamp <- paste0("
SELECT pg_xact_commit_timestamp(t.xmin) AS modified_timestamp
FROM ", nom_schema, ".", nom_table, " t
ORDER BY modified_timestamp DESC NULLS LAST
LIMIT 1;")
# Exécuter la requête
result <- dbGetQuery(conn, query_commit_timestamp)
# Vérifier si un résultat a été retourné
if (nrow(result) > 0) {
return(result$modified_timestamp[1]) # Retourne la dernière date de commit
} else {
# Si pas de résultat, vérifier dans zz_r_df_def
query_check_table <- paste0("
SELECT commentaire
FROM ", nom_schema, ".zz_r_df_def
WHERE table_nm = '", nom_table, "'
ORDER BY date_postee DESC
LIMIT 1;")
comment_result <- dbGetQuery(conn, query_check_table)
# Vérifier si un commentaire a été trouvé
if (nrow(comment_result) > 0) {
# Extraire la dernière ligne de commentaire
comment_text <- comment_result$commentaire[1]
# Chercher la date dans le commentaire
date_pattern <- "\\d{2}/\\d{2}/\\d{4}" # Expression régulière pour la date au format JJ/MM/AAAA
# Extraire la date avec l'expression régulière
date_match <- regmatches(comment_text, regexpr(date_pattern, comment_text))
if (length(date_match) > 0) {
return(date_match) # Retourne la date extraite du commentaire
} else {
return("Le commentaire ne contient pas de date valide.") # Si la date n'est pas au bon format
}
} else {
return("Aucun commentaire trouvé pour la table dans zz_r_df_def.") # Si aucun commentaire n'est trouvé
}
}
} else {
return("L'option track_commit_timestamp est désactivée.") # Option désactivée
}
} else {
return("track_commit_timestamp n'a pas retourné de résultat valide.") # Erreur de récupération des paramètres
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment