@@ -30,9 +30,8 @@ class Connection
3030
3131 private array $ params ;
3232 private array $ options ;
33- private Driver $ driver ;
33+ private ? Driver $ driver = null ;
3434 private SqlPreprocessor $ preprocessor ;
35- private ?PDO $ pdo = null ;
3635
3736 /** @var callable(array, ResultSet): array */
3837 private $ rowNormalizer = [Helpers::class, 'normalizeRow ' ];
@@ -53,23 +52,20 @@ public function __construct(string $dsn, string $user = null, string $password =
5352
5453 public function connect (): void
5554 {
56- if ($ this ->pdo ) {
55+ if ($ this ->driver ) {
5756 return ;
5857 }
59-
60- try {
61- $ this ->pdo = new PDO ($ this ->params [0 ], $ this ->params [1 ], $ this ->params [2 ], $ this ->options );
62- $ this ->pdo ->setAttribute (PDO ::ATTR_ERRMODE , PDO ::ERRMODE_EXCEPTION );
63- } catch (PDOException $ e ) {
64- throw ConnectionException::from ($ e );
65- }
66-
58+ $ dsn = explode (': ' , $ this ->params [0 ])[0 ];
6759 $ class = empty ($ this ->options ['driverClass ' ])
68- ? 'Nette\Database\Drivers \\' . ucfirst (str_replace ('sql ' , 'Sql ' , $ this -> pdo -> getAttribute ( PDO :: ATTR_DRIVER_NAME ) )) . 'Driver '
60+ ? 'Nette\Database\Drivers \\' . ucfirst (str_replace ('sql ' , 'Sql ' , $ dsn )) . 'Driver '
6961 : $ this ->options ['driverClass ' ];
62+ if (!class_exists ($ class )) {
63+ throw new ConnectionException ("Invalid data source ' $ dsn'. " );
64+ }
65+
7066 $ this ->driver = new $ class ;
67+ $ this ->driver ->connect ($ this ->params [0 ], $ this ->params [1 ], $ this ->params [2 ], $ this ->options );
7168 $ this ->preprocessor = new SqlPreprocessor ($ this );
72- $ this ->driver ->initialize ($ this , $ this ->options );
7369 Arrays::invoke ($ this ->onConnect , $ this );
7470 }
7571
@@ -83,7 +79,7 @@ public function reconnect(): void
8379
8480 public function disconnect (): void
8581 {
86- $ this ->pdo = null ;
82+ $ this ->driver = null ;
8783 }
8884
8985
@@ -93,10 +89,11 @@ public function getDsn(): string
9389 }
9490
9591
92+ /** deprecated use getDriver()->getPdo() */
9693 public function getPdo (): PDO
9794 {
9895 $ this ->connect ();
99- return $ this ->pdo ;
96+ return $ this ->driver -> getPdo () ;
10097 }
10198
10299
0 commit comments