diff --git a/lib/Doctrine/Adapter/Mysqli.php b/lib/Doctrine/Adapter/Mysqli.php new file mode 100644 index 000000000..c4de89d75 --- /dev/null +++ b/lib/Doctrine/Adapter/Mysqli.php @@ -0,0 +1,141 @@ +. + */ +/** + * Doctrine_Adapter_Mysqli + * This class is used for special testing purposes. + * + * @package Doctrine + * @subpackage Doctrine_Adapter + * @author Konsta Vesterinen + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision: 1080 $ + */ +class Doctrine_Adapter_Mysqli extends Doctrine_Adapter +{ + /** + * Creates a connection to the database. + * + * @return void + * @throws Doctrine_Adapter_Mysqli_Exception + */ + protected function _connect() + { + if ($this->_connection) { + return; + } + // Suppress connection warnings here. + // Throw an exception instead. + @$this->_connection = new mysqli( + $this->_config['host'], + $this->_config['username'], + $this->_config['password'], + $this->_config['dbname'] + ); + if ($this->_connection === false || mysqli_connect_errno()) { + throw new Doctrine_Adapter_Mysqli_Exception(mysqli_connect_error()); + } + } + + /** + * Force the connection to close. + * + * @return void + */ + public function closeConnection() + { + $this->_connection->close(); + $this->_connection = null; + } + + /** + * Prepare a statement and return a PDOStatement-like object. + * + * @param string $sql SQL query + * @return Doctrine_Statement_Mysqli + */ + public function prepare($sql) + { + $this->_connect(); + $stmt = new Doctrine_Statement_Mysqli($this, $sql); + $stmt->setFetchMode($this->_fetchMode); + return $stmt; + } + + /** + * Gets the last ID generated automatically by an IDENTITY/AUTOINCREMENT column. + * + * As a convention, on RDBMS brands that support sequences + * (e.g. Oracle, PostgreSQL, DB2), this method forms the name of a sequence + * from the arguments and returns the last id generated by that sequence. + * On RDBMS brands that support IDENTITY/AUTOINCREMENT columns, this method + * returns the last value generated for such a column, and the table name + * argument is disregarded. + * + * MySQL does not support sequences, so $tableName and $primaryKey are ignored. + * + * @param string $tableName OPTIONAL Name of table. + * @param string $primaryKey OPTIONAL Name of primary key column. + * @return integer + */ + public function lastInsertId($tableName = null, $primaryKey = null) + { + $mysqli = $this->_connection; + return $mysqli->insert_id; + } + + /** + * Begin a transaction. + * + * @return void + */ + protected function _beginTransaction() + { + $this->_connect(); + $this->_connection->autocommit(false); + } + + /** + * Commit a transaction. + * + * @return void + */ + protected function _commit() + { + $this->_connect(); + $this->_connection->commit(); + $this->_connection->autocommit(true); + } + + /** + * Roll-back a transaction. + * + * @return void + */ + protected function _rollBack() + { + $this->_connect(); + $this->_connection->rollback(); + $this->_connection->autocommit(true); + } +}