public function SchemaTest::testFindPrimaryKeyColumns in Drupal 9
Same name and namespace in other branches
- 8 core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php \Drupal\KernelTests\Core\Database\SchemaTest::testFindPrimaryKeyColumns()
- 10 core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php \Drupal\KernelTests\Core\Database\SchemaTest::testFindPrimaryKeyColumns()
@covers ::findPrimaryKeyColumns
File
- core/tests/ Drupal/ KernelTests/ Core/ Database/ SchemaTest.php, line 1064 
Class
- SchemaTest
- Tests table creation and modification via the schema API.
Namespace
Drupal\KernelTests\Core\DatabaseCode
public function testFindPrimaryKeyColumns() {
  $method = new \ReflectionMethod(get_class($this->schema), 'findPrimaryKeyColumns');
  $method
    ->setAccessible(TRUE);
  // Test with single column primary key.
  $this->schema
    ->createTable('table_with_pk_0', [
    'description' => 'Table with primary key.',
    'fields' => [
      'id' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
    'primary key' => [
      'id',
    ],
  ]);
  $this
    ->assertSame([
    'id',
  ], $method
    ->invoke($this->schema, 'table_with_pk_0'));
  // Test with multiple column primary key.
  $this->schema
    ->createTable('table_with_pk_1', [
    'description' => 'Table with primary key with multiple columns.',
    'fields' => [
      'id0' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'id1' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
    'primary key' => [
      'id0',
      'id1',
    ],
  ]);
  $this
    ->assertSame([
    'id0',
    'id1',
  ], $method
    ->invoke($this->schema, 'table_with_pk_1'));
  // Test with multiple column primary key and not being the first column of
  // the table definition.
  $this->schema
    ->createTable('table_with_pk_2', [
    'description' => 'Table with primary key with multiple columns at the end and in reverted sequence.',
    'fields' => [
      'test_field_1' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field_2' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'id3' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'id4' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
    'primary key' => [
      'id4',
      'id3',
    ],
  ]);
  $this
    ->assertSame([
    'id4',
    'id3',
  ], $method
    ->invoke($this->schema, 'table_with_pk_2'));
  // Test with multiple column primary key in a different order. For the
  // PostgreSQL and the SQLite drivers is sorting used to get the primary key
  // columns in the right order.
  $this->schema
    ->createTable('table_with_pk_3', [
    'description' => 'Table with primary key with multiple columns at the end and in reverted sequence.',
    'fields' => [
      'test_field_1' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field_2' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'id3' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'id4' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
    'primary key' => [
      'id3',
      'test_field_2',
      'id4',
    ],
  ]);
  $this
    ->assertSame([
    'id3',
    'test_field_2',
    'id4',
  ], $method
    ->invoke($this->schema, 'table_with_pk_3'));
  // Test with table without a primary key.
  $this->schema
    ->createTable('table_without_pk_1', [
    'description' => 'Table without primary key.',
    'fields' => [
      'id' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
  ]);
  $this
    ->assertSame([], $method
    ->invoke($this->schema, 'table_without_pk_1'));
  // Test with table with an empty primary key.
  $this->schema
    ->createTable('table_without_pk_2', [
    'description' => 'Table without primary key.',
    'fields' => [
      'id' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
      'test_field' => [
        'type' => 'int',
        'not null' => TRUE,
      ],
    ],
    'primary key' => [],
  ]);
  $this
    ->assertSame([], $method
    ->invoke($this->schema, 'table_without_pk_2'));
  // Test with non existing table.
  $this
    ->assertFalse($method
    ->invoke($this->schema, 'non_existing_table'));
}