Coverage for Doctrine_Import_Oracle

Back to coverage report

1 <?php
2 /*
3  *  $Id: Oracle.php 2963 2007-10-21 06:23:59Z Jonathan.Wage $
4  *
5  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16  *
17  * This software consists of voluntary contributions made by many individuals
18  * and is licensed under the LGPL. For more information, see
19  * <http://www.phpdoctrine.com>.
20  */
21 Doctrine::autoload('Doctrine_Import');
22 /**
23  * @package     Doctrine
24  * @subpackage  Import
25  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
26  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
27  * @version     $Revision: 2963 $
28  * @link        www.phpdoctrine.com
29  * @since       1.0
30  */
31 class Doctrine_Import_Oracle extends Doctrine_Import
32 {
33     /**
34      * lists all databases
35      *
36      * @return array
37      */
38     public function listDatabases()
39     {
40         if ( ! $this->conn->getAttribute(Doctrine::ATTR_EMULATE_DATABASE)) {
41             throw new Doctrine_Import_Exception('database listing is only supported if the "emulate_database" option is enabled');
42         }
43         /**
44         if ($this->conn->options['database_name_prefix']) {
45             $query = 'SELECT SUBSTR(username, ';
46             $query.= (strlen($this->conn->getAttribute(['database_name_prefix'])+1);
47             $query.= ") FROM sys.dba_users WHERE username LIKE '";
48             $query.= $this->conn->options['database_name_prefix']."%'";
49         } else {
50         */
51         $query   = 'SELECT username FROM sys.dba_users';
52
53         $result2 = $this->conn->standaloneQuery($query);
54         $result  = $result2->fetchColumn();
55
56         return $result;
57     }
58
59     /**
60      * lists all availible database functions
61      *
62      * @return array
63      */
64     public function listFunctions()
65     {
66         $query = "SELECT name FROM sys.user_source WHERE line = 1 AND type = 'FUNCTION'";
67
68         return $this->conn->fetchColumn($query);
69     }
70
71     /**
72      * lists all database triggers
73      *
74      * @param string|null $database
75      * @return array
76      */
77     public function listTriggers($database = null)
78     {
79
80     }
81
82     /**
83      * lists all database sequences
84      *
85      * @param string|null $database
86      * @return array
87      */
88     public function listSequences($database = null)
89     {
90         $query = "SELECT sequence_name FROM sys.user_sequences";
91
92         $tableNames = $this->conn->fetchColumn($query);
93
94         return array_map(array($this->conn->formatter, 'fixSequenceName'), $tableNames);
95     }
96
97     /**
98      * lists table constraints
99      *
100      * @param string $table     database table name
101      * @return array
102      */
103     public function listTableConstraints($table)
104     {
105         $table = $this->conn->quote($table, 'text');
106
107         $query = 'SELECT index_name name FROM user_constraints'
108                . ' WHERE table_name = ' . $table . ' OR table_name = ' . strtoupper($table);
109
110         $constraints = $this->conn->fetchColumn($query);
111
112         return array_map(array($this->conn->formatter, 'fixIndexName'), $constraints);
113     }
114
115     /**
116      * lists table constraints
117      *
118      * @param string $table     database table name
119      * @return array
120      */
121     public function listTableColumns($table)
122     {
123         $table  = strtoupper($table);
124         $sql    = "SELECT column_name, data_type, data_length, nullable, data_default, data_scale, data_precision FROM all_tab_columns"
125                 . " WHERE table_name = '" . $table . "' ORDER BY column_name";
126
127         $result = $this->conn->fetchAssoc($sql);
128
129         foreach($result as $val) {
130             $val = array_change_key_case($val, CASE_LOWER);
131             $decl = $this->conn->dataDict->getPortableDeclaration($val);
132
133
134             $descr[$val['column_name']] = array(
135                'name'       => $val['column_name'],
136                'notnull'    => (bool) ($val['nullable'] === 'N'),
137                'ntype'      => $val['data_type'],
138                'type'       => $decl['type'][0],
139                'alltypes'   => $decl['type'],
140                'fixed'      => $decl['fixed'],
141                'unsigned'   => $decl['unsigned'],
142                'default'    => $val['data_default'],
143                'length'     => $val['data_length'],
144                'precision'  => $val['data_precision'],
145                'scale'      => $val['scale'],
146             );
147         }
148         return $result;
149     }
150
151     /**
152      * lists table constraints
153      *
154      * @param string $table     database table name
155      * @return array
156      */
157     public function listTableIndexes($table)
158     {
159         $table = $this->conn->quote($table, 'text');
160         $query = 'SELECT index_name name FROM user_indexes'
161                . ' WHERE table_name = ' . $table . ' OR table_name = ' . strtoupper($table)
162                . ' AND generated = ' . $this->conn->quote('N', 'text');
163
164         $indexes = $this->conn->fetchColumn($query);
165
166         return array_map(array($this->conn->formatter, 'fixIndexName'), $indexes);
167     }
168
169     /**
170      * lists tables
171      *
172      * @param string|null $database
173      * @return array
174      */
175     public function listTables($database = null)
176     {
177         $query = 'SELECT table_name FROM sys.user_tables';
178         return $this->conn->fetchColumn($query);
179     }
180
181     /**
182      * lists table triggers
183      *
184      * @param string $table     database table name
185      * @return array
186      */
187     public function listTableTriggers($table)
188     {
189
190     }
191
192     /**
193      * lists table views
194      *
195      * @param string $table     database table name
196      * @return array
197      */
198     public function listTableViews($table)
199     {
200
201     }
202
203     /**
204      * lists database users
205      *
206      * @return array
207      */
208     public function listUsers()
209     {
210         /**
211         if ($this->conn->options['emulate_database'] && $this->conn->options['database_name_prefix']) {
212             $query = 'SELECT SUBSTR(username, ';
213             $query.= (strlen($this->conn->options['database_name_prefix'])+1);
214             $query.= ") FROM sys.dba_users WHERE username NOT LIKE '";
215             $query.= $this->conn->options['database_name_prefix']."%'";
216         } else {
217         */
218
219         $query = 'SELECT username FROM sys.dba_users';
220         //}
221
222         return $this->conn->fetchColumn($query);
223     }
224
225     /**
226      * lists database views
227      *
228      * @param string|null $database
229      * @return array
230      */
231     public function listViews($database = null)
232     {
233         $query = 'SELECT view_name FROM sys.user_views';
234         return $this->conn->fetchColumn($query);
235     }
236 }