You are here

class System in Schema 8

Provides schema information defined by modules in implementations of hook_schema().

Note that we specifically do not use drupal_get_schema() here, because it removes description keys which we want to keep so we can also detect changes on table and column comments during comparison. The downside is that we have to collect all schema information manually ourselves.

Plugin annotation


@SchemaProvider(id = "system")

Hierarchy

Expanded class hierarchy of System

File

src/Plugin/Schema/System.php, line 24
Contains Drupal\schema\Plugin\Schema\System.

Namespace

Drupal\schema\Plugin\Schema
View source
class System extends PluginBase implements SchemaProviderInterface {
  const CACHE_BIN = 'schema_provider_system';

  /**
   * {@inheritdoc}
   */
  public function get($rebuild = FALSE) {

    //
    static $schema;
    if (!isset($schema) || $rebuild) {

      // Try to load the schema from cache.
      if (!$rebuild && ($cached = \Drupal::cache()
        ->get(self::CACHE_BIN))) {
        $schema = $cached->data;
      }
      else {
        $schema = array();

        // Load the .install files to get hook_schema.
        \Drupal::moduleHandler()
          ->loadAllIncludes('install');
        require_once DRUPAL_ROOT . '/core/includes/common.inc';

        // Invoke hook_schema for all modules.
        foreach (\Drupal::moduleHandler()
          ->getImplementations('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) \Drupal::moduleHandler()
            ->invoke($module, 'schema');

          // Set 'module' and 'name' keys for each table.
          _drupal_schema_initialize($current, $module, FALSE);
          $schema = array_merge($schema, $current);
        }
        \Drupal::moduleHandler()
          ->alter('schema', $schema);

        // If the schema is empty, avoid saving it: some database engines require
        // the schema to perform queries, and this could lead to infinite loops.
        if (!empty($schema)) {
          \Drupal::cache()
            ->set(self::CACHE_BIN, $schema, Cache::PERMANENT);
        }
      }
    }
    return $schema;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 92
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
System::CACHE_BIN constant
System::get public function Overrides SchemaProviderInterface::get