protected Schema::introspectSchema($table)
Find out the schema of a table.
This function uses introspection methods provided by the database to create a schema array. This is useful, for example, during update when the old schema is not available.
Parameters
$table: Name of the table.
Return value
An array representing the schema, from drupal_get_schema().
Throws
\Exception If a column of the table could not be parsed.
File
- core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php, line 442
Class
- Schema
- SQLite implementation of \Drupal\Core\Database\Schema.
Namespace
Drupal\Core\Database\Driver\sqlite
Code
protected function introspectSchema($table) { $mapped_fields = array_flip($this->getFieldTypeMap()); $schema = array( 'fields' => array(), 'primary key' => array(), 'unique keys' => array(), 'indexes' => array(), ); $info = $this->getPrefixInfo($table); $result = $this->connection->query('PRAGMA ' . $info['schema'] . '.table_info(' . $info['table'] . ')'); foreach ($result as $row) { if (preg_match('/^([^(]+)\((.*)\)$/', $row->type, $matches)) { $type = $matches[1]; $length = $matches[2]; } else { $type = $row->type; $length = NULL; } if (isset($mapped_fields[$type])) { list($type, $size) = explode(':', $mapped_fields[$type]); $schema['fields'][$row->name] = array( 'type' => $type, 'size' => $size, 'not null' => !empty($row->notnull), 'default' => trim($row->dflt_value, "'"), ); if ($length) { $schema['fields'][$row->name]['length'] = $length; } if ($row->pk) { $schema['primary key'][] = $row->name; } } else { throw new \Exception("Unable to parse the column type " . $row->type); } } $indexes = array(); $result = $this->connection->query('PRAGMA ' . $info['schema'] . '.index_list(' . $info['table'] . ')'); foreach ($result as $row) { if (strpos($row->name, 'sqlite_autoindex_') !== 0) { $indexes[] = array( 'schema_key' => $row->unique ? 'unique keys' : 'indexes', 'name' => $row->name, ); } } foreach ($indexes as $index) { $name = $index['name']; // Get index name without prefix. $index_name = substr($name, strlen($info['table']) + 1); $result = $this->connection->query('PRAGMA ' . $info['schema'] . '.index_info(' . $name . ')'); foreach ($result as $row) { $schema[$index['schema_key']][$index_name][] = $row->name; } } return $schema; }
Please login to continue.