Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / dbal / lib / Doctrine / DBAL / Portability / Connection.php
1 <?php
2 /*
3  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14  *
15  * This software consists of voluntary contributions made by many individuals
16  * and is licensed under the MIT license. For more information, see
17  * <http://www.doctrine-project.org>.
18  */
19
20
21 namespace Doctrine\DBAL\Portability;
22
23 use Doctrine\Common\EventManager;
24 use Doctrine\DBAL\Configuration;
25 use Doctrine\DBAL\Driver;
26 use Doctrine\DBAL\Cache\QueryCacheProfile;
27
28 class Connection extends \Doctrine\DBAL\Connection
29 {
30     const PORTABILITY_ALL               = 255;
31     const PORTABILITY_NONE              = 0;
32     const PORTABILITY_RTRIM             = 1;
33     const PORTABILITY_EMPTY_TO_NULL     = 4;
34     const PORTABILITY_FIX_CASE          = 8;
35
36     const PORTABILITY_ORACLE            = 9;
37     const PORTABILITY_POSTGRESQL        = 13;
38     const PORTABILITY_SQLITE            = 13;
39     const PORTABILITY_OTHERVENDORS      = 12;
40     const PORTABILITY_DRIZZLE           = 13;
41     const PORTABILITY_SQLSRV            = 13;
42
43     /**
44      * @var int
45      */
46     private $portability = self::PORTABILITY_NONE;
47
48     /**
49      * @var int
50      */
51     private $case;
52
53     public function connect()
54     {
55         $ret = parent::connect();
56         if ($ret) {
57             $params = $this->getParams();
58             if (isset($params['portability'])) {
59                 if ($this->_platform->getName() === "oracle") {
60                     $params['portability'] = $params['portability'] & self::PORTABILITY_ORACLE;
61                 } else if ($this->_platform->getName() === "postgresql") {
62                     $params['portability'] = $params['portability'] & self::PORTABILITY_POSTGRESQL;
63                 } else if ($this->_platform->getName() === "sqlite") {
64                     $params['portability'] = $params['portability'] & self::PORTABILITY_SQLITE;
65                 } else if ($this->_platform->getName() === "drizzle") {
66                     $params['portability'] = self::PORTABILITY_DRIZZLE;
67                 } else if ($this->_platform->getName() === 'sqlsrv') {
68                     $params['portability'] = $params['portabililty'] & self::PORTABILITY_SQLSRV;
69                 } else {
70                     $params['portability'] = $params['portability'] & self::PORTABILITY_OTHERVENDORS;
71                 }
72                 $this->portability = $params['portability'];
73             }
74             if (isset($params['fetch_case']) && $this->portability & self::PORTABILITY_FIX_CASE) {
75                 if ($this->_conn instanceof \Doctrine\DBAL\Driver\PDOConnection) {
76                     // make use of c-level support for case handling
77                     $this->_conn->setAttribute(\PDO::ATTR_CASE, $params['fetch_case']);
78                 } else {
79                     $this->case = ($params['fetch_case'] == \PDO::CASE_LOWER) ? CASE_LOWER : CASE_UPPER;
80                 }
81             }
82         }
83         return $ret;
84     }
85
86     public function getPortability()
87     {
88         return $this->portability;
89     }
90
91     public function getFetchCase()
92     {
93         return $this->case;
94     }
95
96     public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null)
97     {
98         return new Statement(parent::executeQuery($query, $params, $types, $qcp), $this);
99     }
100
101     /**
102      * Prepares an SQL statement.
103      *
104      * @param string $statement The SQL statement to prepare.
105      * @return \Doctrine\DBAL\Driver\Statement The prepared statement.
106      */
107     public function prepare($statement)
108     {
109         return new Statement(parent::prepare($statement), $this);
110     }
111
112     public function query()
113     {
114         $this->connect();
115
116         $stmt = call_user_func_array(array($this->_conn, 'query'), func_get_args());
117         return new Statement($stmt, $this);
118     }
119 }