Commit 0d53f89e authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Purge des schémas sur les DEFAULT des colonnes

parent d747f0a5
Loading
Loading
Loading
Loading
Loading
+27 −5
Original line number Diff line number Diff line
@@ -80,7 +80,6 @@ class TableManager extends AbstractManager implements TableManagerInterface
        $data = [];

        $q = "SELECT
            null              \"schema\",
            t.table_name      \"name\",
            t.temporary       \"temporary\",
            t.logging         \"logging\",
@@ -129,10 +128,7 @@ class TableManager extends AbstractManager implements TableManagerInterface

            $default = $paq['default'] !== null ? $this->purger($paq['default']) : null;
            if ('NULL' === $default) $default = null;

            if (!empty($default) && str_starts_with($default, '"' . $paq['schema'] . '"')) {
                $default = substr($default, strlen($paq['schema']) + 3);
            }
            $default = $this->purgerDefaultDefinition($default);

            $type = $paq['type'];
            $precision = $paq['precision'] ? (int)$paq['precision'] : null;
@@ -207,6 +203,32 @@ class TableManager extends AbstractManager implements TableManagerInterface



    public function purgerDefaultDefinition(?string $default): ?string
    {
        if (empty($default)) return null;

        if (str_ends_with($default, '"NEXTVAL"')){
            // Traitement des initialisations par séquences
            $terms = explode('.', $default);

            foreach($terms as $index => $term){
                if (!(str_starts_with($term, '"') && str_starts_with($term, '"'))){
                    return $default; // problème : on a affaire à un traitement plus complexe qu'il faudrait analyser
                }
            }

            if (count($terms) === 3){
                unset($terms[0]);
            }

            return implode('.',$terms);
        }

        return $default;
    }



    protected function makeCreate(array $data): string
    {
        $sql = "CREATE ";