refactor: clean allM2ORels query

* remove unnecessary lateral usage
* use alias for pg_constraint
This commit is contained in:
steve-chavez
2022-08-18 15:08:14 -05:00
committed by Steve Chavez
parent d6ec171bcb
commit 36c24d9cbe
+23 -20
View File
@@ -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 =