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.
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>.
20 namespace Doctrine\DBAL\Schema;
25 * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
26 * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
27 * @author Lukas Smith <smith@pooteeweet.org> (PEAR MDB2 library)
28 * @author Jonathan H. Wage <jonwage@gmail.com>
32 class SqliteSchemaManager extends AbstractSchemaManager
39 public function dropDatabase($database)
41 if (file_exists($database)) {
51 public function createDatabase($database)
53 $params = $this->_conn->getParams();
54 $driver = $params['driver'];
59 $conn = \Doctrine\DBAL\DriverManager::getConnection($options);
64 protected function _getPortableTableDefinition($table)
66 return $table['name'];
70 * @license New BSD License
71 * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html
72 * @param array $tableIndexes
73 * @param string $tableName
76 protected function _getPortableTableIndexesList($tableIndexes, $tableName=null)
78 $indexBuffer = array();
81 $stmt = $this->_conn->executeQuery( "PRAGMA TABLE_INFO ('$tableName')" );
82 $indexArray = $stmt->fetchAll(\PDO::FETCH_ASSOC);
83 foreach($indexArray as $indexColumnRow) {
84 if($indexColumnRow['pk'] == "1") {
85 $indexBuffer[] = array(
86 'key_name' => 'primary',
88 'non_unique' => false,
89 'column_name' => $indexColumnRow['name']
94 // fetch regular indexes
95 foreach($tableIndexes as $tableIndex) {
96 // Ignore indexes with reserved names, e.g. autoindexes
97 if (strpos($tableIndex['name'], 'sqlite_') !== 0) {
98 $keyName = $tableIndex['name'];
100 $idx['key_name'] = $keyName;
101 $idx['primary'] = false;
102 $idx['non_unique'] = $tableIndex['unique']?false:true;
104 $stmt = $this->_conn->executeQuery( "PRAGMA INDEX_INFO ( '{$keyName}' )" );
105 $indexArray = $stmt->fetchAll(\PDO::FETCH_ASSOC);
107 foreach ( $indexArray as $indexColumnRow ) {
108 $idx['column_name'] = $indexColumnRow['name'];
109 $indexBuffer[] = $idx;
114 return parent::_getPortableTableIndexesList($indexBuffer, $tableName);
117 protected function _getPortableTableIndexDefinition($tableIndex)
120 'name' => $tableIndex['name'],
121 'unique' => (bool) $tableIndex['unique']
125 protected function _getPortableTableColumnDefinition($tableColumn)
127 $e = explode('(', $tableColumn['type']);
128 $tableColumn['type'] = $e[0];
130 $length = trim($e[1], ')');
131 $tableColumn['length'] = $length;
134 $dbType = strtolower($tableColumn['type']);
135 $length = isset($tableColumn['length']) ? $tableColumn['length'] : null;
136 $unsigned = (boolean) isset($tableColumn['unsigned']) ? $tableColumn['unsigned'] : false;
138 $type = $this->_platform->getDoctrineTypeMapping($dbType);
139 $default = $tableColumn['dflt_value'];
140 if ($default == 'NULL') {
143 if ($default !== null) {
144 // SQLite returns strings wrapped in single quotes, so we need to strip them
145 $default = preg_replace("/^'(.*)'$/", '\1', $default);
147 $notnull = (bool) $tableColumn['notnull'];
149 if ( ! isset($tableColumn['name'])) {
150 $tableColumn['name'] = '';
165 if (isset($tableColumn['length'])) {
166 list($precision, $scale) = array_map('trim', explode(', ', $tableColumn['length']));
174 'unsigned' => (bool) $unsigned,
176 'notnull' => $notnull,
177 'default' => $default,
178 'precision' => $precision,
180 'autoincrement' => false,
183 return new Column($tableColumn['name'], \Doctrine\DBAL\Types\Type::getType($type), $options);
186 protected function _getPortableViewDefinition($view)
188 return new View($view['name'], $view['sql']);