mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-16 09:51:59 +03:00
204cd3514b
1. Reuses postgres connections during startup which reduces the overhead of opening and closing connections. 2. Faster schema cache building. This is done by fetching all the required data in a single sql statement.
111 lines
2.9 KiB
SQL
111 lines
2.9 KiB
SQL
CREATE OR REPLACE VIEW hdb_catalog.hdb_table_info_agg AS (
|
|
select
|
|
tables.table_name as table_name,
|
|
tables.table_schema as table_schema,
|
|
coalesce(columns.columns, '[]') as columns,
|
|
coalesce(pk.columns, '[]') as primary_key_columns,
|
|
coalesce(constraints.constraints, '[]') as constraints,
|
|
coalesce(views.view_info, 'null') as view_info
|
|
from
|
|
information_schema.tables as tables
|
|
left outer join (
|
|
select
|
|
c.table_name,
|
|
c.table_schema,
|
|
json_agg(
|
|
json_build_object(
|
|
'name',
|
|
column_name,
|
|
'type',
|
|
udt_name,
|
|
'is_nullable',
|
|
is_nullable :: boolean
|
|
)
|
|
) as columns
|
|
from
|
|
information_schema.columns c
|
|
group by
|
|
c.table_schema,
|
|
c.table_name
|
|
) columns on (
|
|
tables.table_schema = columns.table_schema
|
|
AND tables.table_name = columns.table_name
|
|
)
|
|
left outer join (
|
|
select * from hdb_catalog.hdb_primary_key
|
|
) pk on (
|
|
tables.table_schema = pk.table_schema
|
|
AND tables.table_name = pk.table_name
|
|
)
|
|
left outer join (
|
|
select
|
|
c.table_schema,
|
|
c.table_name,
|
|
json_agg(constraint_name) as constraints
|
|
from
|
|
information_schema.table_constraints c
|
|
where
|
|
c.constraint_type = 'UNIQUE'
|
|
or c.constraint_type = 'PRIMARY KEY'
|
|
group by
|
|
c.table_schema,
|
|
c.table_name
|
|
) constraints on (
|
|
tables.table_schema = constraints.table_schema
|
|
AND tables.table_name = constraints.table_name
|
|
)
|
|
left outer join (
|
|
select
|
|
table_schema,
|
|
table_name,
|
|
json_build_object(
|
|
'is_updatable',
|
|
(is_updatable::boolean OR is_trigger_updatable::boolean),
|
|
'is_deletable',
|
|
(is_updatable::boolean OR is_trigger_deletable::boolean),
|
|
'is_insertable',
|
|
(is_insertable_into::boolean OR is_trigger_insertable_into::boolean)
|
|
) as view_info
|
|
from
|
|
information_schema.views v
|
|
) views on (
|
|
tables.table_schema = views.table_schema
|
|
AND tables.table_name = views.table_name
|
|
)
|
|
);
|
|
|
|
CREATE OR REPLACE VIEW hdb_catalog.hdb_function_info_agg AS (
|
|
SELECT
|
|
function_name,
|
|
function_schema,
|
|
row_to_json (
|
|
(
|
|
SELECT
|
|
e
|
|
FROM
|
|
(
|
|
SELECT
|
|
has_variadic,
|
|
function_type,
|
|
return_type_schema,
|
|
return_type_name,
|
|
return_type_type,
|
|
returns_set,
|
|
input_arg_types,
|
|
input_arg_names,
|
|
exists(
|
|
SELECT
|
|
1
|
|
FROM
|
|
information_schema.tables
|
|
WHERE
|
|
table_schema = return_type_schema
|
|
AND table_name = return_type_name
|
|
) AS returns_table
|
|
) AS e
|
|
)
|
|
) AS "function_info"
|
|
FROM
|
|
hdb_catalog.hdb_function_agg
|
|
);
|