protected function Schema::findPrimaryKeyColumns in Drupal 8
Same name in this branch
- 8 core/lib/Drupal/Core/Database/Schema.php \Drupal\Core\Database\Schema::findPrimaryKeyColumns()
- 8 core/lib/Drupal/Core/Database/Driver/sqlite/Schema.php \Drupal\Core\Database\Driver\sqlite\Schema::findPrimaryKeyColumns()
- 8 core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php \Drupal\Core\Database\Driver\pgsql\Schema::findPrimaryKeyColumns()
- 8 core/lib/Drupal/Core/Database/Driver/mysql/Schema.php \Drupal\Core\Database\Driver\mysql\Schema::findPrimaryKeyColumns()
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php \Drupal\Core\Database\Driver\pgsql\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/
lib/ Drupal/ Core/ Database/ Driver/ pgsql/ Schema.php, line 811
Class
- Schema
- PostgreSQL implementation of \Drupal\Core\Database\Schema.
Namespace
Drupal\Core\Database\Driver\pgsqlCode
protected function findPrimaryKeyColumns($table) {
if (!$this
->tableExists($table)) {
return FALSE;
}
// Fetch the 'indkey' column from 'pg_index' to figure out the order of the
// primary key.
// @todo Use 'array_position()' to be able to perform the ordering in SQL
// directly when 9.5 is the minimum PostgreSQL version.
$result = $this->connection
->query("SELECT a.attname, i.indkey 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")
->fetchAllKeyed();
if (!$result) {
return [];
}
$order = explode(' ', reset($result));
$columns = array_combine($order, array_keys($result));
ksort($columns);
return array_values($columns);
}