Source of file OCI8Connection.php
Size: 5,243 Bytes - Last Modified: 2013-05-11T09:45:37+02:00
/home/theseer/Downloads/Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | <?php /* * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This software consists of voluntary contributions made by many individuals * and is licensed under the MIT license. For more information, see * <http://www.doctrine-project.org>. */ namespace Doctrine\DBAL\Driver\OCI8; use Doctrine\DBAL\Platforms\OraclePlatform; /** * OCI8 implementation of the Connection interface. * * @since 2.0 */ class OCI8Connection implements \Doctrine\DBAL\Driver\Connection { /** * @var resource */ protected $dbh; /** * @var int */ protected $executeMode = OCI_COMMIT_ON_SUCCESS; /** * Create a Connection to an Oracle Database using oci8 extension. * * @param string $username * @param string $password * @param string $db */ public function __construct($username, $password, $db, $charset = null, $sessionMode = OCI_DEFAULT, $persistent = false) { if (!defined('OCI_NO_AUTO_COMMIT')) { define('OCI_NO_AUTO_COMMIT', 0); } $this->dbh = $persistent ? @oci_pconnect($username, $password, $db, $charset, $sessionMode) : @oci_connect($username, $password, $db, $charset, $sessionMode); if ( ! $this->dbh) { throw OCI8Exception::fromErrorInfo(oci_error()); } } /** * Create a non-executed prepared statement. * * @param string $prepareString * @return OCI8Statement */ public function prepare($prepareString) { return new OCI8Statement($this->dbh, $prepareString, $this); } /** * @param string $sql * @return OCI8Statement */ public function query() { $args = func_get_args(); $sql = $args[0]; //$fetchMode = $args[1]; $stmt = $this->prepare($sql); $stmt->execute(); return $stmt; } /** * Quote input value. * * @param mixed $input * @param int $type PDO::PARAM* * @return mixed */ public function quote($value, $type=\PDO::PARAM_STR) { if (is_int($value) || is_float($value)) { return $value; } $value = str_replace("'", "''", $value); return "'" . addcslashes($value, "\000\n\r\\\032") . "'"; } /** * * @param string $statement * @return int */ public function exec($statement) { $stmt = $this->prepare($statement); $stmt->execute(); return $stmt->rowCount(); } /** * {@inheritDoc} */ public function lastInsertId($name = null) { if ($name === null) { return false; } OraclePlatform::assertValidIdentifier($name); $sql = 'SELECT ' . $name . '.CURRVAL FROM DUAL'; $stmt = $this->query($sql); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if ($result === false || !isset($result['CURRVAL'])) { throw new OCI8Exception("lastInsertId failed: Query was executed but no result was returned."); } return (int) $result['CURRVAL']; } /** * Return the current execution mode. */ public function getExecuteMode() { return $this->executeMode; } /** * Start a transactiom * * Oracle has to explicitly set the autocommit mode off. That means * after connection, a commit or rollback there is always automatically * opened a new transaction. * * @return bool */ public function beginTransaction() { $this->executeMode = OCI_NO_AUTO_COMMIT; return true; } /** * @throws OCI8Exception * @return bool */ public function commit() { if (!oci_commit($this->dbh)) { throw OCI8Exception::fromErrorInfo($this->errorInfo()); } $this->executeMode = OCI_COMMIT_ON_SUCCESS; return true; } /** * @throws OCI8Exception * @return bool */ public function rollBack() { if (!oci_rollback($this->dbh)) { throw OCI8Exception::fromErrorInfo($this->errorInfo()); } $this->executeMode = OCI_COMMIT_ON_SUCCESS; return true; } public function errorCode() { $error = oci_error($this->dbh); if ($error !== false) { $error = $error['code']; } return $error; } public function errorInfo() { return oci_error($this->dbh); } } |