Commit d747f0a5 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Mise à jour des drivers

Optimisation Oracle suite migration v19
Refactoring & tests au niveau des getList et des Exists
parent 67bfb1ea
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1007,7 +1007,7 @@ class Bdd
        $tables = array_keys($ddl->get(Ddl::TABLE));
        sort($tables);
        $tmpNames = [];
        foreach ($tables as $table) {
        /*foreach ($tables as $table) {
            $fnc = isset($fncs[$table]) ? $fncs[$table] : null;
            if (false !== $fnc) {
                $tmpname = tempnam(sys_get_temp_dir(), uniqid());
@@ -1017,7 +1017,7 @@ class Bdd
                    $archive->addFile($tmpname, $table . '.tbl');
                }
            }
        }
        }*/

        $archive->close();
        foreach ($tmpNames as $tmpName) {
+2 −2
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ abstract class AbstractManagerDdlConstraint extends AbstractManager
    {
        [$tableName, $name] = $this->getNameAndTable($name);

        $this->addQuery("alter table $tableName modify constraint $name enable", 'Activation de la ' . $this->description . ' ' . $name);
        $this->addQuery("ALTER TABLE $tableName MODIFY CONSTRAINT $name ENABLE", 'Activation de la ' . $this->description . ' ' . $name);
    }


@@ -101,6 +101,6 @@ abstract class AbstractManagerDdlConstraint extends AbstractManager
    {
        [$tableName, $name] = $this->getNameAndTable($name);

        $this->addQuery("alter table $tableName modify constraint $name disable", 'Désactivation de la ' . $this->description . ' ' . $name);
        $this->addQuery("ALTER TABLE $tableName MODIFY CONSTRAINT $name DISABLE", 'Désactivation de la ' . $this->description . ' ' . $name);
    }
}
 No newline at end of file
+29 −31
Original line number Diff line number Diff line
@@ -2,27 +2,37 @@

namespace Unicaen\BddAdmin\Driver\Oracle;

use Unicaen\BddAdmin\Bdd;
use Unicaen\BddAdmin\Manager\AbstractManager;
use Unicaen\BddAdmin\Manager\IndexManagerInterface;
use Unicaen\BddAdmin\Ddl\DdlFilter;

class IndexManager extends AbstractManager implements IndexManagerInterface
{
    public function getList(): array
    public function getList(?string $name = null): array
    {
        $list = [];
        $p = [];
        $f = "";
        if ($name) {
            $f = "AND INDEX_NAME = :name";
            $p['name'] = $name;
        }

        $sql = "
          SELECT OBJECT_NAME 
          FROM ALL_OBJECTS 
        SELECT
          INDEX_NAME NAME
        FROM
          USER_INDEXES
        WHERE
            OWNER = sys_context( 'userenv', 'current_schema' )
            AND OBJECT_TYPE = 'INDEX' AND GENERATED = 'N'
          ORDER BY OBJECT_NAME
          INDEX_TYPE <> 'LOB'
          $f
        ORDER BY
          INDEX_NAME
        ";
        $r    = $this->bdd->select($sql);

        $list = [];
        $r = $this->bdd->select($sql, $p);
        foreach ($r as $l) {
            $list[] = $l['OBJECT_NAME'];
            $list[] = $l['NAME'];
        }

        return $list;
@@ -42,14 +52,12 @@ class IndexManager extends AbstractManager implements IndexManagerInterface
          uniqueness \"unique\",
          table_name \"table\"
        FROM
          all_indexes
          USER_INDEXES
        WHERE
          owner = sys_context( 'userenv', 'current_schema' )
          AND index_type <> 'LOB'
          AND index_name NOT LIKE 'BIN$%'
          INDEX_TYPE <> 'LOB'
          $f
        ORDER BY
          index_name";
          INDEX_NAME";

        $rs = $this->bdd->select($sql, $p);
        foreach ($rs as $r) {
@@ -62,28 +70,18 @@ class IndexManager extends AbstractManager implements IndexManagerInterface
        }

        $sql = "
        SELECT index_name \"name\", column_name \"column\" 
        FROM user_ind_columns 
        WHERE index_name NOT LIKE 'BIN$%' $f 
        ORDER BY column_position";
        SELECT INDEX_NAME \"name\", COLUMN_NAME \"column\" 
        FROM USER_IND_COLUMNS 
        WHERE 1=1 $f 
        ORDER BY COLUMN_POSITION";
        $rs = $this->bdd->select($sql, $p);
        foreach ($rs as $r) {
            if (isset($data[$r['name']])) {
                $data[$r['name']]['columns'][] = $r['column'];
            }

        return $data;
        }



    public function exists(string $name): bool
    {
        $sql = "SELECT count(*) NBR FROM all_indexes WHERE index_name = :name";
        $params = ['name' => $name];

        $nbr = (int)$this->bdd->select($sql, $params, ['fetch' => Bdd::FETCH_ONE])['NBR'];

        return $nbr > 0;
        return $data;
    }


+24 −25
Original line number Diff line number Diff line
@@ -2,27 +2,37 @@

namespace Unicaen\BddAdmin\Driver\Oracle;

use Unicaen\BddAdmin\Bdd;
use Unicaen\BddAdmin\Manager\AbstractManager;
use Unicaen\BddAdmin\Manager\MaterializedViewManagerInteface;
use Unicaen\BddAdmin\Ddl\DdlFilter;

class MaterializedViewManager extends AbstractManager implements MaterializedViewManagerInteface
{
    public function getList(): array
    public function getList(?string $name = null): array
    {
        $list = [];
        $p = [];
        $f = "";
        if ($name) {
            $f = "AND OBJECT_NAME = :name";
            $p['name'] = $name;
        }

        $sql = "
          SELECT OBJECT_NAME 
          FROM ALL_OBJECTS 
        SELECT 
          OBJECT_NAME NAME 
        FROM 
          USER_OBJECTS 
        WHERE 
            OWNER = sys_context( 'userenv', 'current_schema' )
            AND OBJECT_TYPE = 'MATERIALIZED VIEW' AND GENERATED = 'N'
          ORDER BY OBJECT_NAME
          OBJECT_TYPE = 'MATERIALIZED VIEW' AND GENERATED = 'N'
          $f
        ORDER BY 
          OBJECT_NAME
        ";
        $r    = $this->bdd->select($sql);

        $list = [];
        $r = $this->bdd->select($sql, $p);
        foreach ($r as $l) {
            $list[] = $l['OBJECT_NAME'];
            $list[] = $l['NAME'];
        }

        return $list;
@@ -36,13 +46,14 @@ class MaterializedViewManager extends AbstractManager implements MaterializedVie
        [$f, $p] = $filter->toSql(null, 'mview_name');
        $data = [];

        $q = "SELECT
        $q = "
          SELECT
            mview_name \"name\",
            query      \"definition\"
          FROM
            ALL_MVIEWS
            USER_MVIEWS
          WHERE
            OWNER = sys_context( 'userenv', 'current_schema' )
            1=1
            $f
          ORDER BY
            mview_name
@@ -60,18 +71,6 @@ class MaterializedViewManager extends AbstractManager implements MaterializedVie



    public function exists(string $name): bool
    {
        $sql = "SELECT count(*) NBR FROM ALL_MVIEWS WHERE OWNER = sys_context( 'userenv', 'current_schema' ) AND mview_name = :name";
        $params = ['name' => $name];

        $nbr = (int)$this->bdd->select($sql, $params, ['fetch' => Bdd::FETCH_ONE])['NBR'];

        return $nbr > 0;
    }



    public function create(array $data): void
    {
        if ($this->sendEvent()->getReturn('no-exec')) return;
+22 −28
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@

namespace Unicaen\BddAdmin\Driver\Oracle;

use Unicaen\BddAdmin\Bdd;
use Unicaen\BddAdmin\Manager\AbstractManager;
use Unicaen\BddAdmin\Manager\CompilableInterface;
use Unicaen\BddAdmin\Manager\PackageManagerInteface;
@@ -10,20 +9,31 @@ use Unicaen\BddAdmin\Ddl\DdlFilter;

class PackageManager extends AbstractManager implements PackageManagerInteface, CompilableInterface
{
    public function getList(): array

    public function getList(?string $name = null): array
    {
        $list = [];
        $p = [];
        $f = "";
        if ($name) {
            $f = "AND OBJECT_NAME = :name";
            $p['name'] = $name;
        }

        $sql  = "
          SELECT OBJECT_NAME 
          FROM ALL_OBJECTS 
          SELECT 
            OBJECT_NAME NAME
          FROM 
            USER_OBJECTS 
          WHERE 
            OWNER = sys_context( 'userenv', 'current_schema' )
            AND OBJECT_TYPE = 'PACKAGE' AND GENERATED = 'N'
            OBJECT_TYPE = 'PACKAGE' AND GENERATED = 'N'
            $f
          ORDER BY OBJECT_NAME
        ";
        $r    = $this->bdd->select($sql);

        $list = [];
        $r = $this->bdd->select($sql, $p);
        foreach ($r as $l) {
            $list[] = $l['OBJECT_NAME'];
            $list[] = $l['NAME'];
        }

        return $list;
@@ -42,10 +52,10 @@ class PackageManager extends AbstractManager implements PackageManagerInteface,
            text \"ddl\",
            CASE WHEN type = 'PACKAGE' THEN 'definition' ELSE 'body' END \"type\"
          FROM
            all_source 
            USER_SOURCE 
          WHERE
            OWNER = sys_context( 'userenv', 'current_schema' )
            AND (type = 'PACKAGE' OR type = 'PACKAGE BODY') $f 
            (type = 'PACKAGE' OR type = 'PACKAGE BODY') 
            $f 
          ORDER BY name, line
        ";
        $p = $this->bdd->select($q, $p);
@@ -72,22 +82,6 @@ class PackageManager extends AbstractManager implements PackageManagerInteface,



    public function exists(string $name): bool
    {
        $sql = "SELECT count(*) NBR FROM all_source WHERE "
            ."OWNER = sys_context( 'userenv', 'current_schema' )"
            ."AND (type = 'PACKAGE' OR type = 'PACKAGE BODY') "
            ."AND ROWNUM = 1 "
            ."AND name = :name";
        $params = ['name' => $name];

        $nbr = (int)$this->bdd->select($sql, $params, ['fetch' => Bdd::FETCH_ONE])['NBR'];

        return $nbr > 0;
    }



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