Loading src/Bdd.php +27 −0 Original line number Diff line number Diff line Loading @@ -12,11 +12,13 @@ use Unicaen\BddAdmin\Exception\BddException; use Unicaen\BddAdmin\Exception\BddIndexExistsException; use Unicaen\BddAdmin\Logger\LoggerAwareTrait; use Unicaen\BddAdmin\Manager\CompilableInterface; use Unicaen\BddAdmin\Manager\FunctionManagerInteface; use Unicaen\BddAdmin\Manager\IndexManagerInterface; use Unicaen\BddAdmin\Manager\ManagerInterface; use Unicaen\BddAdmin\Manager\MaterializedViewManagerInteface; use Unicaen\BddAdmin\Manager\PackageManagerInteface; use Unicaen\BddAdmin\Manager\PrimaryConstraintManagerInterface; use Unicaen\BddAdmin\Manager\ProcedureManagerInteface; use Unicaen\BddAdmin\Manager\RefConstraintManagerInterface; use Unicaen\BddAdmin\Manager\SchemaManagerInterface; use Unicaen\BddAdmin\Manager\SequenceManagerInterface; Loading Loading @@ -48,6 +50,8 @@ class Bdd Ddl::SEQUENCE, Ddl::TABLE, Ddl::PRIMARY_CONSTRAINT, Ddl::FUNCTION, Ddl::PROCEDURE, Ddl::PACKAGE, Ddl::VIEW, Ddl::MATERIALIZED_VIEW, Loading @@ -64,6 +68,8 @@ class Bdd Ddl::TABLE . '.rename' => 'Renommage des tables', Ddl::VIEW . '.rename' => 'Renommage des vues', Ddl::MATERIALIZED_VIEW . '.rename' => 'Renommage des vues matérialisées', Ddl::PROCEDURE . '.rename' => 'Renommage des procédures', Ddl::FUNCTION . '.rename' => 'Renommage des fonctions', Ddl::PACKAGE . '.rename' => 'Renommage des packages', Ddl::INDEX . '.rename' => 'Renommage des indexes', Ddl::TRIGGER . '.rename' => 'Renommage des triggers', Loading @@ -74,6 +80,8 @@ class Bdd Ddl::SEQUENCE . '.drop' => 'Suppression des séquences', Ddl::VIEW . '.drop' => 'Suppression des vues', Ddl::MATERIALIZED_VIEW . '.drop' => 'Suppression des vues matérialisées', Ddl::PROCEDURE . '.drop' => 'Suppression des procédures', Ddl::FUNCTION . '.drop' => 'Suppression des fonctions', Ddl::PACKAGE . '.drop' => 'Suppression des packages', Ddl::REF_CONSTRAINT . '.drop' => 'Suppression des clés étrangères', Ddl::PRIMARY_CONSTRAINT . '.drop' => 'Suppression des clés primaires', Loading @@ -83,8 +91,12 @@ class Bdd Ddl::TABLE . '.create' => 'Création des tables', Ddl::TABLE . '.alter' => 'Modification des tables', Ddl::VIEW . '.create' => 'Création des vues', Ddl::PROCEDURE . '.create' => 'Création des procédures', Ddl::FUNCTION . '.create' => 'Création des fonctions', Ddl::PACKAGE . '.create' => 'Création des packages', Ddl::SEQUENCE . '.alter' => 'Modification des séquences', Ddl::PROCEDURE . '.alter' => 'Modification des procédures', Ddl::FUNCTION . '.alter' => 'Modification des fonctions', Ddl::PACKAGE . '.alter' => 'Modification des packages', Ddl::VIEW . '.alter' => 'Modification des vues', Ddl::MATERIALIZED_VIEW . '.create' => 'Création des vues matérialisées', Loading Loading @@ -408,6 +420,7 @@ class Bdd } public function index(): IndexManagerInterface { return $this->manager(Ddl::INDEX); Loading @@ -422,6 +435,20 @@ class Bdd public function procedure(): ProcedureManagerInteface { return $this->manager(Ddl::PROCEDURE); } public function function (): FunctionManagerInteface { return $this->manager(Ddl::FUNCTION); } public function package(): PackageManagerInteface { return $this->manager(Ddl::PACKAGE); Loading src/Ddl/Ddl.php +5 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ class Ddl implements \Iterator, \ArrayAccess const SEQUENCE = 'sequence'; const MATERIALIZED_VIEW = 'materialized-view'; const PRIMARY_CONSTRAINT = 'primary-constraint'; const FUNCTION = 'function'; const PROCEDURE = 'procedure'; const PACKAGE = 'package'; const REF_CONSTRAINT = 'ref-constraint'; const INDEX = 'index'; Loading Loading @@ -370,6 +372,8 @@ class Ddl implements \Iterator, \ArrayAccess break; case self::VIEW: case self::MATERIALIZED_VIEW: case self::PROCEDURE: case self::FUNCTION: case self::TRIGGER: file_put_contents($file . '.sql', $d['definition']); break; Loading Loading @@ -429,7 +433,7 @@ class Ddl implements \Iterator, \ArrayAccess } } $sqls = [self::VIEW, self::MATERIALIZED_VIEW, self::TRIGGER]; $sqls = [self::VIEW, self::MATERIALIZED_VIEW, self::TRIGGER, self::PROCEDURE, self::FUNCTION]; foreach ($sqls as $type) { if (file_exists($dir . $type) && is_dir($dir . $type)) { $this->data[$type] = []; Loading src/Driver/Oracle/TriggerManager.php +2 −14 Original line number Diff line number Diff line Loading @@ -103,10 +103,7 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /*** * @param string $name */ public function enable($name): void public function enable(array|string $name): void { if ($this->sendEvent()->getReturn('no-exec')) return; Loading @@ -117,10 +114,7 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /*** * @param string $name */ public function disable($name): void public function disable(array|string $name): void { if ($this->sendEvent()->getReturn('no-exec')) return; Loading @@ -131,9 +125,6 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /** * @return TriggerManagerInterface */ public function enableAll(): TriggerManagerInterface { $this->bdd->logBegin("Activation de tous les déclencheurs"); Loading @@ -153,9 +144,6 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /** * @return TriggerManagerInterface */ public function disableAll(): TriggerManagerInterface { $this->bdd->logBegin("Désactivation de tous les déclencheurs"); Loading src/Driver/Postgresql/Driver.php +2 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,8 @@ class Driver implements DriverInterface Ddl::SEQUENCE => SequenceManager::class, Ddl::TABLE => TableManager::class, Ddl::PRIMARY_CONSTRAINT => PrimaryConstraintManager::class, Ddl::FUNCTION => FunctionManager::class, Ddl::PROCEDURE => ProcedureManager::class, Ddl::VIEW => ViewManager::class, Ddl::MATERIALIZED_VIEW => MaterializedViewManager::class, Ddl::REF_CONSTRAINT => RefConstraintManager::class, Loading src/Driver/Postgresql/FunctionManager.php 0 → 100644 +157 −0 Original line number Diff line number Diff line <?php namespace Unicaen\BddAdmin\Driver\Postgresql; use Unicaen\BddAdmin\Manager\AbstractManager; use Unicaen\BddAdmin\Manager\FunctionManagerInteface; use Unicaen\BddAdmin\Ddl\DdlFilter; use Unicaen\BddAdmin\Util; class FunctionManager extends AbstractManager implements FunctionManagerInteface { public function getList(): array { $list = []; $sql = " SELECT n.nspname schema, p.proname name 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 = 'f' ORDER BY n.nspname, p.proname "; $r = $this->bdd->select($sql); foreach ($r as $l) { $list[] = $l['schema'] . '.' . $l['name']; } return $list; } 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 = 'f' $f ORDER BY n.nspname, p.proname "; $p = $this->bdd->select($q, $p); foreach ($p as $r) { $data[$r['schema'].'.'.$r['name']] = [ 'schema' => $r['schema'], 'name' => $r['name'], 'definition' => $this->purger($r['definition'], true), 'return' => $r['return'], 'arguments' => $r['arguments'], ]; } return $data; } public function exists(string $name): bool { [$schema, $name] = Util::explodedFullObjectName($name); if (!$schema) { $schema = 'public'; } $sql = " SELECT count(*) nbr FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE p.prokind = 'f' AND n.nspname = :schema AND p.proname = :name "; $params = ['schema' => $schema, 'name' => $name]; $nbr = (int)$this->bdd->selectOne($sql, $params, 'nbr'); return $nbr > 0; } 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 fonction ' . $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 fonction ' . $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 fonction ' . $oldName . ' en ' . $newName); } } No newline at end of file Loading
src/Bdd.php +27 −0 Original line number Diff line number Diff line Loading @@ -12,11 +12,13 @@ use Unicaen\BddAdmin\Exception\BddException; use Unicaen\BddAdmin\Exception\BddIndexExistsException; use Unicaen\BddAdmin\Logger\LoggerAwareTrait; use Unicaen\BddAdmin\Manager\CompilableInterface; use Unicaen\BddAdmin\Manager\FunctionManagerInteface; use Unicaen\BddAdmin\Manager\IndexManagerInterface; use Unicaen\BddAdmin\Manager\ManagerInterface; use Unicaen\BddAdmin\Manager\MaterializedViewManagerInteface; use Unicaen\BddAdmin\Manager\PackageManagerInteface; use Unicaen\BddAdmin\Manager\PrimaryConstraintManagerInterface; use Unicaen\BddAdmin\Manager\ProcedureManagerInteface; use Unicaen\BddAdmin\Manager\RefConstraintManagerInterface; use Unicaen\BddAdmin\Manager\SchemaManagerInterface; use Unicaen\BddAdmin\Manager\SequenceManagerInterface; Loading Loading @@ -48,6 +50,8 @@ class Bdd Ddl::SEQUENCE, Ddl::TABLE, Ddl::PRIMARY_CONSTRAINT, Ddl::FUNCTION, Ddl::PROCEDURE, Ddl::PACKAGE, Ddl::VIEW, Ddl::MATERIALIZED_VIEW, Loading @@ -64,6 +68,8 @@ class Bdd Ddl::TABLE . '.rename' => 'Renommage des tables', Ddl::VIEW . '.rename' => 'Renommage des vues', Ddl::MATERIALIZED_VIEW . '.rename' => 'Renommage des vues matérialisées', Ddl::PROCEDURE . '.rename' => 'Renommage des procédures', Ddl::FUNCTION . '.rename' => 'Renommage des fonctions', Ddl::PACKAGE . '.rename' => 'Renommage des packages', Ddl::INDEX . '.rename' => 'Renommage des indexes', Ddl::TRIGGER . '.rename' => 'Renommage des triggers', Loading @@ -74,6 +80,8 @@ class Bdd Ddl::SEQUENCE . '.drop' => 'Suppression des séquences', Ddl::VIEW . '.drop' => 'Suppression des vues', Ddl::MATERIALIZED_VIEW . '.drop' => 'Suppression des vues matérialisées', Ddl::PROCEDURE . '.drop' => 'Suppression des procédures', Ddl::FUNCTION . '.drop' => 'Suppression des fonctions', Ddl::PACKAGE . '.drop' => 'Suppression des packages', Ddl::REF_CONSTRAINT . '.drop' => 'Suppression des clés étrangères', Ddl::PRIMARY_CONSTRAINT . '.drop' => 'Suppression des clés primaires', Loading @@ -83,8 +91,12 @@ class Bdd Ddl::TABLE . '.create' => 'Création des tables', Ddl::TABLE . '.alter' => 'Modification des tables', Ddl::VIEW . '.create' => 'Création des vues', Ddl::PROCEDURE . '.create' => 'Création des procédures', Ddl::FUNCTION . '.create' => 'Création des fonctions', Ddl::PACKAGE . '.create' => 'Création des packages', Ddl::SEQUENCE . '.alter' => 'Modification des séquences', Ddl::PROCEDURE . '.alter' => 'Modification des procédures', Ddl::FUNCTION . '.alter' => 'Modification des fonctions', Ddl::PACKAGE . '.alter' => 'Modification des packages', Ddl::VIEW . '.alter' => 'Modification des vues', Ddl::MATERIALIZED_VIEW . '.create' => 'Création des vues matérialisées', Loading Loading @@ -408,6 +420,7 @@ class Bdd } public function index(): IndexManagerInterface { return $this->manager(Ddl::INDEX); Loading @@ -422,6 +435,20 @@ class Bdd public function procedure(): ProcedureManagerInteface { return $this->manager(Ddl::PROCEDURE); } public function function (): FunctionManagerInteface { return $this->manager(Ddl::FUNCTION); } public function package(): PackageManagerInteface { return $this->manager(Ddl::PACKAGE); Loading
src/Ddl/Ddl.php +5 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ class Ddl implements \Iterator, \ArrayAccess const SEQUENCE = 'sequence'; const MATERIALIZED_VIEW = 'materialized-view'; const PRIMARY_CONSTRAINT = 'primary-constraint'; const FUNCTION = 'function'; const PROCEDURE = 'procedure'; const PACKAGE = 'package'; const REF_CONSTRAINT = 'ref-constraint'; const INDEX = 'index'; Loading Loading @@ -370,6 +372,8 @@ class Ddl implements \Iterator, \ArrayAccess break; case self::VIEW: case self::MATERIALIZED_VIEW: case self::PROCEDURE: case self::FUNCTION: case self::TRIGGER: file_put_contents($file . '.sql', $d['definition']); break; Loading Loading @@ -429,7 +433,7 @@ class Ddl implements \Iterator, \ArrayAccess } } $sqls = [self::VIEW, self::MATERIALIZED_VIEW, self::TRIGGER]; $sqls = [self::VIEW, self::MATERIALIZED_VIEW, self::TRIGGER, self::PROCEDURE, self::FUNCTION]; foreach ($sqls as $type) { if (file_exists($dir . $type) && is_dir($dir . $type)) { $this->data[$type] = []; Loading
src/Driver/Oracle/TriggerManager.php +2 −14 Original line number Diff line number Diff line Loading @@ -103,10 +103,7 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /*** * @param string $name */ public function enable($name): void public function enable(array|string $name): void { if ($this->sendEvent()->getReturn('no-exec')) return; Loading @@ -117,10 +114,7 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /*** * @param string $name */ public function disable($name): void public function disable(array|string $name): void { if ($this->sendEvent()->getReturn('no-exec')) return; Loading @@ -131,9 +125,6 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /** * @return TriggerManagerInterface */ public function enableAll(): TriggerManagerInterface { $this->bdd->logBegin("Activation de tous les déclencheurs"); Loading @@ -153,9 +144,6 @@ class TriggerManager extends AbstractManager implements TriggerManagerInterface, /** * @return TriggerManagerInterface */ public function disableAll(): TriggerManagerInterface { $this->bdd->logBegin("Désactivation de tous les déclencheurs"); Loading
src/Driver/Postgresql/Driver.php +2 −0 Original line number Diff line number Diff line Loading @@ -259,6 +259,8 @@ class Driver implements DriverInterface Ddl::SEQUENCE => SequenceManager::class, Ddl::TABLE => TableManager::class, Ddl::PRIMARY_CONSTRAINT => PrimaryConstraintManager::class, Ddl::FUNCTION => FunctionManager::class, Ddl::PROCEDURE => ProcedureManager::class, Ddl::VIEW => ViewManager::class, Ddl::MATERIALIZED_VIEW => MaterializedViewManager::class, Ddl::REF_CONSTRAINT => RefConstraintManager::class, Loading
src/Driver/Postgresql/FunctionManager.php 0 → 100644 +157 −0 Original line number Diff line number Diff line <?php namespace Unicaen\BddAdmin\Driver\Postgresql; use Unicaen\BddAdmin\Manager\AbstractManager; use Unicaen\BddAdmin\Manager\FunctionManagerInteface; use Unicaen\BddAdmin\Ddl\DdlFilter; use Unicaen\BddAdmin\Util; class FunctionManager extends AbstractManager implements FunctionManagerInteface { public function getList(): array { $list = []; $sql = " SELECT n.nspname schema, p.proname name 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 = 'f' ORDER BY n.nspname, p.proname "; $r = $this->bdd->select($sql); foreach ($r as $l) { $list[] = $l['schema'] . '.' . $l['name']; } return $list; } 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 = 'f' $f ORDER BY n.nspname, p.proname "; $p = $this->bdd->select($q, $p); foreach ($p as $r) { $data[$r['schema'].'.'.$r['name']] = [ 'schema' => $r['schema'], 'name' => $r['name'], 'definition' => $this->purger($r['definition'], true), 'return' => $r['return'], 'arguments' => $r['arguments'], ]; } return $data; } public function exists(string $name): bool { [$schema, $name] = Util::explodedFullObjectName($name); if (!$schema) { $schema = 'public'; } $sql = " SELECT count(*) nbr FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE p.prokind = 'f' AND n.nspname = :schema AND p.proname = :name "; $params = ['schema' => $schema, 'name' => $name]; $nbr = (int)$this->bdd->selectOne($sql, $params, 'nbr'); return $nbr > 0; } 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 fonction ' . $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 fonction ' . $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 fonction ' . $oldName . ' en ' . $newName); } } No newline at end of file