Skip to content
Snippets Groups Projects
Select Git revision
  • e258684a04cf629a3f2b34df60641b51ba5945a9
  • main default
  • detached3
  • detached2
  • modernisation-gestion-donnees
  • detached
  • 1.5.0
  • 1.4.3
  • 1.4.2
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.2
  • 1.1.1
  • 1.1.0
  • 1.0.6
  • 1.0.5
  • 1.0.4
  • 1.0.3
  • 1.0.2
  • 1.0.1
  • 1.0.0
  • 0.9.10
  • 0.9.9
  • 0.9.8
26 results

SchemaManager.php

  • Anthony Gautreau's avatar
    Anthony Gautreau authored
    Les mots-clés réservés par Postgre posait soucis (schema, name, etc..) donc rajout de quote autour.
    rajout d'une correspondance au type "character" qui n'était pas présent.
    f6728d84
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    SchemaManager.php 2.39 KiB
    <?php
    
    namespace Unicaen\BddAdmin\Driver\Postgresql;
    
    use Unicaen\BddAdmin\Manager\AbstractManager;
    use Unicaen\BddAdmin\Manager\SchemaManagerInterface;
    use Unicaen\BddAdmin\Ddl\DdlFilter;
    use Unicaen\BddAdmin\Util;
    
    class SchemaManager extends AbstractManager implements SchemaManagerInterface
    {
    
        public function get($includes = null, $excludes = null): array
        {
            $filter = DdlFilter::normalize2($includes, $excludes);
            [$f, $p] = $filter->toSql(null,'schema_name');
            $data = [];
    
            $qr = $this->bdd->select("
              SELECT 
                schema_name \"name\" 
              FROM 
                information_schema.schemata 
              WHERE 
                schema_owner = 'pg_database_owner'
                AND schema_name <> 'public'
                $f
              ORDER BY 
                schema_name
            ", $p);
            foreach ($qr as $r) {
                $data[$r['name']] = $r;
            }
    
            return $data;
        }
    
    
    
        public function create(array $data): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            $sql = "CREATE SCHEMA " . $data['name'] . " AUTHORIZATION pg_database_owner";
            $this->addQuery($sql, 'Ajout du schéma ' . $data['name']);
        }
    
    
    
        public function drop(array|string $name): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            if (is_array($name)){
                $name = $name['name'];
                $cascade = $name['cascade'] ?? false;
            }else{
                $cascade = false;
            }
    
            $sql = "DROP SCHEMA $name";
            if ($cascade){
                $sql .= ' CASCADE';
            }
            $this->addQuery($sql, 'Suppression du schéma ' . $name);
        }
    
    
    
        public function alter(array $old, array $new): void
        {
            // on ne peut pas modifier un schéma
            // @todo gérer les owners de schémas
        }
    
    
    
        public function rename(string $oldName, array|string $new): void
        {
            if (is_array($new)){
                $newName = $new['name'];
            }else{
                $newName = $new;
            }
    
            if ($newName !== $oldName) {
                if ($this->sendEvent()->getReturn('no-exec')) return;
    
                $sql = "ALTER SCHEMA $oldName RENAME TO $newName";
                $this->addQuery($sql, "Renommage du schéma $oldName en $newName");
            }
        }
    
    
    
        /**
         * @inheritDoc
         */
        public function prepareRenameCompare(array $data): array
        {
            return $data;
        }
    
    }