You are here

function views_database_connector_get_database_schema_sqlite in Views Database Connector 8

Same name and namespace in other branches
  1. 7 views_database_connector.views.inc \views_database_connector_get_database_schema_sqlite()

Gathers appropriate information from SQLite driver type databases.

1 call to views_database_connector_get_database_schema_sqlite()
add_table_to_database_list in ./views_database_connector.views.inc
Adds table list to the database list based on driver.

File

./views_database_connector.views.inc, line 273
Responsible for hooking views to add each database and its tables.

Code

function views_database_connector_get_database_schema_sqlite($key) {

  // Load the appropriate data type groups.
  $types = views_database_connector_get_data_types();

  // Switch to database in question.
  Database::setActiveConnection($key);

  // The database in question.
  $new_db = Database::getConnection('default', $key);

  // Get a list of the tables in this database.
  $q = 'SELECT name FROM sqlite_master WHERE type=\'table\';';
  $tables = $new_db
    ->query($q);

  // Switch back to the main database.
  Database::setActiveConnection('default');
  $tablelist = [];

  // Fetch a row, each with a table name.
  while ($row = $tables
    ->fetchAssoc()) {
    foreach ($row as $v) {

      // Check that the table name is safe to substitute in the query.
      if ($v == \Drupal::database()
        ->escapeTable($v)) {

        // Switch to database in question.
        Database::setActiveConnection($key);

        // Fetch column names and their data type from said table.
        $q = 'PRAGMA table_info(:table);';
        $cols = $new_db
          ->query(str_ireplace(':table', $v, $q));

        // Switch back to the main database.
        Database::setActiveConnection('default');
        $collist = [];

        // Fetch a row, each with a column name.
        while ($r = $cols
          ->fetchAssoc()) {
          $t = 'broken';

          // Add column to column list.
          if (isset($r['name'])) {
            foreach ($types as $type => $matches) {
              foreach ($matches as $match) {
                if (stristr($r['type'], $match)) {
                  $t = $type;
                }
              }
            }
            $collist[] = [
              $t,
              $r['name'],
            ];
          }
        }

        // Add table and its columns to the table list.
        $tablelist[] = [
          $v,
          $collist,
        ];
      }
    }
  }
  return $tablelist;
}