44
55namespace Smile \GdprDump \Config \Compiler \Processor ;
66
7+ use Doctrine \DBAL \Exception \MalformedDsnException ;
8+ use Doctrine \DBAL \Tools \DsnParser ;
79use Smile \GdprDump \Config \Compiler \CompileException ;
810use Smile \GdprDump \Config \ConfigInterface ;
911use Smile \GdprDump \Database \DatabaseInterface ;
@@ -38,23 +40,24 @@ private function processDatabaseNode(array $database): array
3840
3941 // Validate url
4042 if (!filter_var ($ url , FILTER_VALIDATE_URL )) {
41- throw new CompileException (sprintf ('The value "%s" is not a valid URL. ' , $ url ));
43+ throw new CompileException (sprintf ('The value "%s" is not a valid database URL. ' , $ url ));
4244 }
4345
4446 // Parse url
45- $ parsedUrl = parse_url ($ url );
46- if ($ parsedUrl === false ) {
47- throw new CompileException (sprintf ('Failed to parse the url "%s". ' , $ url ));
47+ try {
48+ $ parsedUrl = (new DsnParser ())->parse ($ url );
49+ } catch (MalformedDsnException $ e ) {
50+ throw new CompileException (sprintf ('Failed to parse the database url "%s". ' , $ url ), $ e );
4851 }
4952
5053 // Update database params from parsed url
5154 $ map = [
52- 'scheme ' => 'driver ' ,
53- 'path ' => 'name ' ,
55+ 'driver ' => 'driver ' ,
56+ 'dbname ' => 'name ' ,
5457 'host ' => 'host ' ,
5558 'port ' => 'port ' ,
5659 'user ' => 'user ' ,
57- 'pass ' => 'password ' ,
60+ 'password ' => 'password ' ,
5861 ];
5962
6063 foreach ($ map as $ urlPart => $ dbParam ) {
@@ -65,7 +68,6 @@ private function processDatabaseNode(array $database): array
6568
6669 $ value = (string ) $ parsedUrl [$ urlPart ];
6770 $ database [$ dbParam ] = match ($ dbParam ) {
68- 'name ' => ltrim ($ value , '/ ' ),
6971 'driver ' => $ this ->getDriverByScheme ($ value ),
7072 default => $ value
7173 };
0 commit comments