Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/OCI8/OCI8Connection.php
Строк: 206
<?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 DoctrineDBALDriverOCI8;

use 
DoctrineDBALDriverConnection;
use 
DoctrineDBALDriverServerInfoAwareConnection;
use 
DoctrineDBALPlatformsOraclePlatform;

/**
 * OCI8 implementation of the Connection interface.
 *
 * @since 2.0
 */
class OCI8Connection implements ConnectionServerInfoAwareConnection
{
    
/**
     * @var resource
     */
    
protected $dbh;

    
/**
     * @var integer
     */
    
protected $executeMode OCI_COMMIT_ON_SUCCESS;

    
/**
     * Creates a Connection to an Oracle Database using oci8 extension.
     *
     * @param string      $username
     * @param string      $password
     * @param string      $db
     * @param string|null $charset
     * @param integer     $sessionMode
     * @param boolean     $persistent
     *
     * @throws OCI8Exception
     */
    
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());
        }
    }

    
/**
     * {@inheritdoc}
     *
     * @throws UnexpectedValueException if the version string returned by the database server
     *                                   does not contain a parsable version number.
     */
    
public function getServerVersion()
    {
        if ( ! 
preg_match('/s+(d+.d+.d+.d+.d+)s+/'oci_server_version($this->dbh), $version)) {
            throw new 
UnexpectedValueException(
                
sprintf(
                    
'Unexpected database version string "%s". Cannot parse an appropriate version number from it. ' .
                    
'Please report this database version string to the Doctrine team.',
                    
oci_server_version($this->dbh)
                )
            );
        }

        return 
$version[1];
    }

    
/**
     * {@inheritdoc}
     */
    
public function requiresQueryForServerVersion()
    {
        return 
false;
    }

    
/**
     * {@inheritdoc}
     */
    
public function prepare($prepareString)
    {
        return new 
OCI8Statement($this->dbh$prepareString$this);
    }

    
/**
     * {@inheritdoc}
     */
    
public function query()
    {
        
$args func_get_args();
        
$sql $args[0];
        
//$fetchMode = $args[1];
        
$stmt $this->prepare($sql);
        
$stmt->execute();

        return 
$stmt;
    }

    
/**
     * {@inheritdoc}
     */
    
public function quote($value$type=PDO::PARAM_STR)
    {
        if (
is_int($value) || is_float($value)) {
            return 
$value;
        }
        
$value str_replace("'""''"$value);

        return 
"'" addcslashes($value"00nr\32") . "'";
    }

    
/**
     * {@inheritdoc}
     */
    
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'];
    }

    
/**
     * Returns the current execution mode.
     *
     * @return integer
     */
    
public function getExecuteMode()
    {
        return 
$this->executeMode;
    }

    
/**
     * {@inheritdoc}
     */
    
public function beginTransaction()
    {
        
$this->executeMode OCI_NO_AUTO_COMMIT;

        return 
true;
    }

    
/**
     * {@inheritdoc}
     */
    
public function commit()
    {
        if (!
oci_commit($this->dbh)) {
            throw 
OCI8Exception::fromErrorInfo($this->errorInfo());
        }
        
$this->executeMode OCI_COMMIT_ON_SUCCESS;

        return 
true;
    }

    
/**
     * {@inheritdoc}
     */
    
public function rollBack()
    {
        if (!
oci_rollback($this->dbh)) {
            throw 
OCI8Exception::fromErrorInfo($this->errorInfo());
        }
        
$this->executeMode OCI_COMMIT_ON_SUCCESS;

        return 
true;
    }

    
/**
     * {@inheritdoc}
     */
    
public function errorCode()
    {
        
$error oci_error($this->dbh);
        if (
$error !== false) {
            
$error $error['code'];
        }

        return 
$error;
    }

    
/**
     * {@inheritdoc}
     */
    
public function errorInfo()
    {
        return 
oci_error($this->dbh);
    }
}
Онлайн: 3
Реклама