Browse Source

Add back PDODriverTrait for backward compatibility.

ADmad 8 years ago
parent
commit
ad105dfe6d
1 changed files with 203 additions and 0 deletions
  1. 203 0
      src/Database/PDODriverTrait.php

+ 203 - 0
src/Database/PDODriverTrait.php

@@ -0,0 +1,203 @@
+<?php
+/**
+ * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
+ * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ *
+ * Licensed under The MIT License
+ * For full copyright and license information, please see the LICENSE.txt
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
+ * @link          https://cakephp.org CakePHP(tm) Project
+ * @since         3.0.0
+ * @license       https://opensource.org/licenses/mit-license.php MIT License
+ */
+namespace Cake\Database\Driver;
+
+use Cake\Database\Query;
+use Cake\Database\Statement\PDOStatement;
+use PDO;
+use PDOException;
+
+/**
+ * PDO driver trait
+ *
+ * @deprecated 3.6.0 The methods of this trait have been added to `Driver` class.
+ */
+trait PDODriverTrait
+{
+
+    /**
+     * Instance of PDO.
+     *
+     * @var \PDO|null
+     */
+    protected $_connection;
+
+    /**
+     * Establishes a connection to the database server
+     *
+     * @param string $dsn A Driver-specific PDO-DSN
+     * @param array $config configuration to be used for creating connection
+     * @return bool true on success
+     */
+    protected function _connect($dsn, array $config)
+    {
+        $connection = new PDO(
+            $dsn,
+            $config['username'],
+            $config['password'],
+            $config['flags']
+        );
+        $this->connection($connection);
+
+        return true;
+    }
+
+    /**
+     * Returns correct connection resource or object that is internally used
+     * If first argument is passed, it will set internal connection object or
+     * result to the value passed
+     *
+     * @param null|\PDO $connection The PDO connection instance.
+     * @return \PDO connection object used internally
+     */
+    public function connection($connection = null)
+    {
+        if ($connection !== null) {
+            $this->_connection = $connection;
+        }
+
+        return $this->_connection;
+    }
+
+    /**
+     * Disconnects from database server
+     *
+     * @return void
+     */
+    public function disconnect()
+    {
+        $this->_connection = null;
+    }
+
+    /**
+     * Checks whether or not the driver is connected.
+     *
+     * @return bool
+     */
+    public function isConnected()
+    {
+        if ($this->_connection === null) {
+            $connected = false;
+        } else {
+            try {
+                $connected = $this->_connection->query('SELECT 1');
+            } catch (PDOException $e) {
+                $connected = false;
+            }
+        }
+
+        return (bool)$connected;
+    }
+
+    /**
+     * Prepares a sql statement to be executed
+     *
+     * @param string|\Cake\Database\Query $query The query to turn into a prepared statement.
+     * @return \Cake\Database\StatementInterface
+     */
+    public function prepare($query)
+    {
+        $this->connect();
+        $isObject = $query instanceof Query;
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
+
+        return new PDOStatement($statement, $this);
+    }
+
+    /**
+     * Starts a transaction
+     *
+     * @return bool true on success, false otherwise
+     */
+    public function beginTransaction()
+    {
+        $this->connect();
+        if ($this->_connection->inTransaction()) {
+            return true;
+        }
+
+        return $this->_connection->beginTransaction();
+    }
+
+    /**
+     * Commits a transaction
+     *
+     * @return bool true on success, false otherwise
+     */
+    public function commitTransaction()
+    {
+        $this->connect();
+        if (!$this->_connection->inTransaction()) {
+            return false;
+        }
+
+        return $this->_connection->commit();
+    }
+
+    /**
+     * Rollback a transaction
+     *
+     * @return bool true on success, false otherwise
+     */
+    public function rollbackTransaction()
+    {
+        $this->connect();
+        if (!$this->_connection->inTransaction()) {
+            return false;
+        }
+
+        return $this->_connection->rollback();
+    }
+
+    /**
+     * Returns a value in a safe representation to be used in a query string
+     *
+     * @param mixed $value The value to quote.
+     * @param string $type Type to be used for determining kind of quoting to perform
+     * @return string
+     */
+    public function quote($value, $type)
+    {
+        $this->connect();
+
+        return $this->_connection->quote($value, $type);
+    }
+
+    /**
+     * Returns last id generated for a table or sequence in database
+     *
+     * @param string|null $table table name or sequence to get last insert value from
+     * @param string|null $column the name of the column representing the primary key
+     * @return string|int
+     */
+    public function lastInsertId($table = null, $column = null)
+    {
+        $this->connect();
+
+        return $this->_connection->lastInsertId($table);
+    }
+
+    /**
+     * Checks if the driver supports quoting, as PDO_ODBC does not support it.
+     *
+     * @return bool
+     */
+    public function supportsQuoting()
+    {
+        $this->connect();
+
+        return $this->_connection->getAttribute(PDO::ATTR_DRIVER_NAME) !== 'odbc';
+    }
+}