Переглянути джерело

add databaseName method in driver

phpdevcommunity 7 місяців тому
батько
коміт
5ad2917749

+ 1 - 1
src/Command/DatabaseCreateCommand.php

@@ -44,7 +44,7 @@ class DatabaseCreateCommand implements CommandInterface
     {
         $io = ConsoleOutput::create($output);
         $platform = $this->entityManager->createDatabasePlatform();
-        if ($input->getOptionValue('if-not-exists') === true) {
+        if ($input->hasOption('if-not-exists') && $input->getOptionValue('if-not-exists') === true) {
             $platform->createDatabaseIfNotExists();
             $io->info(sprintf('The SQL database "%s" has been successfully created (if it did not already exist).', $platform->getDatabaseName()));
         } else {

+ 4 - 0
src/Driver/DriverInterface.php

@@ -10,6 +10,10 @@ use PhpDevCommunity\PaperORM\Schema\SchemaInterface;
 interface DriverInterface
 {
     public function connect(array $params): PaperPDO;
+
+    public function getDatabaseName(): string;
+
     public function createDatabasePlatform(PaperConnection $connection): PlatformInterface;
+
     public function createDatabaseSchema(): SchemaInterface;
 }

+ 7 - 0
src/Driver/SqliteDriver.php

@@ -11,6 +11,7 @@ use PhpDevCommunity\PaperORM\Schema\SqliteSchema;
 
 final class SqliteDriver implements DriverInterface
 {
+    private string $databaseName;
     public function connect(
         #[SensitiveParameter]
         array $params
@@ -20,6 +21,7 @@ final class SqliteDriver implements DriverInterface
             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
         ];
 
+        $this->databaseName = $params['path'] ?? '';
         return new PaperPDO(
             $this->constructPdoDsn(array_intersect_key($params, ['path' => true, 'memory' => true])),
             $params['user'] ?? '',
@@ -54,4 +56,9 @@ final class SqliteDriver implements DriverInterface
     {
         return new SqliteSchema();
     }
+
+    public function getDatabaseName(): string
+    {
+        return $this->databaseName;
+    }
 }

+ 10 - 1
src/Platform/SqlitePlatform.php

@@ -35,7 +35,7 @@ class SqlitePlatform extends AbstractPlatform
 
     public function getDatabaseName(): string
     {
-        return "'main'";
+        return $this->connection->getDriver()->getDatabaseName();
     }
 
     public function listTables(): array
@@ -111,6 +111,15 @@ class SqlitePlatform extends AbstractPlatform
     public function createDatabase(): void
     {
         $database = $this->getDatabaseName();
+        if ($database == ':memory:') {
+            return;
+        }
+
+        $databaseFile = pathinfo($database);
+        if (empty($databaseFile['extension'])) {
+            throw new LogicException(sprintf("The database name '%s' must have an extension.", $database));
+        }
+
         if (file_exists($database)) {
             return;
         }