🐥
supabase + GraphQL の String 検索で like を使えるようにする
supabase はそのままだと GraphQL の filter で like が使えない
RestAPI には存在しているのですが、GraphQL には like 演算子が存在していません。そのままだと無理です。
機能を追加する
無いものは仕方がないので作ります。
以下の SQL を実行すると GraphQL のスキーマに like が出現します。
create or replace function graphql.text_to_comparison_op(text)
returns graphql.comparison_op
language sql
immutable
as
$$
select
case $1
when 'eq' then '='
when 'lt' then '<'
when 'lte' then '<='
when 'neq' then '<>'
when 'gte' then '>='
when 'gt' then '>'
when 'like' then 'like'
else graphql.exception('Invalid comaprison operator')
end::graphql.comparison_op
$$;
insert into graphql._field(parent_type_id, type_id, constant_name, is_not_null, is_array, description)
select
gt.id as parent_type_id,
gt.graphql_type_id type_id,
ops.constant_name as constant_name,
false,
false,
null::text as description
from
graphql.type gt
join (
values
('like')
) ops(constant_name)
on true
where
gt.meta_kind = 'FilterType'
and gt.graphql_type_id = graphql.type_id('String');
alter type graphql.comparison_op add value 'like';
ApolloStudio でスキーマの確認
以下、きちんと追加されています
まとめ
supabase で GraphQL を使っている人は少なそうですが、困っている同士の助けになれば幸いです。
Discussion