Skip to content

Commit 4a90581

Browse files
committed
connection & engines are created by Driver
1 parent 9a04ff5 commit 4a90581

18 files changed

Lines changed: 168 additions & 83 deletions

src/Database/Connection.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,12 @@ public function connect(): void
6464
}
6565

6666
try {
67-
$this->pdo = new PDO($this->dsn, $this->user, $this->password, $this->options);
67+
$this->pdo = $this->driver->connect();
68+
$this->engine = $this->driver->createDatabaseEngine($this);
6869
} catch (PDOException $e) {
6970
throw ConnectionException::from($e);
7071
}
7172

72-
$this->engine = $this->driver->createDatabaseEngine();
73-
$this->engine->initialize($this, $this->options);
7473
Arrays::invoke($this->onConnect, $this);
7574
}
7675

src/Database/Drivers/Driver.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,7 @@
1515
*/
1616
interface Driver
1717
{
18-
function createDatabaseEngine(): Engine;
18+
function connect();
19+
20+
function createDatabaseEngine($connection): Engine;
1921
}

src/Database/Drivers/Engine.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ interface Engine
2525
SupportSubselect = 'subselect',
2626
SupportSchema = 'schema';
2727

28-
/**
29-
* Initializes connection.
30-
*/
31-
function initialize(Database\Connection $connection, array $options): void;
32-
3328
/**
3429
* Converts PDOException to DriverException or its descendant.
3530
*/

src/Database/Drivers/Engines/MSSQLEngine.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818
*/
1919
class MSSQLEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
23-
24-
public function initialize(Nette\Database\Connection $connection, array $options): void
25-
{
26-
$this->connection = $connection;
21+
public function __construct(
22+
private readonly Nette\Database\Connection $connection,
23+
) {
2724
}
2825

2926

src/Database/Drivers/Engines/MySQLEngine.php

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,12 @@
1818
*/
1919
class MySQLEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
private bool $convertBoolean;
21+
public bool $convertBoolean = true;
2322

2423

25-
/**
26-
* Driver options:
27-
* - charset => character encoding to set (default is utf8mb4)
28-
* - sqlmode => see http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
29-
* - convertBoolean => converts INT(1) to boolean
30-
*/
31-
public function initialize(Nette\Database\Connection $connection, array $options): void
32-
{
33-
$this->connection = $connection;
34-
$charset = $options['charset'] ?? 'utf8mb4';
35-
if ($charset) {
36-
$connection->query('SET NAMES ?', $charset);
37-
}
38-
39-
if (isset($options['sqlmode'])) {
40-
$connection->query('SET sql_mode=?', $options['sqlmode']);
41-
}
42-
43-
$this->convertBoolean = (bool) ($options['convertBoolean'] ?? true);
24+
public function __construct(
25+
private readonly Nette\Database\Connection $connection,
26+
) {
4427
}
4528

4629

src/Database/Drivers/Engines/ODBCEngine.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@
1818
*/
1919
class ODBCEngine implements Engine
2020
{
21-
public function initialize(Nette\Database\Connection $connection, array $options): void
22-
{
23-
}
24-
25-
2621
public function convertException(\PDOException $e): Nette\Database\DriverException
2722
{
2823
return Nette\Database\DriverException::from($e);

src/Database/Drivers/Engines/OracleEngine.php

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818
*/
1919
class OracleEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
private string $fmtDateTime;
21+
public string $formatDateTime = 'U';
2322

2423

25-
public function initialize(Nette\Database\Connection $connection, array $options): void
26-
{
27-
$this->connection = $connection;
28-
$this->fmtDateTime = $options['formatDateTime'] ?? 'U';
24+
public function __construct(
25+
private readonly Nette\Database\Connection $connection,
26+
) {
2927
}
3028

3129

@@ -59,7 +57,7 @@ public function delimite(string $name): string
5957

6058
public function formatDateTime(\DateTimeInterface $value): string
6159
{
62-
return $value->format($this->fmtDateTime);
60+
return $value->format($this->formatDateTime);
6361
}
6462

6563

src/Database/Drivers/Engines/PostgreSQLEngine.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818
*/
1919
class PostgreSQLEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
23-
24-
public function initialize(Nette\Database\Connection $connection, array $options): void
25-
{
26-
$this->connection = $connection;
21+
public function __construct(
22+
private readonly Nette\Database\Connection $connection,
23+
) {
2724
}
2825

2926

src/Database/Drivers/Engines/SQLServerEngine.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,9 @@
1818
*/
1919
class SQLServerEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
23-
24-
public function initialize(Nette\Database\Connection $connection, array $options): void
25-
{
26-
$this->connection = $connection;
21+
public function __construct(
22+
private readonly Nette\Database\Connection $connection,
23+
) {
2724
}
2825

2926

src/Database/Drivers/Engines/SQLiteEngine.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818
*/
1919
class SQLiteEngine implements Engine
2020
{
21-
private Nette\Database\Connection $connection;
22-
private string $fmtDateTime;
21+
public string $formatDateTime = 'U';
2322

2423

25-
public function initialize(Nette\Database\Connection $connection, array $options): void
26-
{
27-
$this->connection = $connection;
28-
$this->fmtDateTime = $options['formatDateTime'] ?? 'U';
24+
public function __construct(
25+
private readonly Nette\Database\Connection $connection,
26+
) {
2927
}
3028

3129

@@ -72,7 +70,7 @@ public function delimite(string $name): string
7270

7371
public function formatDateTime(\DateTimeInterface $value): string
7472
{
75-
return $value->format($this->fmtDateTime);
73+
return $value->format($this->formatDateTime);
7674
}
7775

7876

@@ -235,7 +233,7 @@ public function getColumnTypes(\PDOStatement $statement): array
235233
for ($col = 0; $col < $count; $col++) {
236234
$meta = $statement->getColumnMeta($col);
237235
if (isset($meta['sqlite:decl_type'])) {
238-
$types[$meta['name']] = $this->fmtDateTime === 'U' && in_array($meta['sqlite:decl_type'], ['DATE', 'DATETIME'], strict: true)
236+
$types[$meta['name']] = $this->formatDateTime === 'U' && in_array($meta['sqlite:decl_type'], ['DATE', 'DATETIME'], strict: true)
239237
? Nette\Database\IStructure::FIELD_UNIX_TIMESTAMP
240238
: Nette\Database\Helpers::detectType($meta['sqlite:decl_type']);
241239
} elseif (isset($meta['native_type'])) {

0 commit comments

Comments
 (0)