You need to sign in or sign up before continuing.
Select Git revision
Configuration.dokuwiki
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
SequenceManager.php 2.96 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('sequence_schema', 'sequence_name');
$data = [];
$qr = $this->bdd->select("
SELECT
sequence_schema \"schema\",
sequence_name \"name\"
FROM
information_schema.sequences
WHERE
sequence_schema NOT IN ('pg_catalog','information_schema')
$f
ORDER BY
sequence_schema, sequence_name
", $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
{
if ($old != $new) {
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;
}
}