Skip to content
Snippets Groups Projects
Select Git revision
  • 3cc15eb48eb2eefdb7f7bae2c339afb0a8afca92
  • master default protected
  • b24
  • 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
  • b23.0.1
  • b22
  • 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
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
41 results

doc.md

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    SequenceManager.php 3.13 KiB
    <?php
    
    namespace Unicaen\BddAdmin\Driver\Postgresql;
    
    use Unicaen\BddAdmin\Manager\AbstractManager;
    use Unicaen\BddAdmin\Manager\SequenceManagerInterface;
    use Unicaen\BddAdmin\Ddl\DdlFilter;
    use Unicaen\BddAdmin\Util;
    
    class SequenceManager extends AbstractManager implements SequenceManagerInterface
    {
    
        public function get($includes = null, $excludes = null): array
        {
            $filter = DdlFilter::normalize2($includes, $excludes);
            [$f, $p] = $filter->toSql('schemaname', 'sequencename');
            $data = [];
    
            $qr = $this->bdd->select("
            SELECT 
              schemaname \"schema\",
              sequencename \"name\"
            FROM 
              pg_catalog.pg_sequences
            WHERE
              schemaname NOT IN ('pg_catalog','information_schema')
              $f
            ORDER BY
              schemaname, sequencename
            ", $p);
            foreach ($qr as $r) {
                $name = Util::fullObjectName($r['schema'], $r['name']);
                $data[$name] = $r;
            }
    
            return $data;
        }
    
    
    
        public function create(array $data): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            $name = Util::fullObjectName($data['schema'] ?? null, $data['name']);
    
            $minValue = isset($data['minvalue']) ? (int)$data['minvalue'] : 1;
    
            $sql = "CREATE SEQUENCE $name INCREMENT BY 1 MINVALUE $minValue";
            $this->addQuery($sql, 'Ajout de la séquence ' . $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']);
            }
    
            $sql = "DROP SEQUENCE $name";
            $this->addQuery($sql, 'Suppression de la séquence ' . $name);
        }
    
    
    
        public function alter(array $old, array $new): void
        {
            $oldNormalized = Util::fullObjectName($old['schema'] ?? 'public', $old['name']);
            $newNormalized = Util::fullObjectName($new['schema'] ?? 'public', $new['name']);
    
            if ($oldNormalized != $newNormalized) {
                if ($this->sendEvent()->getReturn('no-exec')) return;
    
                $this->drop($old);
                $this->create($new);
            }
        }
    
    
    
        public function rename(string $oldName, array|string $new): void
        {
            if ($this->sendEvent()->getReturn('no-exec')) return;
    
            if (is_string($new)) {
                [$newSchema, $newName] = Util::explodedFullObjectName($new);
                $new = ['name' => $newName];
                if ($newSchema) {
                    $new['schema'] = $newSchema;
                }
            }
    
            $this->drop($oldName);
            $this->create($new);
        }
    
    
    
        public function nextVal(string|array $sequence): int
        {
            if (is_string($sequence)) {
                $sequenceName = $sequence;
            } else {
                $sequenceName = Util::fullObjectName($sequence['schema'], $sequence['name']);
            }
    
            $r = $this->bdd->selectOne("SELECT nextval('$sequenceName') seqval");
    
            return (int)$r['seqval'];
        }
    
    
    
        /**
         * @inheritDoc
         */
        public function prepareRenameCompare(array $data): array
        {
            return $data;
        }
    
    }