Commit 92c6f85a authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Plus dec détection à tort de modifs sur les procédures & fonctions en postgres

parent a1039251
Loading
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Unicaen\BddAdmin\Ddl;

use Unicaen\BddAdmin\Driver\Postgresql\FunctionManager;
use Unicaen\BddAdmin\Driver\Postgresql\ProcedureManager;
use Unicaen\BddAdmin\Trait\OptionsTrait;
use Iterator;
use ArrayAccess;
@@ -498,11 +500,25 @@ class Ddl implements Iterator, ArrayAccess
                        } else {
                            $this->data[$type][$name] = ['name' => $name, 'definition' => $def];
                        }

                        if (false !== strpos($def, 'LANGUAGE plpgsql')) {
                            $this->traitementSpecifiquePostgres($this->data[$type][$name], $type);
                        }
                    }
                }
            }
        }
    }



    private function traitementSpecifiquePostgres(array &$ddl, string $managerName): void
    {
        switch($managerName){
            case self::PROCEDURE:
                ProcedureManager::loadFromDdlFile($ddl);
            case self::FUNCTION:
                FunctionManager::loadFromDdlFile($ddl);
        }
    }


+30 −10
Original line number Diff line number Diff line
@@ -50,6 +50,22 @@ class FunctionManager extends AbstractManager implements FunctionManagerInteface



    public static function loadFromDdlFile(array &$ddl)
    {
        //$ddl['return'] = null; @todo à gérer...
        $def = $ddl['definition'];

        $namePos   = strpos($def, $ddl['name']);
        $argsStart = $namePos + strlen($ddl['name']);

        if (false !== $namePos && $def[$argsStart] == '(') {
            $arguments        = substr($def, $argsStart + 1, strpos($def, ')', $argsStart + 1) - $argsStart - 1);
            $ddl['arguments'] = $arguments;
        }
    }



    public function exists(string $name): bool
    {
        [$schema, $name] = Util::explodedFullObjectName($name);
@@ -112,6 +128,10 @@ class FunctionManager extends AbstractManager implements FunctionManagerInteface
        if (!isset($new['schema'])) {
            $new['schema'] = 'public';
        }
        if (array_key_exists('return', $old) && !array_key_exists('return', $new)){
            // Hack pour éviter que des modifs soient détectées à tort
            $new['return'] = $old['return'];
        }
        if ($old != $new) {
            if ($this->sendEvent()->getReturn('no-exec')) return;

+25 −9
Original line number Diff line number Diff line
@@ -50,6 +50,22 @@ class ProcedureManager extends AbstractManager implements ProcedureManagerIntefa



    public static function loadFromDdlFile(array &$ddl)
    {
        $ddl['return'] = null;
        $def           = $ddl['definition'];

        $namePos   = strpos($def, $ddl['name']);
        $argsStart = $namePos + strlen($ddl['name']);

        if (false !== $namePos && $def[$argsStart] == '(') {
            $arguments        = substr($def, $argsStart + 1, strpos($def, ')', $argsStart + 1) - $argsStart - 1);
            $ddl['arguments'] = $arguments;
        }
    }



    public function create(array $data, $test = null): void
    {
        if ($this->sendEvent()->getReturn('no-exec')) return;