1515
1616namespace Drift \DBAL \Driver \PostgreSQL ;
1717
18+ use Doctrine \DBAL \Driver \API \ExceptionConverter as ExceptionConverterInterface ;
19+ use Doctrine \DBAL \Driver \API \PostgreSQL \ExceptionConverter ;
20+ use Doctrine \DBAL \Query ;
1821use Doctrine \DBAL \Query \QueryBuilder ;
1922use Drift \DBAL \Credentials ;
2023use Drift \DBAL \Driver \AbstractDriver ;
21- use Drift \DBAL \Driver \PlainDriverException ;
24+ use Drift \DBAL \Driver \Exception as DoctrineException ;
2225use Drift \DBAL \Result ;
2326use PgAsync \Client ;
2427use PgAsync \ErrorException ;
3134 */
3235class PostgreSQLDriver extends AbstractDriver
3336{
34- /**
35- * @var Client
36- */
37- private $ client ;
38-
39- /**
40- * @var LoopInterface
41- */
42- private $ loop ;
43-
44- /**
45- * @var EmptyDoctrinePostgreSQLDriver
46- */
47- private $ doctrineDriver ;
37+ private Client $ client ;
38+ private LoopInterface $ loop ;
39+ private EmptyDoctrinePostgreSQLDriver $ doctrineDriver ;
40+ private ExceptionConverterInterface $ exceptionConverter ;
4841
4942 /**
5043 * @param LoopInterface $loop
@@ -53,6 +46,7 @@ public function __construct(LoopInterface $loop)
5346 {
5447 $ this ->doctrineDriver = new EmptyDoctrinePostgreSQLDriver ();
5548 $ this ->loop = $ loop ;
49+ $ this ->exceptionConverter = new ExceptionConverter ();
5650 }
5751
5852 /**
@@ -92,24 +86,21 @@ public function query(
9286 ->executeStatement ($ sql , $ parameters )
9387 ->subscribe (function ($ row ) use (&$ results ) {
9488 $ results [] = $ row ;
95- }, function (ErrorException $ exception ) use ($ deferred ) {
89+ }, function (ErrorException $ exception ) use ($ deferred, & $ sql , & $ parameters ) {
9690 $ errorResponse = $ exception ->getErrorResponse ();
97- $ message = $ exception ->getMessage ();
9891 $ code = 0 ;
9992 foreach ($ errorResponse ->getErrorMessages () as $ messageLine ) {
10093 if ('C ' === $ messageLine ['type ' ]) {
10194 $ code = $ messageLine ['message ' ];
10295 }
10396 }
10497
105- $ exception = $ this
106- ->doctrineDriver
107- ->convertException (
108- $ message ,
109- PlainDriverException::createFromMessageAndErrorCode (
110- $ message ,
111- (string ) $ code
112- ));
98+ $ exception = $ this ->exceptionConverter ->convert (
99+ new DoctrineException ($ exception ->getMessage (), \strval ($ code )),
100+ new Query (
101+ $ sql , $ parameters , []
102+ )
103+ );
113104
114105 $ deferred ->reject ($ exception );
115106 }, function () use (&$ results , $ deferred ) {
0 commit comments