Update caldav_functions.sql for Postgresql 10

From version 10, Postgresql does not allow set-returning functions in
CASE statements. As we're using the functions recursively, we cannot
use LATERAL as suggested in the error message, but we can switch the
condition inside-out with only a limited amount of repetition.
This commit is contained in:
Florian Schlichting 2017-10-03 22:36:29 +02:00
parent 6ad5511c1e
commit 39001794a3
2 changed files with 29 additions and 13 deletions

View File

@ -897,21 +897,37 @@ LANGUAGE plpgsql IMMUTABLE STRICT;
-- Expanded group memberships out to some depth
CREATE or REPLACE FUNCTION expand_memberships( INT8, INT ) RETURNS SETOF INT8 AS $$
SELECT group_id FROM group_member WHERE member_id = $1
UNION
SELECT expanded.g_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_memberships( group_id, $2 - 1) END AS g_id
FROM group_member WHERE member_id = $1) AS expanded
WHERE expanded.g_id IS NOT NULL;
$$ LANGUAGE sql STABLE STRICT;
BEGIN
IF $2 > 0 THEN
RETURN QUERY
SELECT group_id FROM group_member WHERE member_id = $1
UNION
SELECT expanded.g_id FROM (SELECT expand_memberships( group_id, $2 - 1) AS g_id
FROM group_member WHERE member_id = $1) AS expanded
WHERE expanded.g_id IS NOT NULL;
ELSE
RETURN QUERY
SELECT group_id FROM group_member WHERE member_id = $1;
END IF;
END
$$ LANGUAGE plpgsql IMMUTABLE STRICT;
-- Expanded group members out to some depth
CREATE or REPLACE FUNCTION expand_members( INT8, INT ) RETURNS SETOF INT8 AS $$
SELECT member_id FROM group_member WHERE group_id = $1
UNION
SELECT expanded.m_id FROM (SELECT CASE WHEN $2 > 0 THEN expand_members( member_id, $2 - 1) END AS m_id
FROM group_member WHERE group_id = $1) AS expanded
WHERE expanded.m_id IS NOT NULL;
$$ LANGUAGE sql STABLE STRICT;
BEGIN
IF $2 > 0 THEN
RETURN QUERY
SELECT member_id FROM group_member WHERE group_id = $1
UNION
SELECT expanded.m_id FROM (SELECT expand_members( member_id, $2 - 1) AS m_id
FROM group_member WHERE group_id = $1) AS expanded
WHERE expanded.m_id IS NOT NULL;
ELSE
RETURN QUERY
SELECT member_id FROM group_member WHERE group_id = $1;
END IF;
END
$$ LANGUAGE plpgsql IMMUTABLE STRICT;

View File

@ -1,4 +1,4 @@
The database is version 9.6 currently at revision 1.3.2.
The database is version 10.0 currently at revision 1.3.2.
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.