Skip to content

Commit f4ee1bc

Browse files
authored
Merge pull request #5 from blitz-php/1.x-devs
refactor: remplacement de ConnectionResolver par DatabaseManager et mise à jour des services de connexion
2 parents fb63b4d + 2c4c182 commit f4ee1bc

11 files changed

Lines changed: 369 additions & 874 deletions

File tree

src/Builder/BaseBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ public function query(string $sql, array $params = [])
794794
*/
795795
public function result(int|string $type = PDO::FETCH_OBJ): array
796796
{
797-
return $this->execute()->result($type);
797+
return $this->execute()->get($type);
798798
}
799799

800800
/**

src/Config/Services.php

Lines changed: 64 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,87 +12,114 @@
1212
namespace BlitzPHP\Database\Config;
1313

1414
use BlitzPHP\Container\Services as BaseServices;
15-
use BlitzPHP\Contracts\Database\ConnectionResolverInterface;
1615
use BlitzPHP\Database\Builder\BaseBuilder;
1716
use BlitzPHP\Database\Connection\BaseConnection;
18-
use BlitzPHP\Database\Database;
19-
use Dimtrovich\DbDumper\Exceptions\Exception as DumperException;
17+
use BlitzPHP\Database\DatabaseManager;
2018
use Dimtrovich\DbDumper\Exporter;
2119
use Dimtrovich\DbDumper\Importer;
20+
use InvalidArgumentException;
2221

22+
/**
23+
* Services de base de données
24+
*/
2325
class Services extends BaseServices
2426
{
2527
/**
26-
* Query Builder
28+
* Instance du gestionnaire de base de données
2729
*/
28-
public static function builder(?string $group = null, bool $shared = true): BaseBuilder
30+
protected static ?DatabaseManager $manager = null;
31+
32+
/**
33+
* Récupère le gestionnaire de base de données
34+
*/
35+
protected static function manager(): DatabaseManager
2936
{
30-
if (true === $shared && isset(static::$instances[BaseBuilder::class])) {
31-
return static::$instances[BaseBuilder::class];
37+
if (static::$manager === null) {
38+
static::$manager = new DatabaseManager(static::logger(), static::event());
3239
}
3340

34-
return static::$instances[BaseBuilder::class] = Database::builder(static::database($group));
41+
return static::$manager;
3542
}
3643

3744
/**
38-
* Connexion a la base de données
45+
* Récupère une connexion à la base de données
3946
*/
4047
public static function database(?string $group = null, bool $shared = true): BaseConnection
4148
{
42-
/** @var ConnectionResolverInterface */
43-
$connectionResolver = static::container()->get(ConnectionResolverInterface::class);
44-
[$group] = $connectionResolver->connectionInfo($group);
49+
$connection = static::manager()->connect($group, $shared);
4550

46-
if (true === $shared && isset(static::$instances[Database::class]) && static::$instances[Database::class]->group === $group) {
47-
return static::$instances[Database::class];
51+
if (!$connection instanceof BaseConnection) {
52+
throw new InvalidArgumentException('La connexion retournée n\'est pas une instance de BaseConnection');
4853
}
4954

50-
return static::$instances[Database::class] = $connectionResolver->connect($group);
55+
return $connection;
5156
}
5257

5358
/**
54-
* Systeme d'exportation de la base de donnees
59+
* Récupère un query builder
5560
*/
56-
public static function dbExporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Exporter
61+
public static function builder(?string $group = null, bool $shared = true): BaseBuilder
5762
{
58-
if (true === $shared && isset(static::$instances[Exporter::class])) {
59-
return static::$instances[Exporter::class];
63+
$key = 'builder_' . ($group ?? 'default');
64+
65+
if ($shared && isset(static::$instances[$key])) {
66+
return static::$instances[$key];
67+
}
68+
69+
$builder = static::manager()->builder(static::database($group, $shared));
70+
71+
if ($shared) {
72+
static::$instances[$key] = $builder;
6073
}
6174

62-
$db ??= self::database();
63-
$config ??= config('dump', []);
75+
return $builder;
76+
}
6477

65-
if (! $db->conn) {
66-
$db->initialize();
78+
/**
79+
* Récupère un exportateur de base de données
80+
*/
81+
public static function dbExporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Exporter
82+
{
83+
if ($shared) {
84+
return static::sharedInstance('dbExporter', $db, $config);
6785
}
6886

69-
if (! $db->isPdo()) {
70-
throw new DumperException('Impossible de sauvegarder la base de données. Vous devez utiliser un pilote PDO', DumperException::PDO_EXCEPTION);
87+
$db ??= static::database();
88+
$config = $config ?: (array) config('dump', []);
89+
90+
// Initialiser la connexion si nécessaire
91+
$db->initialize();
92+
93+
$exporter = new Exporter($db->getDatabase(), $db->getConnection(), $config);
94+
95+
if ($shared) {
96+
static::$instances[Exporter::class] = $exporter;
7197
}
7298

73-
return static::$instances[Exporter::class] = new Exporter($db->database, $db->conn, $config);
99+
return $exporter;
74100
}
75101

76102
/**
77-
* Systeme d'importation de la base de donnees
103+
* Récupère un importateur de base de données
78104
*/
79105
public static function dbImporter(?BaseConnection $db = null, array $config = [], bool $shared = true): Importer
80106
{
81-
if (true === $shared && isset(static::$instances[Importer::class])) {
82-
return static::$instances[Importer::class];
107+
if ($shared) {
108+
return static::sharedInstance('dbImporter', $db, $config);
83109
}
84110

85-
$db ??= self::database();
86-
$config ??= config('dump', []);
111+
$db ??= static::database();
112+
$config = $config ?: (array) config('dump', []);
87113

88-
if (! $db->conn) {
89-
$db->initialize();
90-
}
114+
// Initialiser la connexion si nécessaire
115+
$db->initialize();
116+
117+
$importer = new Importer($db->getDatabase(), $db->getConnection(), $config);
91118

92-
if (! $db->isPdo()) {
93-
throw new DumperException('Impossible de restaurer la base de données. Vous devez utiliser un pilote PDO', DumperException::PDO_EXCEPTION);
119+
if ($shared) {
120+
static::$instances[Importer::class] = $importer;
94121
}
95122

96-
return static::$instances[Importer::class] = new Importer($db->database, $db->conn, $config);
123+
return $importer;
97124
}
98125
}

src/Config/database.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@
2929
/**
3030
* @var string Pilote de base de données à utiliser
3131
*/
32-
'driver' => env('db.default.driver', 'pdomysql'),
32+
'driver' => env('db.default.driver', 'mysql'),
3333
/** @var int */
3434
'port' => env('db.default.port', 3306),
3535
/** @var string */
36-
'host' => env('db.default.hostname', 'localhost'),
36+
'hostname' => env('db.default.hostname', 'localhost'),
3737
/** @var string */
3838
'username' => env('db.default.username', 'root'),
3939
/** @var string */

src/Connection/BaseConnection.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,11 @@ public function escapeIdentifiers(mixed $item): mixed
595595
*/
596596
protected function escapeIdentifier(string $item): string
597597
{
598-
return $this->escapeChar . str_replace($this->escapeChar, $this->escapeChar . $this->escapeChar, $item) . $this->escapeChar;
598+
if ($this->isEscapedIdentifier($item)) {
599+
return $item;
600+
}
601+
602+
return $this->escapeChar . $item . $this->escapeChar;
599603
}
600604

601605
/**
@@ -606,6 +610,22 @@ protected function isReserved(string $item): bool
606610
return in_array($item, ['*'], true);
607611
}
608612

613+
/**
614+
* Determine si une chaine est échappée comme un identifiant SQL
615+
*/
616+
public function isEscapedIdentifier(string $value): bool
617+
{
618+
if ($value === '') {
619+
return false;
620+
}
621+
622+
$value = trim($value);
623+
624+
return str_starts_with($value, $this->escapeChar)
625+
// && str_contains($value, '.')
626+
&& str_ends_with($value, $this->escapeChar);
627+
}
628+
609629
/**
610630
* Crée le nom de la table avec son alias et le prefix des table de la base de données
611631
*/

src/ConnectionResolver.php

Lines changed: 0 additions & 177 deletions
This file was deleted.

0 commit comments

Comments
 (0)