Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
240 changes: 209 additions & 31 deletions sql/components.sql

Large diffs are not rendered by default.

91 changes: 78 additions & 13 deletions sql/paths.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ create or replace function oas_build_paths(schemas text[])
returns jsonb language sql stable as
$$
select oas_build_path_item_root() ||
oas_build_path_items_from_tables(schemas);
oas_build_path_items_from_tables(schemas) ||
oas_build_path_items_from_functions(schemas);
$$;

create or replace function oas_build_path_items_from_tables(schemas text[])
Expand All @@ -19,7 +20,7 @@ from (
description := (postgrest_unfold_comment(table_description))[2],
tags := array[table_name],
parameters := jsonb_agg(
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_name, column_name))
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_full_name, column_name))
) ||
jsonb_build_array(
oas_build_reference_to_parameters('select'),
Expand All @@ -35,9 +36,9 @@ from (
),
responses := jsonb_build_object(
'200',
oas_build_reference_to_responses('notEmpty.' || table_name, 'OK'),
oas_build_reference_to_responses('notEmpty.' || table_full_name, 'OK'),
'206',
oas_build_reference_to_responses('notEmpty.' || table_name, 'Partial Content'),
oas_build_reference_to_responses('notEmpty.' || table_full_name, 'Partial Content'),
'default',
oas_build_reference_to_responses('defaultError', 'Error')
)
Expand All @@ -48,15 +49,15 @@ from (
summary := (postgrest_unfold_comment(table_description))[1],
description := (postgrest_unfold_comment(table_description))[2],
tags := array[table_name],
requestBody := oas_build_reference_to_request_bodies(table_name),
requestBody := oas_build_reference_to_request_bodies(table_full_name),
parameters := jsonb_build_array(
oas_build_reference_to_parameters('select'),
oas_build_reference_to_parameters('columns'),
oas_build_reference_to_parameters('preferPost')
),
responses := jsonb_build_object(
'201',
oas_build_reference_to_responses('mayBeEmpty.' || table_name, 'Created'),
oas_build_reference_to_responses('mayBeEmpty.' || table_full_name, 'Created'),
'default',
oas_build_reference_to_responses('defaultError', 'Error')
)
Expand All @@ -68,9 +69,9 @@ from (
summary := (postgrest_unfold_comment(table_description))[1],
description := (postgrest_unfold_comment(table_description))[2],
tags := array[table_name],
requestBody := oas_build_reference_to_request_bodies(table_name),
requestBody := oas_build_reference_to_request_bodies(table_full_name),
parameters := jsonb_agg(
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_name, column_name))
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_full_name, column_name))
) ||
jsonb_build_array(
oas_build_reference_to_parameters('select'),
Expand All @@ -85,7 +86,7 @@ from (
),
responses := jsonb_build_object(
'200',
oas_build_reference_to_responses('notEmpty.' || table_name, 'OK'),
oas_build_reference_to_responses('notEmpty.' || table_full_name, 'OK'),
'204',
oas_build_reference_to_responses('empty', 'No Content'),
'default',
Expand All @@ -100,7 +101,7 @@ from (
description := (postgrest_unfold_comment(table_description))[2],
tags := array[table_name],
parameters := jsonb_agg(
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_name, column_name))
oas_build_reference_to_parameters(format('rowFilter.%1$s.%2$s', table_full_name, column_name))
) ||
jsonb_build_array(
oas_build_reference_to_parameters('select'),
Expand All @@ -114,7 +115,7 @@ from (
),
responses := jsonb_build_object(
'200',
oas_build_reference_to_responses('notEmpty.' || table_name, 'OK'),
oas_build_reference_to_responses('notEmpty.' || table_full_name, 'OK'),
'204',
oas_build_reference_to_responses('empty', 'No Content'),
'default',
Expand All @@ -124,13 +125,77 @@ from (
end
) as oas_path_item
from (
select table_schema, table_name, table_description, insertable, updatable, deletable, column_name
select table_schema, table_name, table_full_name, table_description, insertable, updatable, deletable, column_name
from postgrest_get_all_tables_and_composite_types()
where table_schema = any(schemas)
and (is_table or is_view)
order by table_schema, table_name, column_position
) _
group by table_schema, table_name, table_description, insertable, updatable, deletable
group by table_schema, table_name, table_full_name, table_description, insertable, updatable, deletable
) x;
$$;

create or replace function oas_build_path_items_from_functions(schemas text[])
returns jsonb language sql stable as
$$
select jsonb_object_agg(x.path, x.oas_path_item)
from (
select '/rpc/' || function_name as path,
oas_path_item_object(
get :=oas_operation_object(
summary := (postgrest_unfold_comment(function_description))[1],
description := (postgrest_unfold_comment(function_description))[2],
tags := array['(rpc) ' || function_name],
parameters :=
coalesce(
jsonb_agg(
oas_build_reference_to_parameters(format('rpcParam.%1$s.%2$s', function_full_name, argument_name))
) filter ( where argument_name <> '' and (argument_is_in or argument_is_inout or argument_is_variadic)),
'[]'
) ||
case when return_type_is_table or return_type_is_out or return_type_composite_relid <> 0 then
jsonb_build_array(
oas_build_reference_to_parameters('select'),
oas_build_reference_to_parameters('order'),
oas_build_reference_to_parameters('limit'),
oas_build_reference_to_parameters('offset'),
oas_build_reference_to_parameters('or'),
oas_build_reference_to_parameters('and'),
oas_build_reference_to_parameters('not.or'),
oas_build_reference_to_parameters('not.and'),
oas_build_reference_to_parameters('range'),
oas_build_reference_to_parameters('preferGet')
)
else
jsonb_build_array(
oas_build_reference_to_parameters('preferGet')
)
end,
responses :=
case when return_type_is_set then
jsonb_build_object(
'200',
oas_build_reference_to_responses('rpc.' || function_full_name, 'OK'),
'206',
oas_build_reference_to_responses('rpc.' || function_full_name, 'Partial Content')
)
else
jsonb_build_object(
'200',
oas_build_reference_to_responses('rpc.' || function_full_name, 'OK')
)
end ||
jsonb_build_object(
'default',
oas_build_reference_to_responses('defaultError', 'Error')
)
)
) as oas_path_item
from (
select function_name, function_full_name, function_description, return_type_name, return_type_is_set, return_type_is_table, return_type_is_out, return_type_composite_relid, argument_name, argument_is_in, argument_is_inout, argument_is_variadic
from postgrest_get_all_functions(schemas)
) _
group by function_name, function_full_name, function_description, return_type_name, return_type_is_set, return_type_is_table, return_type_is_out, return_type_composite_relid
) x;
$$;

Expand Down
Loading
Loading