Skip to content

Commit 5b2f43b

Browse files
authored
Add MariaDB driver and error detector singletons from Laravel 12 (#650)
- Add MariaDbConnection class as separate driver (not MySQL variant) - Update ConnectionFactory to support 'mariadb' driver - Register ConcurrencyErrorDetector singleton for deadlock detection - Register LostConnectionDetector singleton for reconnection logic - Remove unnecessary Model::flushEventListeners() call (reduces overhead) The error detectors are used internally by Laravel for: - ConcurrencyErrorDetector: Detecting deadlocks and serialization failures to enable automatic transaction retries - LostConnectionDetector: Detecting lost database connections to trigger reconnection
1 parent 964d7e0 commit 5b2f43b

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php namespace October\Rain\Database\Connections;
2+
3+
use Illuminate\Database\MariaDbConnection as MariaDbConnectionBase;
4+
5+
/**
6+
* MariaDbConnection implements connection extension
7+
*/
8+
class MariaDbConnection extends MariaDbConnectionBase
9+
{
10+
use \October\Rain\Database\Connections\ExtendsConnection;
11+
}

src/Database/Connectors/ConnectionFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
use Illuminate\Support\Arr;
44
use Illuminate\Database\Connectors\ConnectionFactory as ConnectionFactoryBase;
55
use October\Rain\Database\Connections\Connection;
6+
use October\Rain\Database\Connections\MariaDbConnection;
67
use October\Rain\Database\Connections\MySqlConnection;
78
use October\Rain\Database\Connections\SQLiteConnection;
89
use October\Rain\Database\Connections\PostgresConnection;
@@ -57,6 +58,8 @@ protected function createConnection($driver, $connection, $database, $prefix = '
5758
switch ($driver) {
5859
case 'mysql':
5960
return new MySqlConnection($connection, $database, $prefix, $config);
61+
case 'mariadb':
62+
return new MariaDbConnection($connection, $database, $prefix, $config);
6063
case 'pgsql':
6164
return new PostgresConnection($connection, $database, $prefix, $config);
6265
case 'sqlite':

src/Database/DatabaseServiceProvider.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
use Illuminate\Database\DatabaseServiceProvider as DatabaseServiceProviderBase;
77
use Illuminate\Database\DatabaseManager;
88
use Illuminate\Database\DatabaseTransactionsManager;
9+
use Illuminate\Database\ConcurrencyErrorDetector;
10+
use Illuminate\Database\LostConnectionDetector;
11+
use Illuminate\Contracts\Database\ConcurrencyErrorDetector as ConcurrencyErrorDetectorContract;
12+
use Illuminate\Contracts\Database\LostConnectionDetector as LostConnectionDetectorContract;
913

1014
/**
1115
* DatabaseServiceProvider
@@ -18,7 +22,6 @@ class DatabaseServiceProvider extends DatabaseServiceProviderBase
1822
public function register()
1923
{
2024
Model::clearBootedModels();
21-
Model::flushEventListeners();
2225

2326
$this->registerConnectionServices();
2427
$this->registerFakerGenerator();
@@ -81,6 +84,10 @@ protected function registerConnectionServices()
8184
$this->app->singleton('db.updater', function ($app) {
8285
return new Updater;
8386
});
87+
88+
$this->app->singleton(ConcurrencyErrorDetectorContract::class, ConcurrencyErrorDetector::class);
89+
90+
$this->app->singleton(LostConnectionDetectorContract::class, LostConnectionDetector::class);
8491
}
8592

8693
/**

0 commit comments

Comments
 (0)