Add support for user functions (#608)
* Add initial support for functions * Show functions definitions * Fix client tests * Fix schema objects search * Perform partial matching for functions * Add function test * Make sure to close client connections so that database could be dropped in tests * Fix lint * Allow to copy the view/functions definitions * Nits
This commit is contained in:
7
pkg/statements/sql/function.sql
Normal file
7
pkg/statements/sql/function.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
SELECT
|
||||
p.*,
|
||||
pg_get_functiondef(oid) AS functiondef
|
||||
FROM
|
||||
pg_catalog.pg_proc p
|
||||
WHERE
|
||||
oid = $1::oid
|
||||
@@ -1,25 +1,46 @@
|
||||
SELECT
|
||||
n.nspname AS schema,
|
||||
c.relname AS name,
|
||||
CASE c.relkind
|
||||
WHEN 'r' THEN 'table'
|
||||
WHEN 'v' THEN 'view'
|
||||
WHEN 'm' THEN 'materialized_view'
|
||||
WHEN 'i' THEN 'index'
|
||||
WHEN 'S' THEN 'sequence'
|
||||
WHEN 's' THEN 'special'
|
||||
WHEN 'f' THEN 'foreign_table'
|
||||
END AS type,
|
||||
pg_catalog.pg_get_userbyid(c.relowner) AS owner,
|
||||
pg_catalog.obj_description(c.oid) AS comment
|
||||
FROM
|
||||
pg_catalog.pg_class c
|
||||
LEFT JOIN
|
||||
pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
||||
WHERE
|
||||
c.relkind IN ('r','v','m','S','s','')
|
||||
AND n.nspname !~ '^pg_toast'
|
||||
AND n.nspname NOT IN ('information_schema', 'pg_catalog')
|
||||
AND has_schema_privilege(n.nspname, 'USAGE')
|
||||
ORDER BY
|
||||
1, 2
|
||||
WITH all_objects AS (
|
||||
SELECT
|
||||
c.oid,
|
||||
n.nspname AS schema,
|
||||
c.relname AS name,
|
||||
CASE c.relkind
|
||||
WHEN 'r' THEN 'table'
|
||||
WHEN 'v' THEN 'view'
|
||||
WHEN 'm' THEN 'materialized_view'
|
||||
WHEN 'i' THEN 'index'
|
||||
WHEN 'S' THEN 'sequence'
|
||||
WHEN 's' THEN 'special'
|
||||
WHEN 'f' THEN 'foreign_table'
|
||||
END AS type,
|
||||
pg_catalog.pg_get_userbyid(c.relowner) AS owner,
|
||||
pg_catalog.obj_description(c.oid) AS comment
|
||||
FROM
|
||||
pg_catalog.pg_class c
|
||||
LEFT JOIN
|
||||
pg_catalog.pg_namespace n ON n.oid = c.relnamespace
|
||||
WHERE
|
||||
c.relkind IN ('r','v','m','S','s','')
|
||||
AND n.nspname !~ '^pg_toast'
|
||||
AND n.nspname NOT IN ('information_schema', 'pg_catalog')
|
||||
AND has_schema_privilege(n.nspname, 'USAGE')
|
||||
|
||||
UNION
|
||||
|
||||
SELECT
|
||||
p.oid,
|
||||
n.nspname AS schema,
|
||||
p.proname AS name,
|
||||
'function' AS function,
|
||||
pg_catalog.pg_get_userbyid(p.proowner) AS owner,
|
||||
NULL AS comment
|
||||
FROM
|
||||
pg_catalog.pg_namespace n
|
||||
JOIN
|
||||
pg_catalog.pg_proc p ON p.pronamespace = n.oid
|
||||
WHERE
|
||||
n.nspname !~ '^pg_toast'
|
||||
AND n.nspname NOT IN ('information_schema', 'pg_catalog')
|
||||
AND p.prokind = 'f'
|
||||
)
|
||||
SELECT * FROM all_objects
|
||||
ORDER BY 1, 2
|
||||
|
||||
Reference in New Issue
Block a user