You are here

function views_database_connector_get_database_schema_mysql in Views Database Connector 7

Same name and namespace in other branches
  1. 8 views_database_connector.views.inc \views_database_connector_get_database_schema_mysql()

Gathers appropriate information from MySQL driver type databases.

1 call to views_database_connector_get_database_schema_mysql()
views_database_connector_get_database_schemas in ./views_database_connector.views.inc
Gathers appropriate information from each potential database driver type.

File

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

Code

function views_database_connector_get_database_schema_mysql($key) {

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

  // Switch to database in question.
  db_set_active($key);

  // Get a list of the tables in this database.
  $tables = db_query('SHOW TABLES;');

  // Switch back to the main database.
  db_set_active('default');
  $tablelist = array();

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

    // This is the one of two database formats that can have whacky table
    // names due to using information_schema.  We have the ability to
    // check on columns without the PDO table substitution problem.
    foreach ($row as $v) {
      if (!in_array($v, array_keys(drupal_get_complete_schema()))) {

        // Switch to database in question.
        db_set_active($key);

        // Fetch column names and their data type from said table.
        $q = 'SELECT column_name, data_type FROM ';
        $q .= 'information_schema.columns WHERE table_name = :table;';
        $cols = db_query($q, array(
          ':table' => $v,
        ));

        // Switch back to the main database.
        db_set_active('default');
        $collist = array();

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

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

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