You are here

protected function Schema::findPrimaryKeyColumns in Drupal 10

Same name in this branch
  1. 10 core/lib/Drupal/Core/Database/Schema.php \Drupal\Core\Database\Schema::findPrimaryKeyColumns()
  2. 10 core/modules/sqlite/src/Driver/Database/sqlite/Schema.php \Drupal\sqlite\Driver\Database\sqlite\Schema::findPrimaryKeyColumns()
  3. 10 core/modules/pgsql/src/Driver/Database/pgsql/Schema.php \Drupal\pgsql\Driver\Database\pgsql\Schema::findPrimaryKeyColumns()
  4. 10 core/modules/mysql/src/Driver/Database/mysql/Schema.php \Drupal\mysql\Driver\Database\mysql\Schema::findPrimaryKeyColumns()

Finds the primary key columns of a table, from the database.

Parameters

string $table: The name of the table.

Return value

string[]|false A simple array with the names of the columns composing the table's primary key, or FALSE if the table does not exist.

Throws

\RuntimeException If the driver does not override this method.

Overrides Schema::findPrimaryKeyColumns

File

core/modules/pgsql/src/Driver/Database/pgsql/Schema.php, line 787

Class

Schema
PostgreSQL implementation of \Drupal\Core\Database\Schema.

Namespace

Drupal\pgsql\Driver\Database\pgsql

Code

protected function findPrimaryKeyColumns($table) {
  if (!$this
    ->tableExists($table)) {
    return FALSE;
  }
  return $this->connection
    ->query("SELECT array_position(i.indkey, a.attnum) AS position, a.attname FROM pg_index i JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) WHERE i.indrelid = '{" . $table . "}'::regclass AND i.indisprimary ORDER BY position")
    ->fetchAllKeyed();
}