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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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.