diff --git a/src/Connection.php b/src/Connection.php index c367fe3..88461ce 100755 --- a/src/Connection.php +++ b/src/Connection.php @@ -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() + ); } /** @@ -586,7 +591,7 @@ public function getDoctrineConnection() $this->doctrineConnection = new DoctrineConnection([ 'pdo' => $this->getPdo(), 'dbname' => $this->getConfig('database'), - 'driver' => $driver->getName(), + 'driver' => null, ], $driver); } diff --git a/src/DBAL/Concerns/ConnectsToDatabase.php b/src/DBAL/Concerns/ConnectsToDatabase.php new file mode 100644 index 0000000..6c3d5cf --- /dev/null +++ b/src/DBAL/Concerns/ConnectsToDatabase.php @@ -0,0 +1,30 @@ +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); + } +} diff --git a/src/DBAL/MySqlDriver.php b/src/DBAL/MySqlDriver.php new file mode 100644 index 0000000..ffc4c61 --- /dev/null +++ b/src/DBAL/MySqlDriver.php @@ -0,0 +1,20 @@ +