Skip to content

Commit

Permalink
Fixed doctrine/dbal does not works. (#3141)
Browse files Browse the repository at this point in the history
* Fixed doctrine/dbal does not works.

* Fixed by laravel/framework#35236
  • Loading branch information
limingxinleo committed Jan 15, 2021
1 parent 8cbc5f2 commit b7b9390
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 4 deletions.
9 changes: 7 additions & 2 deletions src/Connection.php
Expand Up @@ -570,7 +570,12 @@ public function getDoctrineColumn($table, $column)
*/
public function getDoctrineSchemaManager()
{
return $this->getDoctrineDriver()->getSchemaManager($this->getDoctrineConnection());
$connection = $this->getDoctrineConnection();

return $this->getDoctrineDriver()->getSchemaManager(
$connection,
$connection->getDatabasePlatform()
);
}

/**
Expand All @@ -586,7 +591,7 @@ public function getDoctrineConnection()
$this->doctrineConnection = new DoctrineConnection([
'pdo' => $this->getPdo(),
'dbname' => $this->getConfig('database'),
'driver' => $driver->getName(),
'driver' => null,
], $driver);
}

Expand Down
30 changes: 30 additions & 0 deletions src/DBAL/Concerns/ConnectsToDatabase.php
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Hyperf\Database\DBAL\Concerns;

use Hyperf\Database\DBAL\Connection;
use PDO;

trait ConnectsToDatabase
{
/**
* Create a new database connection.
*/
public function connect(array $params)
{
if (! isset($params['pdo']) || ! $params['pdo'] instanceof PDO) {
throw new \InvalidArgumentException('The "pdo" property must be required.');
}

return new Connection($params['pdo']);
}
}
168 changes: 168 additions & 0 deletions src/DBAL/Connection.php
@@ -0,0 +1,168 @@
<?php

declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Hyperf\Database\DBAL;

use Doctrine\DBAL\Driver\PDO\Exception;
use Doctrine\DBAL\Driver\PDO\Result;
use Doctrine\DBAL\Driver\PDO\Statement;
use Doctrine\DBAL\Driver\Result as ResultInterface;
use Doctrine\DBAL\Driver\ServerInfoAwareConnection;
use Doctrine\DBAL\Driver\Statement as StatementInterface;
use Doctrine\DBAL\ParameterType;
use PDO;
use PDOException;
use PDOStatement;

class Connection implements ServerInfoAwareConnection
{
/**
* The underlying PDO connection.
*
* @var PDO
*/
protected $connection;

/**
* Create a new PDO connection instance.
*/
public function __construct(PDO $connection)
{
$this->connection = $connection;
}

/**
* Execute an SQL statement.
*/
public function exec(string $sql): int
{
try {
$result = $this->connection->exec($sql);

\assert($result !== false);

return $result;
} catch (PDOException $exception) {
throw Exception::new($exception);
}
}

/**
* Prepare a new SQL statement.
*/
public function prepare(string $sql): StatementInterface
{
try {
return $this->createStatement(
$this->connection->prepare($sql)
);
} catch (PDOException $exception) {
throw Exception::new($exception);
}
}

/**
* Execute a new query against the connection.
*/
public function query(string $sql): ResultInterface
{
try {
$stmt = $this->connection->query($sql);

\assert($stmt instanceof PDOStatement);

return new Result($stmt);
} catch (PDOException $exception) {
throw Exception::new($exception);
}
}

/**
* Get the last insert ID.
*
* @param null|string $name
* @return string
*/
public function lastInsertId($name = null)
{
try {
if ($name === null) {
return $this->connection->lastInsertId();
}

return $this->connection->lastInsertId($name);
} catch (PDOException $exception) {
throw Exception::new($exception);
}
}

/**
* Begin a new database transaction.
*/
public function beginTransaction()
{
return $this->connection->beginTransaction();
}

/**
* Commit a database transaction.
*/
public function commit()
{
return $this->connection->commit();
}

/**
* Roll back a database transaction.
*/
public function rollBack()
{
return $this->connection->rollBack();
}

/**
* Wrap quotes around the given input.
*
* @param string $input
* @param string $type
* @return string
*/
public function quote($input, $type = ParameterType::STRING)
{
return $this->connection->quote($input, $type);
}

/**
* Get the server version for the connection.
*
* @return string
*/
public function getServerVersion()
{
return $this->connection->getAttribute(PDO::ATTR_SERVER_VERSION);
}

/**
* Get the wrapped PDO connection.
*/
public function getWrappedConnection(): PDO
{
return $this->connection;
}

/**
* Create a new statement instance.
*/
protected function createStatement(PDOStatement $stmt): Statement
{
return new Statement($stmt);
}
}
20 changes: 20 additions & 0 deletions src/DBAL/MySqlDriver.php
@@ -0,0 +1,20 @@
<?php

declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
namespace Hyperf\Database\DBAL;

use Doctrine\DBAL\Driver\AbstractMySQLDriver;
use Hyperf\Database\DBAL\Concerns\ConnectsToDatabase;

class MySqlDriver extends AbstractMySQLDriver
{
use ConnectsToDatabase;
}
4 changes: 2 additions & 2 deletions src/MySqlConnection.php
Expand Up @@ -11,7 +11,7 @@
*/
namespace Hyperf\Database;

use Doctrine\DBAL\Driver\PDO\MySQL\Driver as DoctrineDriver;
use Hyperf\Database\DBAL\MySqlDriver;
use Hyperf\Database\Query\Grammars\MySqlGrammar as QueryGrammar;
use Hyperf\Database\Query\Processors\MySqlProcessor;
use Hyperf\Database\Schema\Grammars\MySqlGrammar as SchemaGrammar;
Expand Down Expand Up @@ -81,6 +81,6 @@ protected function getDefaultPostProcessor()
*/
protected function getDoctrineDriver()
{
return new DoctrineDriver();
return new MySqlDriver();
}
}

0 comments on commit b7b9390

Please sign in to comment.