diff --git a/CHANGELOG.md b/CHANGELOG.md
index b894bdd4992d432dc0acf3143f304df9624a62ed..2f538f1d699be308f7d5887340ece02daa56f2de 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+1.1.0 (30/01/2025)
+------------------
+
+- Possibilité d'utiliser Connection de Doctrine pour faire des requêtes en modification (pb Oracle gestion des transactions)
+
+
1.0.6 (05/12/2024)
------------------
diff --git a/src/Bdd.php b/src/Bdd.php
index ff407195cc0d114bf7d0e38f7bab95247dd05142..58c1dfd4251a0029af9bf05e354a634d0e32110a 100644
--- a/src/Bdd.php
+++ b/src/Bdd.php
@@ -2,6 +2,8 @@
namespace Unicaen\BddAdmin;
+use Doctrine\DBAL\Connection;
+use Doctrine\DBAL\Types\Types;
use Unicaen\BddAdmin\Data\DataManager;
use Unicaen\BddAdmin\Ddl\Ddl;
use Unicaen\BddAdmin\Ddl\DdlDiff;
@@ -127,6 +129,8 @@ class Bdd
/** @var array|Bdd[] */
private array $bdds = [];
+ private ?Connection $doctrineConnection = null;
+
private array $config;
private ?DriverInterface $driver = null;
@@ -144,7 +148,7 @@ class Bdd
protected bool $inCopy = false;
- /** @var \Psr\Container\ContainerInterface|null */
+ /** @var \Psr\Container\ContainerInterface|null */
public $__container = null;
private DataManager $data;
@@ -154,7 +158,7 @@ class Bdd
public function __construct(array $options = [], ?string $connection = null)
{
if (!empty($options)) {
- if (empty($connection)){
+ if (empty($connection)) {
$connection = $options[self::OPTION_CURRENT_CONNECTION] ?? 'default';
}
@@ -165,7 +169,7 @@ class Bdd
$this->setOptions($options);
$this->connection = $connection;
-
+
$this->connect();
}
@@ -177,6 +181,21 @@ class Bdd
+ public function getDoctrineConnection(): ?Connection
+ {
+ return $this->doctrineConnection;
+ }
+
+
+
+ public function setDoctrineConnection(?Connection $doctrineConnection): Bdd
+ {
+ $this->doctrineConnection = $doctrineConnection;
+ return $this;
+ }
+
+
+
/**
* Hack pour initialiser une classe à partir d'un container respectant Psr\Container\ContainerInterface
* Si la classe n'est pas connue du container, alors elle est instanciée à l'aide de new
@@ -189,14 +208,14 @@ class Bdd
*/
public function __newClass(string $classname): mixed
{
- if ($this->__container && method_exists($this->__container, 'has') && method_exists($this->__container, 'get')){
- if ($this->__container->has($classname)){
+ if ($this->__container && method_exists($this->__container, 'has') && method_exists($this->__container, 'get')) {
+ if ($this->__container->has($classname)) {
return $this->__container->get($classname);
}
}
- if (!class_exists($classname)){
- throw new \Exception('La classe '.$classname.' n\'existe pas');
+ if (!class_exists($classname)) {
+ throw new \Exception('La classe ' . $classname . ' n\'existe pas');
}
return new $classname;
@@ -217,8 +236,8 @@ class Bdd
{
return $this->connection;
}
-
-
+
+
public function getBdds(): array
{
@@ -279,7 +298,11 @@ class Bdd
public function beginTransaction(): self
{
- $this->driver->beginTransaction();
+ if ($this->doctrineConnection) {
+ $this->doctrineConnection->beginTransaction();
+ } else {
+ $this->driver->beginTransaction();
+ }
return $this;
}
@@ -288,7 +311,11 @@ class Bdd
public function commitTransaction(): self
{
- $this->driver->commitTransaction();
+ if ($this->doctrineConnection) {
+ $this->doctrineConnection->commit();
+ } else {
+ $this->driver->commitTransaction();
+ }
return $this;
}
@@ -297,7 +324,11 @@ class Bdd
public function rollbackTransaction(): self
{
- $this->driver->rollbackTransaction();
+ if ($this->doctrineConnection) {
+ $this->doctrineConnection->rollback();
+ } else {
+ $this->driver->rollbackTransaction();
+ }
return $this;
}
@@ -306,7 +337,36 @@ class Bdd
public function exec(string $sql, array $params = [], array $types = []): self
{
- $this->driver->exec($sql, $params, $types);
+ if ($this->doctrineConnection) {
+ foreach ($types as $ti => $tv) {
+ switch ($tv) {
+ case self::TYPE_INT:
+ $types[$ti] = Types::INTEGER;
+ break;
+ case self::TYPE_BOOL:
+ $types[$ti] = Types::BOOLEAN;
+ break;
+ case self::TYPE_FLOAT:
+ $types[$ti] = Types::FLOAT;
+ break;
+ case self::TYPE_STRING:
+ $types[$ti] = Types::STRING;
+ break;
+ case self::TYPE_DATE:
+ $types[$ti] = Types::DATETIME_IMMUTABLE;
+ break;
+ case self::TYPE_BLOB:
+ $types[$ti] = Types::BLOB;
+ break;
+ case self::TYPE_CLOB:
+ $types[$ti] = Types::TEXT;
+ break;
+ }
+ }
+ $this->doctrineConnection->executeStatement($sql, $params);
+ } else {
+ $this->driver->exec($sql, $params, $types);
+ }
return $this;
}
@@ -329,7 +389,7 @@ class Bdd
public function select(string $sql, array $params = [], array $options = []): array|null|SelectParser
{
$result = $this->driver->select($sql, $params, $options);
- if (false === $result){
+ if (false === $result) {
return null;
}
return $result;
@@ -825,7 +885,7 @@ class Bdd
- public function install(bool $withData=true): self
+ public function install(bool $withData = true): self
{
$this->logTitle('Installation de la base de données');
@@ -854,7 +914,7 @@ class Bdd
- public function update(bool $withData = true, bool $withMigration=true): self
+ public function update(bool $withData = true, bool $withMigration = true): self
{
$this->logTitle('Mise à jour de la base de données');
@@ -1252,7 +1312,7 @@ class Bdd
$schDdl = $ddl->get(Ddl::SCHEMA);
$sDdl = $ddl->get(Ddl::SEQUENCE);
- $tDdl = $ddl->get(Ddl::TABLE);
+ $tDdl = $ddl->get(Ddl::TABLE);
$this->drop();
$this->create([Ddl::SCHEMA => $schDdl, Ddl::SEQUENCE => $sDdl, Ddl::TABLE => $tDdl]);