graphql-engine/server/src-rsr/catalog_metadata.sql
Tirumarai Selvan c0d2bc6653
Remote Joins: Create relationships across database and remote schemas (#2392)
add remote joins: Create relationships across database and remote schemas (#2392)

Co-authored-by: Aleksandra Sikora <ola.zxcvbnm@gmail.com>

Co-authored-by: Chris Done <chrisdone@gmail.com>
Co-authored-by: Chris Done <github@chrisdone.com>
Co-authored-by: wawhal <rishichandra.wawhal@gmail.com>
Co-authored-by: Aravind Shankar <aravind@hasura.io>
Co-authored-by: Brandon Simmons <brandon.m.simmons@gmail.com>
Co-authored-by: Rishichandra Wawhal <rishi@hasura.io>
Co-authored-by: Brandon Simmons <brandon@hasura.io>
Co-authored-by: nizar-m <19857260+nizar-m@users.noreply.github.com>
Co-authored-by: Praveen Durairaju <praveend.web@gmail.com>
Co-authored-by: rakeshkky <12475069+rakeshkky@users.noreply.github.com>
Co-authored-by: Anon Ray <rayanon004@gmail.com>
Co-authored-by: Shahidh K Muhammed <shahidh@hasura.io>
Co-authored-by: soorajshankar <soorajshankar@users.noreply.github.com>
Co-authored-by: Sooraj Sanker <sooraj@Soorajs-MacBook-Pro.local>
Co-authored-by: Karthikeyan Chinnakonda <karthikeyan@hasura.io>
Co-authored-by: Aleksandra Sikora <ola.zxcvbnm@gmail.com>
2020-05-27 20:32:58 +05:30

251 lines
6.9 KiB
SQL

select
json_build_object(
'tables', tables.items :: json,
'relations', relations.items,
'permissions', permissions.items,
'event_triggers', event_triggers.items,
'remote_schemas', remote_schemas.items,
'functions', functions.items,
'allowlist_collections', allowlist.item,
'computed_fields', computed_field.items,
'custom_types', custom_types.item,
'actions', actions.items,
'remote_relationships', remote_relationships.items,
'cron_triggers', cron_triggers.items
)
from
(
select
coalesce(jsonb_agg(
jsonb_build_object(
'name', jsonb_build_object(
'name', ht.table_name,
'schema', ht.table_schema
),
'is_enum', ht.is_enum,
'is_system_defined', ht.is_system_defined,
'configuration', ht.configuration,
'info', t.info
)
), '[]') as items
from hdb_catalog.hdb_table ht
left join hdb_catalog.hdb_table_info_agg t using (table_schema, table_name)
) as tables,
(
select
coalesce(
json_agg(
json_build_object(
'table',
json_build_object(
'schema', table_schema,
'name', table_name
),
'rel_name', rel_name,
'rel_type', rel_type,
'def', rel_def :: json,
'comment', comment
)
),
'[]'
) as items
from
hdb_catalog.hdb_relationship
) as relations,
(
select
coalesce(
json_agg(
json_build_object(
'table',
json_build_object(
'schema', table_schema,
'name', table_name
),
'role', role_name,
'perm_type', perm_type,
'def', perm_def :: json,
'comment', comment
)
),
'[]'
) as items
from
hdb_catalog.hdb_permission
) as permissions,
(
select
coalesce(
json_agg(
json_build_object(
'table',
json_build_object(
'schema', schema_name,
'name', table_name
),
'name', name,
'def', configuration :: json
)
),
'[]'
) as items
from
hdb_catalog.event_triggers
) as event_triggers,
(
select
coalesce(
json_agg(
json_build_object(
'name',
name,
'definition', definition :: json,
'comment', comment
)
),
'[]'
) as items
from
hdb_catalog.remote_schemas
) as remote_schemas,
(
select
coalesce(json_agg(q.info), '[]') as items
from
(
select
json_build_object(
'function',
json_build_object(
'schema', hf.function_schema,
'name', hf.function_name
),
'configuration', hf.configuration,
'is_system_defined', hf.is_system_defined,
'info', hf_agg.function_info
) as info
from
hdb_catalog.hdb_function hf
left join lateral
(
select coalesce(json_agg(function_info), '[]') as function_info
from hdb_catalog.hdb_function_info_agg
where function_name = hf.function_name
and function_schema = hf.function_schema
) hf_agg on 'true'
) as q
) as functions,
(
select
coalesce(json_agg(hqc.collection_defn), '[]') as item
from hdb_catalog.hdb_allowlist ha
left outer join
hdb_catalog.hdb_query_collection hqc
on (hqc.collection_name = ha.collection_name)
) as allowlist,
(
select
coalesce(json_agg(
json_build_object('computed_field', cc.computed_field,
'function_info', fi.function_info
)
), '[]') as items
from
(
select json_build_object(
'table', jsonb_build_object('name', hcc.table_name,'schema', hcc.table_schema),
'name', hcc.computed_field_name,
'definition', hcc.definition,
'comment', hcc.comment
) as computed_field,
hccf.function_name,
hccf.function_schema
from hdb_catalog.hdb_computed_field hcc
left outer join
hdb_catalog.hdb_computed_field_function hccf
on ( hcc.table_name = hccf.table_name
and hcc.table_schema = hccf.table_schema
and hcc.computed_field_name = hccf.computed_field_name
)
) cc
left join lateral
(
select coalesce(json_agg(function_info), '[]') as function_info
from hdb_catalog.hdb_function_info_agg
where function_name = cc.function_name and function_schema = cc.function_schema
) fi on 'true'
) as computed_field,
(
select
json_build_object(
'custom_types',
coalesce((select custom_types from hdb_catalog.hdb_custom_types), '{}'),
'pg_scalars', -- See Note [Postgres scalars in custom types]
coalesce((select json_agg(typname) from pg_catalog.pg_type where typtype = 'b'), '[]')
) as item
) as custom_types,
(
select
coalesce(
json_agg(
json_build_object(
'name', ha.action_name,
'definition', ha.action_defn :: json,
'comment', ha.comment,
'permissions', p.items
)
),
'[]'
) as items
from
hdb_catalog.hdb_action ha
left join lateral
(
select
coalesce(
json_agg(
json_build_object(
'action', hap.action_name,
'role', hap.role_name,
'comment', hap.comment
)
),
'[]'
) as items
from
hdb_catalog.hdb_action_permission hap
where hap.action_name = ha.action_name
) p on 'true'
) as actions,
(
select coalesce(json_agg(
json_build_object(
'name', remote_relationship_name,
'table', json_build_object('schema', table_schema, 'name', table_name),
'hasura_fields', definition -> 'hasura_fields',
'remote_schema', definition -> 'remote_schema',
'remote_field', definition -> 'remote_field'
)
),'[]') as items
from hdb_catalog.hdb_remote_relationship
) as remote_relationships,
(
select
coalesce(
json_agg(
json_build_object(
'name', name,
'webhook_conf', webhook_conf :: json,
'cron_schedule', cron_schedule,
'payload', payload :: json,
'retry_conf', retry_conf :: json,
'header_conf', header_conf :: json,
'comment', comment
)
),
'[]'
) as items
from
hdb_catalog.hdb_cron_triggers
) as cron_triggers