From 8e821c5c0ef52f97dae922b7bea735407a515e7f Mon Sep 17 00:00:00 2001
From: Juliette Engelaere-Lefebvre
 <juliette.engelaere@developpement-durable.gouv.fr>
Date: Wed, 10 Nov 2021 18:23:59 +0100
Subject: [PATCH] Ajout de la fonction exporter_table_comments()

---
 DESCRIPTION                    |  4 ++--
 NAMESPACE                      |  3 +++
 NEWS.md                        |  1 +
 R/commenter_champs.R           | 36 ++++++++++++++++++++++++----
 README.Rmd                     | 12 ++++++++++
 README.md                      | 24 ++++++++++++++-----
 man/exporter_table_comments.Rd | 43 ++++++++++++++++++++++++++++++++++
 man/get_table_comments.Rd      |  2 +-
 8 files changed, 112 insertions(+), 13 deletions(-)
 create mode 100644 man/exporter_table_comments.Rd

diff --git a/DESCRIPTION b/DESCRIPTION
index 6ada618..7c0e3b1 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -36,5 +36,5 @@ Imports:
 Encoding: UTF-8
 LazyData: true
 Roxygen: list(markdown = TRUE)
-RoxygenNote: 7.1.1
-URL:https://dreal-datalab.gitlab.io/datalibaba/index.html, https://gitlab.com/dreal-datalab/datalibaba
+URL: https://dreal-datalab.gitlab.io/datalibaba/index.html, https://gitlab.com/dreal-datalab/datalibaba
+RoxygenNote: 7.1.2
diff --git a/NAMESPACE b/NAMESPACE
index 4c547ff..432161d 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -7,6 +7,7 @@ export(commenter_schema)
 export(commenter_table)
 export(connect_to_db)
 export(connect_to_dbi)
+export(exporter_table_comments)
 export(get_cols_comment)
 export(get_data)
 export(get_data_dbi)
@@ -44,6 +45,7 @@ importFrom(crayon,bold)
 importFrom(dplyr,across)
 importFrom(dplyr,all_of)
 importFrom(dplyr,arrange)
+importFrom(dplyr,bind_rows)
 importFrom(dplyr,case_when)
 importFrom(dplyr,distinct)
 importFrom(dplyr,filter)
@@ -86,3 +88,4 @@ importFrom(usethis,ui_done)
 importFrom(usethis,ui_info)
 importFrom(usethis,ui_oops)
 importFrom(usethis,ui_todo)
+importFrom(utils,write.csv2)
diff --git a/NEWS.md b/NEWS.md
index de2525a..86dc5b0 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -9,6 +9,7 @@
 - ajout des fonctions `get_data()`,  `get_data_dbi()`,  `importer_data()` : Import d'un dataset du serveur. 
 - ajout des fonctions `commenter_table()`, `commenter_schema()`, `commenter_champs()` et `post_dico_attr()` : Rédaction de commentaires descriptifs sur les schémas et les tables du serveur de données. 
 - ajout des fonctions `get_table_comments()` et `transferer_table_comment()` : qui récupérent et transfèrent les commentaires descriptifs d'une table du serveur de données à une autre. 
+- ajout de la fonction `exporter_table_comments()` qui récupère le descriptif d'une table SGBD (commentaire de table et commentaires de champs) et les exporte dans un tableur csv.
 - ajout fonction `set_schema_rights()` qui affecte à une table les droits de lecture/écriture de son schéma.
 
 * Added a `NEWS.md` file to track changes to the package.
diff --git a/R/commenter_champs.R b/R/commenter_champs.R
index 6837ee9..61c6256 100644
--- a/R/commenter_champs.R
+++ b/R/commenter_champs.R
@@ -77,7 +77,6 @@ commenter_champs <- function(comment = NULL, var = NULL, table = NULL, schema =
 #' }
 #'
 
-
 post_dico_attr <- function(dico = NULL, table = NULL, schema = NULL, db = "public", user = "does", server = NULL) {
 
   # ouverture de la connexion avec DBI::dbDriver("PostgreSQL")
@@ -137,7 +136,6 @@ post_dico_attr <- function(dico = NULL, table = NULL, schema = NULL, db = "publi
 #' @importFrom dplyr transmute
 #' @importFrom rlang .data
 #'
-
 get_table_comment <- function(table = NULL, schema = NULL, db = "public", user = "does", server = NULL) {
   # ouverture de la connexion avec DBI::dbDriver("PostgreSQL")
   con <- connect_to_db(db = db, user = user, server = server)
@@ -176,7 +174,6 @@ get_table_comment <- function(table = NULL, schema = NULL, db = "public", user =
 #' @importFrom DBI dbGetQuery
 #' @importFrom dplyr filter distinct
 #' @importFrom rlang .data
-
 get_cols_comment <- function(table = NULL, schema = NULL, db  = "public", user = "does", server = NULL) {
 
   # ouverture de la connexion avec DBI::dbDriver("PostgreSQL")
@@ -208,7 +205,9 @@ get_cols_comment <- function(table = NULL, schema = NULL, db  = "public", user =
 #' @param user : L'identifiant de l'utilisateur SGBD qui se connecte.
 #' @param server L'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron.
 #'
-#' @return les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes
+#' @return les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes + 1 ligne pour la table
+#' @importFrom DBI dbDisconnect
+#' @importFrom dplyr bind_rows
 #' @export
 #'
 #' @examples
@@ -216,6 +215,7 @@ get_cols_comment <- function(table = NULL, schema = NULL, db  = "public", user =
 #' get_table_comments(table = "test_iris", schema = "public", db = "public",
 #'                    user = "does", server = "localhost")
 #'}
+
 get_table_comments <- function(table = NULL, schema = NULL, db  = "public", user = "does", server = NULL) {
 
   # ouverture de la connexion avec DBI::dbDriver("PostgreSQL")
@@ -282,6 +282,34 @@ transferer_table_comments <- function(table_sce = NULL, schema_sce = NULL, db_sc
   return(invisible(NULL))
 }
 
+#' Recuperer les commentaires d'une table et de ses champs sur le SGBD et les exporter dans un fichier csv
+#'
+#' @param table Le nom de la table sur le SGBD dont on veut recuperer la description
+#' @param schema : Le nom du schema qui contient la table dont on recherche le descriptif.
+#' @param db : Le nom de la base qui contient la table dont on recherche le descriptif.
+#' @param user : L'identifiant de l'utilisateur SGBD qui se connecte.
+#' @param server L'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron.
+#' @param fichier L'adresse et le nom du fichier csv a creer, contenant le dictionnaire d'attributs et le commentaire de la tables a exporter.
+#' @param import booleen, TRUE si on souhaite egalement charger la table dans l'environnement R (FALSE par defaut).
+#'
+#' @return les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes + 1 ligne pour le commentaire de table.
+#' @importFrom utils write.csv2
+#' @export
+#'
+#' @examples
+#' \dontrun{
+#' exporter_table_comments(table = "test_iris", schema = "public", db = "public", user = "does",
+#'                         server = "localhost", fichier = "dico_iris.csv")
+#'}
+
+exporter_table_comments <- function(table = NULL, schema = NULL, db  = "public", user = "does", server = NULL,
+                                    fichier = "dico_var.csv", import = FALSE) {
+  a <- get_table_comments(table = table, schema = schema, db = db , user = user, server = server)
+  utils::write.csv2(x = a, file = fichier, na = "", row.names = FALSE, fileEncoding = "utf-8")
+  message("Export du dictionnaire des variables csv '", fichier, "'.")
+  if(import) {return(a)}
+
+}
 
 
 
diff --git a/README.Rmd b/README.Rmd
index 8c8a7bb..d4059d4 100644
--- a/README.Rmd
+++ b/README.Rmd
@@ -129,3 +129,15 @@ Ce dataframe peut comprendre autant de lignes que d'attributs que l'on souhaite
 dico_iris <- data.frame(VAR = names(iris), VAR_LIB = paste("ceci est le libellé descriptif de", names(iris)))
 post_dico_attr(dico = dico_iris, table = "test_iris", schema = "public", db = "public", user = "does")
 ```
+
+### Récupérer des commentaires de tables SGBD
+
+On peut récupérer les commentaires de tables chargées sur le SGBD dans RStudio :
+
+```{r, eval=FALSE}
+dico_var <- get_table_comments(table = "test_iris", schema = "public", db = "public", user = "does")
+```
+
+On récupère à la fois les commentaires de champs et le commentaire de la table.
+
+
diff --git a/README.md b/README.md
index 00e3691..cf23f14 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ con sera utilisé ensuite sur l’ensemble des autres fonctions pour
 dialoguer avec le serveur de base de données.
 
 ``` r
-con <- connect_to_db(db="datamart", user="does")
+con <- connect_to_db(db = "datamart", user = "does")
 ```
 
 ### Lister les schémas
@@ -50,7 +50,7 @@ list_schemas(con)
 
 ### Lister les tables d’un schéma
 
-Ici on liste les table du schéma "public"
+Ici on liste les table du schéma “public”
 
 ``` r
 list_tables(con, "public")
@@ -82,7 +82,7 @@ La fonction `poster_data()` se veut plus complète :
 Le schéma spécifié en argument est créé s’il n’existe pas.
 
 ``` r
-poster_data(data = iris, table = "test_iris", schema = "public", db = "production", user = "does", overwrite = TRUE)
+poster_data(data = iris, table = "test_iris", schema = "public", db = "public", user = "does", overwrite = TRUE)
 ```
 
 ### Télécharger une table
@@ -106,7 +106,7 @@ de manière à retrouver le dataframe dans l’état précis où il était avant
 son versement au SGBD.
 
 ``` r
-db_iris <- importer_data(table = "test_iris", schema = "public", db = "production", user = "does", overwrite = TRUE)
+db_iris <- importer_data(table = "test_iris", schema = "public", db = "public", user = "does", overwrite = TRUE)
 ```
 
 ### Poster des métadonnées en commentaires
@@ -115,7 +115,7 @@ On peut commenter les tables chargées sur le SGBD depuis RStudio :
 
 ``` r
 commenter_table(comment = "Je suis un commentaire important sur la table test_iris.", table = "test_iris", 
-                schema = "public", db = "production", user = "does")
+                schema = "public", db = "public", user = "does")
 ```
 
 En dehors des informations spécifiées au niveau de l’argument *comment*,
@@ -135,5 +135,17 @@ d’attributs que l’on souhaite documenter.
 
 ``` r
 dico_iris <- data.frame(VAR = names(iris), VAR_LIB = paste("ceci est le libellé descriptif de", names(iris)))
-post_dico_attr(dico = dico_iris, table = "test_iris", schema = "public", db = "production", user = "does")
+post_dico_attr(dico = dico_iris, table = "test_iris", schema = "public", db = "public", user = "does")
 ```
+
+### Récupérer des commentaires de tables SGBD
+
+On peut récupérer les commentaires de tables chargées sur le SGBD dans
+RStudio :
+
+``` r
+dico_var <- get_table_comments(table = "test_iris", schema = "public", db = "public", user = "does")
+```
+
+On récupère à la fois les commentaires de champs et le commentaire de la
+table.
diff --git a/man/exporter_table_comments.Rd b/man/exporter_table_comments.Rd
new file mode 100644
index 0000000..7a83e55
--- /dev/null
+++ b/man/exporter_table_comments.Rd
@@ -0,0 +1,43 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/commenter_champs.R
+\name{exporter_table_comments}
+\alias{exporter_table_comments}
+\title{Recuperer les commentaires d'une table et de ses champs sur le SGBD et les exporter dans un fichier csv}
+\usage{
+exporter_table_comments(
+  table = NULL,
+  schema = NULL,
+  db = "public",
+  user = "does",
+  server = NULL,
+  fichier = "dico_var.csv",
+  import = FALSE
+)
+}
+\arguments{
+\item{table}{Le nom de la table sur le SGBD dont on veut recuperer la description}
+
+\item{schema}{: Le nom du schema qui contient la table dont on recherche le descriptif.}
+
+\item{db}{: Le nom de la base qui contient la table dont on recherche le descriptif.}
+
+\item{user}{: L'identifiant de l'utilisateur SGBD qui se connecte.}
+
+\item{server}{L'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron.}
+
+\item{fichier}{L'adresse et le nom du fichier csv a creer, contenant le dictionnaire d'attributs et le commentaire de la tables a exporter.}
+
+\item{import}{booleen, TRUE si on souhaite egalement charger la table dans l'environnement R (FALSE par defaut).}
+}
+\value{
+les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes + 1 ligne pour le commentaire de table.
+}
+\description{
+Recuperer les commentaires d'une table et de ses champs sur le SGBD et les exporter dans un fichier csv
+}
+\examples{
+\dontrun{
+exporter_table_comments(table = "test_iris", schema = "public", db = "public", user = "does",
+                        server = "localhost", fichier = "dico_iris.csv")
+}
+}
diff --git a/man/get_table_comments.Rd b/man/get_table_comments.Rd
index 601f9be..c9705d2 100644
--- a/man/get_table_comments.Rd
+++ b/man/get_table_comments.Rd
@@ -24,7 +24,7 @@ get_table_comments(
 \item{server}{L'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron.}
 }
 \value{
-les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes
+les commentaires recherches dans un dataframe de 4 champs (nom_schema, nom_table, commentaire) et autant de lignes que de champs de la table commentes + 1 ligne pour la table
 }
 \description{
 Recuperer les commentaires d'une table et de ses champs sur le SGBD
-- 
GitLab