Skip to content
Snippets Groups Projects
Select Git revision
  • 8d49127a09e107663aec4e60e165a3338861c8f8
  • master default protected
  • b24
  • ll-framework
  • ll-wf-finitions
  • ll-workflow
  • alc-scindage-donnees-pj
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • 24.11
  • 24.10
  • 24.9
  • 24.8
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
41 results

DelDbStructure.php

Blame
  • Laurent Lécluse's avatar
    Laurent Lecluse authored
    Possibilité de se connecter sur TEST ou DEPLOY directement depuis la ligne de commandes
    51b39984
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    DelDbStructure.php 2.97 KiB
    <?php
    
    /**
     * @var $this       \Application\View\Renderer\PhpRenderer
     * @var $controller \Zend\Mvc\Controller\AbstractController
     * @var $viewName   string
     * @var $sl         \Zend\ServiceManager\ServiceLocatorInterface
     */
    
    use Application\Constants;
    use Doctrine\ORM\EntityManager;
    use UnicaenCode\Console;
    
    if (!isset($_SERVER['argv']) || !in_array('bdd=deploy', $_SERVER['argv'])) {
        Console::println("Attention : l'opération DOIT se dérouler sur la base de déploiement!!\n", null, Console::BG_RED);
        die();
    }
    
    Console::printMainTitle('Suppression totale de contenu de schéma de BDD');
    
    /** @var EntityManager $em */
    $em = $sl->get(Constants::BDD);
    
    $schema = strtoupper($em->getConnection()->getSchemaManager()->getSchemaSearchPaths()[0]);
    
    $queries = [
        'Suppression des triggers'  =>
            "SELECT 'DROP TRIGGER ' || trigger_name dsql FROM ALL_TRIGGERS WHERE owner='$schema'",
        'Suppression des séquences' =>
            "SELECT 'DROP SEQUENCE ' || sequence_name dsql FROM ALL_SEQUENCES WHERE sequence_owner='$schema'",
    
        'Suppression des contraintes' =>
            "SELECT 'ALTER TABLE ' || table_name || ' DROP CONSTRAINT ' || constraint_name dsql
            FROM ALL_CONSTRAINTS WHERE owner='$schema' AND constraint_type = 'R'",
    
        'Suppression des vues' =>
            "SELECT 'DROP VIEW ' || view_name dsql FROM ALL_VIEWS WHERE owner = '$schema'",
    
        'Suppression des vues matérialisées' =>
            "SELECT 'DROP MATERIALIZED VIEW ' || mview_name dsql FROM ALL_MVIEWS WHERE owner = '$schema'",
    
        'Suppression des packages' =>
            "SELECT 'DROP PACKAGE ' || object_name dsql FROM USER_OBJECTS WHERE object_type = 'PACKAGE'",
    
        'Suppression des tables' =>
            "SELECT 'DROP TABLE ' || table_name dsql FROM ALL_TABLES WHERE owner='$schema'",
    
        'Suppression des index restants' =>
            "SELECT 'DROP INDEX ' || index_name dsql FROM ALL_INDEXES WHERE owner = '$schema'",
    ];
    
    $count = 0;
    $errors = 0;
    
    foreach ($queries as $title => $query) {
        list($c,$errs) = makeExec($query, $em);
        Console::print('=> '.Console::strPad($title,40));
        Console::print($c." supprimés", Console::COLOR_GREEN);
        Console::print(', ');
        Console::print($errs." erreurs", Console::COLOR_RED);
        Console::println('.');
    
        $count += $c;
        $errors += $errs;
    }
    
    Console::print('Processus terminé : ');
    Console::print("$count éléments supprimés", Console::COLOR_GREEN);
    Console::print(', ');
    Console::print("$errors erreurs rencontrées", Console::COLOR_RED);
    Console::println('.');
    
    
    
    function makeExec($sql, EntityManager $em)
    {
        $queries = $em->getConnection()->fetchAll($sql);
    
        $count = 0;
        $errors = 0;
        foreach ($queries as $query) {
            $sql = $query['DSQL'];
    
            try {
                $em->getConnection()->exec($query['DSQL']);
                $count++;
            } catch (\Exception $e) {
                Console::println("ERREUR SUR LA REQUETE SUIVANTE :\n$sql\nMESSAGE :\n".$e->getMessage(), null, Console::BG_RED);
                $errors++;
            }
        }
    
        return [$count,$errors];
    }