Skip to content

Commit

Permalink
Merge pull request #543 from supabase/or/issue_542
Browse files Browse the repository at this point in the history
Partial Unique Indexes should not be marked as `is_unique`
  • Loading branch information
olirice authored Jul 11, 2024
2 parents 37081f9 + 452a5d1 commit 0b1c39b
Show file tree
Hide file tree
Showing 3 changed files with 171 additions and 1 deletion.
2 changes: 1 addition & 1 deletion sql/load_sql_context.sql
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ select
),
array[]::text[]
),
'is_unique', pi.indisunique,
'is_unique', pi.indisunique and pi.indpred is null,
'is_primary_key', pi.indisprimary
)
)
Expand Down
116 changes: 116 additions & 0 deletions test/expected/issue_542_partial_unique.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
begin;
create table public.works(
work_id int primary key
);
create table public.readthroughs (
readthrough_id int primary key,
work_id int not null references public.works(work_id),
status text not null
);
select jsonb_pretty(
graphql.resolve($$
{
__type(name: "Works") {
kind
fields {
name
type {
kind
name
}
}
}
}
$$)
);
jsonb_pretty
-------------------------------------------------------
{ +
"data": { +
"__type": { +
"kind": "OBJECT", +
"fields": [ +
{ +
"name": "nodeId", +
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
}, +
{ +
"name": "workId", +
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
}, +
{ +
"name": "readthroughsCollection",+
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
} +
] +
} +
} +
}
(1 row)

/* Creating partial unique referencing status should NOT change the relationship with
the readthroughs to a non-null unique because its partial and other statuses may
have multiple associated readthroughs */
create unique index idx_unique_in_progress_readthrough
on public.readthroughs (work_id)
where status in ('in_progress');
select jsonb_pretty(
graphql.resolve($$
{
__type(name: "Works") {
kind
fields {
name
type {
kind
name
}
}
}
}
$$)
);
jsonb_pretty
-------------------------------------------------------
{ +
"data": { +
"__type": { +
"kind": "OBJECT", +
"fields": [ +
{ +
"name": "nodeId", +
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
}, +
{ +
"name": "workId", +
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
}, +
{ +
"name": "readthroughsCollection",+
"type": { +
"kind": "NON_NULL", +
"name": null +
} +
} +
] +
} +
} +
}
(1 row)

rollback;
54 changes: 54 additions & 0 deletions test/sql/issue_542_partial_unique.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
begin;

create table public.works(
work_id int primary key
);

create table public.readthroughs (
readthrough_id int primary key,
work_id int not null references public.works(work_id),
status text not null
);

select jsonb_pretty(
graphql.resolve($$
{
__type(name: "Works") {
kind
fields {
name
type {
kind
name
}
}
}
}
$$)
);

/* Creating partial unique referencing status should NOT change the relationship with
the readthroughs to a non-null unique because its partial and other statuses may
have multiple associated readthroughs */
create unique index idx_unique_in_progress_readthrough
on public.readthroughs (work_id)
where status in ('in_progress');

select jsonb_pretty(
graphql.resolve($$
{
__type(name: "Works") {
kind
fields {
name
type {
kind
name
}
}
}
}
$$)
);

rollback;

0 comments on commit 0b1c39b

Please sign in to comment.