diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php index 93cfea967..5f5676f61 100644 --- a/tests/SchemaTest.php +++ b/tests/SchemaTest.php @@ -8,6 +8,7 @@ use Throwable; use Yiisoft\Db\Command\CommandInterface; use Yiisoft\Db\Connection\ConnectionInterface; +use Yiisoft\Db\Constraint\Constraint; use Yiisoft\Db\Driver\Pdo\PdoConnectionInterface; use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; @@ -557,4 +558,18 @@ public function testDomainType(): void $db->close(); } + + public function testTableUniques(): void + { + $db = $this->getConnection(true); + $schema = $db->getSchema(); + + /** @var Constraint[] $tableUniques */ + $tableUniques = $schema->getTableUniques('table_unique_index'); + + $this->assertCount(3, $tableUniques); + $this->assertSame(['one_unique'], $tableUniques[0]->getColumnNames()); + $this->assertSame(['two_unique_1', 'two_unique_2'], $tableUniques[1]->getColumnNames()); + $this->assertSame(['unique_index'], $tableUniques[2]->getColumnNames()); + } } diff --git a/tests/Support/Fixture/pgsql.sql b/tests/Support/Fixture/pgsql.sql index 5b63cf727..c5dd8b85c 100644 --- a/tests/Support/Fixture/pgsql.sql +++ b/tests/Support/Fixture/pgsql.sql @@ -35,6 +35,7 @@ DROP TABLE IF EXISTS "T_upsert"; DROP TABLE IF EXISTS "T_upsert_1"; DROP TABLE IF EXISTS "table_with_array_col"; DROP TABLE IF EXISTS "table_uuid"; +DROP TABLE IF EXISTS "table_unique_index"; DROP SCHEMA IF EXISTS "schema1" CASCADE; DROP SCHEMA IF EXISTS "schema2" CASCADE; @@ -454,3 +455,15 @@ CREATE TABLE "table_uuid" ( "uuid" uuid NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(), "col" varchar(16) ); + +CREATE TABLE "table_unique_index" ( + "id" serial PRIMARY KEY, + "one_unique" integer UNIQUE, + "two_unique_1" integer, + "two_unique_2" integer, + "unique_index" integer, + "non-unique" integer, + UNIQUE ("two_unique_1", "two_unique_2") +); + +CREATE UNIQUE INDEX ON "table_unique_index" ("unique_index") INCLUDE ("non-unique");