Commit 17c6a82e authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Génération des scripts de création de la bdd: nouvelle stratégie en 2 scripts.

parent 8ef4bb57
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,11 @@ Les autres scripts gérés, eux, à la main sont :

Usage :
```bash
# génération des scripts
./generate-database-scripts.sh

# mise à jour du dépôt
cp -r /tmp/sygal-doc/database/* database/
```

Mise à jour dans ` database` des scripts générés 
 No newline at end of file
+56 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash

# fonction mettant en commentaire certains options de création de séquence dans le(s) fichier(s) spécifié(s)
commentSeqOptionsInFile() {
    for f in $1; do
        sed -i 's/\(START WITH [0-9]\+\)/\/*\1*\//ig; s/\(CACHE [0-9]\+\)/\/*\1*\//ig' ${f}
    done
}
# fonction remplaçant 'SYGAL.' par '/*SYGAL.*/' et '"SYGAL".' par '/*"SYGAL".*/' dans le(s) fichier(s) spécifié(s)
commentPrefixInFile() {
    for f in $1; do
        sed -i 's/\(SYGAL\.\)/\/*\1*\//ig' ${f}
        sed -i 's/\("SYGAL"\.\)/\/*\1*\//ig' ${f}
    done
}
# fonction remplaçant par exemple "/*HISTO::*/1234" par "$2/*SUBSTIT*/" dans le(s) fichier(s) spécifié(s) en $1
replaceHistoIdInFile() {
    for f in $1; do
        sed -i "s/\/\*HISTO::\*\/[0-9]\+/$2\/\*SUBSTIT\*\//ig" ${f}
    done
}

FROM_FILE_PATH_CLEAR="/tmp/oracle-clear-schema-SYGAL.sql"
FROM_FILE_PATH_SCHEMA="/tmp/oracle-generate-schema-SYGAL-from-SYGAL.sql"
FROM_FILE_PATH_INSERTS="/tmp/inserts"
FROM_FILE_PATH_REF="/tmp/oracle-generate-ref-constraints-SYGAL-from-SYGAL.sql"

TABLES="CATEGORIE_PRIVILEGE,DOMAINE_SCIENTIFIQUE,IMPORT_OBSERV,INFORMATION,NATURE_FICHIER,PRIVILEGE,PROFIL,PROFIL_PRIVILEGE,TYPE_STRUCTURE,TYPE_VALIDATION,VERSION_FICHIER,WF_ETAPE"
HISTO_ID_SUBSTIT=1 # valeur forcée pour les colonnes d'historique

rm -rf ${FROM_FILE_PATH_INSERTS} && mkdir -p ${FROM_FILE_PATH_INSERTS}

php public/index.php generate-script-for-schema-clearing \
    --connection=doctrine.connection.orm_default && \
\
php public/index.php generate-script-for-schema-creation \
    --src-connection=doctrine.connection.orm_default \
    --dst-connection=doctrine.connection.orm_default \
    --ref-constraints-included=0 && \
\
php public/index.php generate-scripts-for-data-inserts \
    --src-connection=doctrine.connection.orm_default \
    --dst-connection=doctrine.connection.orm_default \
    --tables=${TABLES} \
    --output-dir=${FROM_FILE_PATH_INSERTS} && \
\
php public/index.php generate-script-for-ref-constraints-creation \
    --src-connection=doctrine.connection.orm_default \
    --dst-connection=doctrine.connection.orm_default && \
\
commentPrefixInFile     ${FROM_FILE_PATH_CLEAR} && \
commentPrefixInFile     ${FROM_FILE_PATH_SCHEMA} && \
commentSeqOptionsInFile ${FROM_FILE_PATH_SCHEMA} && \
commentPrefixInFile     "${FROM_FILE_PATH_INSERTS}/*" && \
replaceHistoIdInFile    "${FROM_FILE_PATH_INSERTS}/*" ${HISTO_ID_SUBSTIT} && \
commentPrefixInFile     ${FROM_FILE_PATH_REF}
+19 −82
Original line number Diff line number Diff line
@@ -14,88 +14,25 @@ OUTPUT_DIR=/tmp/sygal-doc/database
[[ -d ${OUTPUT_DIR} ]] && echo "Le répertoire de destination existe déjà : ${OUTPUT_DIR}" && exit 1
mkdir -p ${OUTPUT_DIR}

# fonction remplaçant 'SYGAL.' par '/*SYGAL.*/' et '"SYGAL".' par '/*"SYGAL".*/' dans le fichier spécifié
commentPrefixInFile() {
    sed -i 's/\(SYGAL\.\)/\/*\1*\//ig' $1
    sed -i 's/\("SYGAL"\.\)/\/*\1*\//ig' $1
}
# fonction remplaçant par exemple "/*HISTO::*/1234" par "$2/*SUBSTIT*/" dans le fichier spécifié en $1
replaceHistoIdInFile() {
    sed -i "s/\/\*HISTO::\*\/[0-9]\+/$2\/\*SUBSTIT\*\//ig" $1
}

echo
##########################################################################
# Script de vidage de la bdd existante
##########################################################################"
FROM_FILE_PATH="/tmp/oracle-clear-schema-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-clear-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-clearing \
        --connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \

echo
###########################################################################
# Script de création des objets de la bdd, sans les contraintes de réf
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-schema-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-generate-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --ref-constraints-included=0 && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \
sed -i 's/\(START WITH [0-9]\+\)/\/*\1*\//ig; s/\(CACHE [0-9]\+\)/\/*\1*\//ig' \
    ${TO_FILE_PATH}

echo
###########################################################################
# Scripts d'insertions de données
###########################################################################"
FROM_FILE_PATH="/tmp/inserts"
TO_FILE_PATH="${OUTPUT_DIR}/02-inserts"
TABLES="CATEGORIE_PRIVILEGE,DOMAINE_SCIENTIFIQUE,IMPORT_OBSERV,INFORMATION,NATURE_FICHIER,PRIVILEGE,PROFIL,PROFIL_PRIVILEGE,TYPE_STRUCTURE,TYPE_VALIDATION,VERSION_FICHIER,WF_ETAPE"
HISTO_ID_SUBSTIT=1 # valeur forcée pour les colonnes d'historique
echo "FROM=${FROM_FILE_PATH} TO=${TO_FILE_PATH}"
rm -rf ${TO_FILE_PATH} && mkdir -p ${TO_FILE_PATH} && \
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-scripts-for-data-inserts \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --tables=${TABLES} \
        --output-dir=${FROM_FILE_PATH} && \
docker cp sygal-container:${FROM_FILE_PATH}/. ${TO_FILE_PATH} && \
for f in ${TO_FILE_PATH}/*; do commentPrefixInFile ${f}; replaceHistoIdInFile ${f} ${HISTO_ID_SUBSTIT}; done

echo
###########################################################################
# Script de création des contraintes de références
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-ref-constraints-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/03-oracle-generate-ref-constraints-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-ref-constraints-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH}

# copie et lancement du script dans le container docker
docker cp ${THIS_DIR}/docker/gen-db-scripts.sh sygal-container:/app && \
docker exec -it -w /app sygal-container bash gen-db-scripts.sh

FROM_FILE_PATH_CLEAR="/tmp/oracle-clear-schema-SYGAL.sql"
FROM_FILE_PATH_SCHEMA="/tmp/oracle-generate-schema-SYGAL-from-SYGAL.sql"
FROM_FILE_PATH_INSERTS="/tmp/inserts"
FROM_FILE_PATH_REF="/tmp/oracle-generate-ref-constraints-SYGAL-from-SYGAL.sql"

TO_FILE_PATH_CLEAR="${OUTPUT_DIR}/00-oracle-clear-schema-SYGAL.sql"
TO_FILE_PATH_SCHEMA="${OUTPUT_DIR}/00-oracle-generate-schema-SYGAL.sql"
TO_FILE_PATH_INSERTS="${OUTPUT_DIR}/02-inserts"
TO_FILE_PATH_REF="${OUTPUT_DIR}/03-oracle-generate-ref-constraints-SYGAL.sql"

# récupération des scripts SQL générés
docker cp sygal-container:${FROM_FILE_PATH_CLEAR}       ${TO_FILE_PATH_CLEAR} && \
docker cp sygal-container:${FROM_FILE_PATH_SCHEMA}      ${TO_FILE_PATH_SCHEMA} && \
docker cp sygal-container:${FROM_FILE_PATH_INSERTS}/.   ${TO_FILE_PATH_INSERTS} && \
docker cp sygal-container:${FROM_FILE_PATH_REF}         ${TO_FILE_PATH_REF}

echo
echo "> Terminé."