Same name and namespace in other branches
  1. 7.x includes/bootstrap.inc \drupal_get_schema()

Get the schema definition of a table, or the whole database schema.

The returned schema will include any modifications made by any module that implements hook_schema_alter().

Parameters

$table: The name of the table. If not given, the schema of all tables is returned.

$rebuild: If true, the schema will be rebuilt instead of retrieved from the cache.

Related topics

2 calls to drupal_get_schema()
drupal_schema_fields_sql in includes/common.inc
Retrieve a list of fields from a table schema. The list is suitable for use in a SQL query.
drupal_write_record in includes/common.inc
Save a record to the database based upon the schema.

File

includes/common.inc, line 3342
Common functions that many Drupal modules will need to reference.

Code

function drupal_get_schema($table = NULL, $rebuild = FALSE) {
  static $schema = array();
  if (empty($schema) || $rebuild) {

    // Try to load the schema from cache.
    if (!$rebuild && ($cached = cache_get('schema'))) {
      $schema = $cached->data;
    }
    else {
      $schema = array();

      // Load the .install files to get hook_schema.
      module_load_all_includes('install');

      // Invoke hook_schema for all modules.
      foreach (module_implements('schema') as $module) {

        // Cast the result of hook_schema() to an array, as a NULL return value
        // would cause array_merge() to set the $schema variable to NULL as well.
        // That would break modules which use $schema further down the line.
        $current = (array) module_invoke($module, 'schema');
        _drupal_initialize_schema($module, $current);
        $schema = array_merge($schema, $current);
      }
      drupal_alter('schema', $schema);
      cache_set('schema', $schema);
    }
  }
  if (!isset($table)) {
    return $schema;
  }
  elseif (isset($schema[$table])) {
    return $schema[$table];
  }
  else {
    return FALSE;
  }
}