Skip to content

Commit

Permalink
Make Database name optional in Socket Dsn (#652)
Browse files Browse the repository at this point in the history
  • Loading branch information
cebe committed Apr 5, 2023
1 parent bb6a21b commit c64276f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/Connection/AbstractDsnSocket.php
Expand Up @@ -22,14 +22,18 @@ abstract class AbstractDsnSocket implements DsnInterface, Stringable
public function __construct(
private string $driver,
private string $unixSocket,
private string $databaseName,
private string|null $databaseName = null,
private array $options = []
) {
}

public function asString(): string
{
$dsn = "$this->driver:" . "unix_socket=$this->unixSocket" . ';' . "dbname=$this->databaseName";
$dsn = "$this->driver:" . "unix_socket=$this->unixSocket";

if ($this->databaseName !== null && $this->databaseName !== '') {
$dsn .= ';' . "dbname=$this->databaseName";
}

$parts = [];

Expand All @@ -53,9 +57,9 @@ public function __toString(): string
}

/**
* @return string The database name to connect to.
* @return string|null The database name to connect to.
*/
public function getDatabaseName(): string
public function getDatabaseName(): string|null
{
return $this->databaseName;
}
Expand Down
15 changes: 15 additions & 0 deletions tests/Db/Connection/DsnSocketTest.php
Expand Up @@ -31,6 +31,21 @@ public function testGetDatabaseName(): void
$this->assertSame('yiitest', $dsn->getDatabaseName());
}

public function testGetDsnWithoutDatabaseName(): void
{
$dsn = new DsnSocket('mysql', '/var/run/mysqld/mysqld.sock', '', ['charset' => 'utf8']);

$this->assertSame('mysql:unix_socket=/var/run/mysqld/mysqld.sock;charset=utf8', $dsn->asString());
$this->assertSame('mysql:unix_socket=/var/run/mysqld/mysqld.sock;charset=utf8', $dsn->__toString());
$this->assertEmpty($dsn->getDatabaseName());

$dsn = new DsnSocket('mysql', '/var/run/mysqld/mysqld.sock', null, ['charset' => 'utf8']);

$this->assertSame('mysql:unix_socket=/var/run/mysqld/mysqld.sock;charset=utf8', $dsn->asString());
$this->assertSame('mysql:unix_socket=/var/run/mysqld/mysqld.sock;charset=utf8', $dsn->__toString());
$this->assertNull($dsn->getDatabaseName());
}

public function testGetDriver(): void
{
$dsn = new DsnSocket('mysql', '/var/run/mysqld/mysqld.sock', 'yiitest', ['charset' => 'utf8']);
Expand Down
7 changes: 7 additions & 0 deletions tests/Db/Connection/DsnTest.php
Expand Up @@ -53,6 +53,13 @@ public function testGetDsnWithoutDatabaseName(): void

$this->assertSame('mysql:host=localhost;port=3306;charset=utf8', $dsn->asString());
$this->assertSame('mysql:host=localhost;port=3306;charset=utf8', $dsn->__toString());
$this->assertEmpty($dsn->getDatabaseName());

$dsn = new Dsn('mysql', 'localhost', null, '3306', ['charset' => 'utf8']);

$this->assertSame('mysql:host=localhost;port=3306;charset=utf8', $dsn->asString());
$this->assertSame('mysql:host=localhost;port=3306;charset=utf8', $dsn->__toString());
$this->assertNull($dsn->getDatabaseName());
}

public function testGetHost(): void
Expand Down

0 comments on commit c64276f

Please sign in to comment.