Skip to content
Snippets Groups Projects
Select Git revision
  • e258684a04cf629a3f2b34df60641b51ba5945a9
  • main default
  • ll-datagen-simplifie
  • detached4
  • detached3
  • detached2
  • modernisation-gestion-donnees
  • detached
  • 1.7.0
  • 1.6.1
  • 1.6.0
  • 1.5.2
  • 1.5.1
  • 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
28 results

ProcedureManager.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ProcedureManager.php 2.98 KiB
    <?php
    
    namespace Unicaen\BddAdmin\Driver\Postgresql;
    
    use Unicaen\BddAdmin\Manager\AbstractManager;
    use Unicaen\BddAdmin\Ddl\DdlFilter;
    use Unicaen\BddAdmin\Manager\ProcedureManagerInteface;
    use Unicaen\BddAdmin\Util;
    
    class ProcedureManager extends AbstractManager implements ProcedureManagerInteface
    {
    
        public function get($includes = null, $excludes = null): array
        {
            $filter = DdlFilter::normalize2($includes, $excludes);
            [$f, $p] = $filter->toSql('n.nspname', 'p.proname');
            $data = [];
    
            $q = "
            SELECT
              n.nspname \"schema\",
              p.proname \"name\",
              pg_catalog.pg_get_functiondef(p.oid)        definition,
              pg_catalog.pg_get_function_result(p.oid)    return,
              pg_catalog.pg_get_function_arguments(p.oid) arguments
            FROM
              pg_catalog.pg_proc p
              LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
            WHERE
              n.nspname NOT IN ('pg_catalog', 'information_schema')
              AND p.prokind = 'p'
              $f
            ORDER BY
              n.nspname, p.proname
            ";
            $p = $this->bdd->select($q, $p);
            foreach ($p as $r) {
                $name = Util::fullObjectName($r['schema'], $r['name']);
                $data[$name] = [
                    'schema'     => $r['schema'],
                    'name'       => $r['name'],
                    'definition' => $this->purger($r['definition'], true),
                    'return' => $r['return'],
                    'arguments' => $r['arguments'],
                ];
            }
    
            return $data;
        }
    
    
    
        public function create(array $data, $test = null): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            $name = Util::fullObjectName($data['schema'] ?? null, $data['name']);
    
            $this->addQuery($data['definition'], 'Ajout/modification de la procédure ' . $name);
        }
    
    
    
        public function drop(array|string $name): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            if (is_array($name)) {
                $name = Util::fullObjectName($name['schema'] ?? null, $name['name']);
                $args = '('.$name['arguments'].')';
            }else{
                $args = '';
            }
    
            $this->addQuery("DROP FUNCTION " . $name.$args, 'Suppression de la procédure ' . $name);
        }
    
    
    
        public function alter(array $old, array $new): void
        {
            if ($old != $new) {
                if ($this->sendEvent()->getReturn('no-exec')) return;
    
                $this->create($new);
            }
        }
    
    
    
        public function rename(string $oldName, array|string $new): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            if (is_array($new)) {
                $newName = $new['name'];
                $args = '('.$new['arguments'].')';
            } else {
                [$null, $newName] = Util::explodedFullObjectName($new);
                $args = '';
            }
    
            $this->addQuery("ALTER FUNCTION $oldName$args RENAME TO $newName", 'Renommage de la procédure ' . $oldName . ' en ' . $newName);
        }
    
    }