Error message

You are browsing documentation for drupal 7.x, which is not supported anymore. Read the updated version of this page for drupal 11.x (the latest version).

function DatabaseSchema_mysql::createTableSql

Generate SQL to create a new table from a Drupal schema definition.

Parameters

$name: The name of the table to create.

$table: A Schema API table definition array.

Return value

An array of SQL statements to create the table.

File

includes/database/mysql/schema.inc, line 83

Class

DatabaseSchema_mysql

Code

protected function createTableSql($name, $table) {
 $info = $this->connection 
 ->getConnectionOptions ();
 // Provide defaults if needed.
 $table += array(
 'mysql_engine' => 'InnoDB',
 // Allow the default charset to be overridden in settings.php.
'mysql_character_set' => $this->connection 
 ->utf8mb4IsActive () ? 'utf8mb4' : 'utf8',
 );
 $sql = "CREATE TABLE {" . $name . "} (\n";
 // Add the SQL statement for each field.
 foreach ($table['fields'] as $field_name => $field) {
 $sql .= $this->createFieldSql ($field_name, $this->processField ($field)) . ", \n";
 }
 // Process keys & indexes.
 $keys = $this->createKeysSql ($table);
 if (count ($keys)) {
 $sql .= implode (", \n", $keys) . ", \n";
 }
 // Remove the last comma and space.
 $sql = substr ($sql, 0, -3) . "\n) ";
 $sql .= 'ENGINE = ' . $table['mysql_engine'] . ' DEFAULT CHARACTER SET ' . $table['mysql_character_set'];
 // By default, MySQL uses the default collation for new tables, which is
 // 'utf8_general_ci' for utf8. If an alternate collation has been set, it
 // needs to be explicitly specified.
 // @see DatabaseConnection_mysql
 if (!empty($info['collation'])) {
 $sql .= ' COLLATE ' . $info['collation'];
 }
 // The row format needs to be either DYNAMIC or COMPRESSED in order to allow
 // for the innodb_large_prefix setting to take effect, see
 // https://dev.mysql.com/doc/refman/5.6/en/create-table.html
 if ($this->connection 
 ->utf8mb4IsActive ()) {
 $sql .= ' ROW_FORMAT=DYNAMIC';
 }
 // Add table comment.
 if (!empty($table['description'])) {
 $sql .= ' COMMENT ' . $this->prepareComment ($table['description'], self::COMMENT_MAX_TABLE);
 }
 return array(
 $sql,
 );
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.