refactor: clean allM2ORels query
* remove unnecessary lateral usage * use alias for pg_constraint
This commit is contained in:
committed by
Steve Chavez
parent
d6ec171bcb
commit
36c24d9cbe
@@ -639,28 +639,31 @@ allM2ORels pgVer =
|
|||||||
SQL.Statement sql HE.noParams decodeRels
|
SQL.Statement sql HE.noParams decodeRels
|
||||||
where
|
where
|
||||||
sql = [q|
|
sql = [q|
|
||||||
SELECT ns1.nspname AS table_schema,
|
SELECT
|
||||||
tab.relname AS table_name,
|
ns1.nspname AS table_schema,
|
||||||
ns2.nspname AS foreign_table_schema,
|
tab.relname AS table_name,
|
||||||
other.relname AS foreign_table_name,
|
ns2.nspname AS foreign_table_schema,
|
||||||
(ns1.nspname, tab.relname) = (ns2.nspname, other.relname) AS is_self,
|
other.relname AS foreign_table_name,
|
||||||
conname AS constraint_name,
|
(ns1.nspname, tab.relname) = (ns2.nspname, other.relname) AS is_self,
|
||||||
column_info.cols AS columns
|
traint.conname AS constraint_name,
|
||||||
FROM pg_constraint,
|
column_info.cols_and_fcols
|
||||||
LATERAL (
|
FROM pg_constraint traint
|
||||||
SELECT array_agg(row(cols.attname, refs.attname) order by cols.attnum) AS cols
|
JOIN LATERAL (
|
||||||
FROM ( SELECT unnest(conkey) AS col, unnest(confkey) AS ref) k,
|
SELECT array_agg(row(cols.attname, refs.attname) order by cols.attnum) AS cols_and_fcols
|
||||||
LATERAL (SELECT * FROM pg_attribute WHERE attrelid = conrelid AND attnum = col) AS cols,
|
FROM ( SELECT unnest(traint.conkey) AS col, unnest(traint.confkey) AS ref) _
|
||||||
LATERAL (SELECT * FROM pg_attribute WHERE attrelid = confrelid AND attnum = ref) AS refs) AS column_info,
|
JOIN pg_attribute cols ON cols.attrelid = traint.conrelid AND cols.attnum = col
|
||||||
LATERAL (SELECT * FROM pg_namespace WHERE pg_namespace.oid = connamespace) AS ns1,
|
JOIN pg_attribute refs ON refs.attrelid = traint.confrelid AND refs.attnum = ref
|
||||||
LATERAL (SELECT * FROM pg_class WHERE pg_class.oid = conrelid) AS tab,
|
) AS column_info ON TRUE
|
||||||
LATERAL (SELECT * FROM pg_class WHERE pg_class.oid = confrelid) AS other,
|
JOIN pg_namespace ns1 ON ns1.oid = traint.connamespace
|
||||||
LATERAL (SELECT * FROM pg_namespace WHERE pg_namespace.oid = other.relnamespace) AS ns2
|
JOIN pg_class tab ON tab.oid = traint.conrelid
|
||||||
WHERE contype = 'f'|] <>
|
JOIN pg_class other ON other.oid = traint.confrelid
|
||||||
|
JOIN pg_namespace ns2 ON ns2.oid = other.relnamespace
|
||||||
|
WHERE traint.contype = 'f'
|
||||||
|
|] <>
|
||||||
(if pgVer >= pgVersion110
|
(if pgVer >= pgVersion110
|
||||||
then " and conparentid = 0 "
|
then " and traint.conparentid = 0 "
|
||||||
else mempty) <>
|
else mempty) <>
|
||||||
"ORDER BY conrelid, conname"
|
"ORDER BY traint.conrelid, traint.conname"
|
||||||
|
|
||||||
allComputedRels :: Bool -> SQL.Statement () [Relationship]
|
allComputedRels :: Bool -> SQL.Statement () [Relationship]
|
||||||
allComputedRels =
|
allComputedRels =
|
||||||
|
|||||||
Reference in New Issue
Block a user