function SqliteDatabaseExcluder::excludeDatabaseFiles

Excludes SQLite database files from stage operations.

Parameters

\Drupal\package_manager\Event\CollectPathsToExcludeEvent $event: The event object.

File

core/modules/package_manager/src/PathExcluder/SqliteDatabaseExcluder.php, line 42

Class

SqliteDatabaseExcluder
Excludes SQLite database files from stage operations.

Namespace

Drupal\package_manager\PathExcluder

Code

public function excludeDatabaseFiles(CollectPathsToExcludeEvent $event) : void {
  // If the database is SQLite, it might be located in the project directory,
  // and should be excluded.
  if ($this->database
    ->driver() === 'sqlite') {
    // @todo Support database connections other than the default in
    //   https://www.drupal.org/i/3441919.
    $db_path = $this->database
      ->getConnectionOptions()['database'];
    // Exclude the database file and auxiliary files created by SQLite.
    $paths = [
      $db_path,
      "{$db_path}-shm",
      "{$db_path}-wal",
    ];
    // If the database path is absolute, it might be outside the project root,
    // in which case we don't need to do anything.
    if ($this->pathFactory
      ->create($db_path)
      ->isAbsolute()) {
      try {
        $event->addPathsRelativeToProjectRoot($paths);
      } catch (\LogicException) {
        // The database is outside the project root, so we're done.
      }
    }
    else {
      // The database is in the web root, and must be excluded relative to it.
      $event->addPathsRelativeToWebRoot($paths);
    }
  }
}

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