Mysql.php 4.56 KB
Newer Older
zYne's avatar
zYne committed
1
<?php
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/* 
 *  $Id$
 *
 * 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 LGPL. For more information, see
 * <http://www.phpdoctrine.com>.
 */
Doctrine::autoload('Doctrine_Connection_Common');
zYne's avatar
zYne committed
22
/**
23 24 25 26
 * Doctrine_Connection_Mysql
 *
 * @package     Doctrine ORM
 * @url         www.phpdoctrine.com
27 28 29 30
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @author      Konsta Vesterinen
 * @author      Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
 * @version     $Id$
zYne's avatar
zYne committed
31 32
 */
class Doctrine_Connection_Mysql extends Doctrine_Connection_Common {
33 34 35 36
    /**
     * @var string $driverName                  the name of this connection driver
     */
    protected $driverName = 'Mysql';
zYne's avatar
zYne committed
37 38
    /**
     * the constructor
zYne's avatar
zYne committed
39 40 41
     *
     * @param Doctrine_Manager $manager
     * @param PDO $pdo                          database handle
zYne's avatar
zYne committed
42
     */
zYne's avatar
zYne committed
43 44 45
    public function __construct(Doctrine_Manager $manager, $adapter) {
        $adapter->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
        $this->supported = array(
                          'sequences'            => 'emulated',
                          'indexes'              => true,
                          'affected_rows'        => true,
                          'transactions'         => true,
                          'savepoints'           => false,
                          'summary_functions'    => true,
                          'order_by_text'        => true,
                          'current_id'           => 'emulated',
                          'limit_queries'        => true,
                          'LOBs'                 => true,
                          'replace'              => true,
                          'sub_selects'          => true,
                          'auto_increment'       => true,
                          'primary_key'          => true,
                          'result_introspection' => true,
                          'prepared_statements'  => 'emulated',
                          'identifier_quoting'   => true,
                          'pattern_escaping'     => true
                          );

zYne's avatar
zYne committed
67
        parent::__construct($manager, $adapter);
68
    }    
69

70 71 72 73 74 75 76 77 78
    /**
     * getTransactionIsolation
     * 
     * @return string               returns the current session transaction isolation level
     */
    public function getTransactionIsolation() {
        $ret = $this->dbh->query('SELECT @@tx_isolation')->fetch(PDO::FETCH_NUM);
        return $ret[0];
    }
79 80 81
    /**
     * Set the transacton isolation level.
     *
82 83 84 85 86 87
     * example :
     *
     * <code>
     * $conn->setTransactionIsolation('READ UNCOMMITTED');
     * </code>
     *
88 89 90 91 92
     * @param   string  standard isolation level
     *                  READ UNCOMMITTED (allows dirty reads)
     *                  READ COMMITTED (prevents dirty reads)
     *                  REPEATABLE READ (prevents nonrepeatable reads)
     *                  SERIALIZABLE (prevents phantom reads)
93
     *
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
     * @throws Doctrine_Connection_Mysql_Exception      if using unknown isolation level
     * @throws PDOException                             if something fails at the PDO level
     * @return void
     */
    public function setTransactionIsolation($isolation) {
        switch ($isolation) {
            case 'READ UNCOMMITTED':
            case 'READ COMMITTED':
            case 'REPEATABLE READ':
            case 'SERIALIZABLE':
            
            break;
            default:
                throw new Doctrine_Connection_Mysql_Exception('Isolation level ' . $isolation . ' is not supported.');
        }

        $query = "SET SESSION TRANSACTION ISOLATION LEVEL $isolation";
        return $this->dbh->query($query);
    }
zYne's avatar
zYne committed
113
}