]> granicus.if.org Git - postgresql/commit
Fix multiple bugs in extension dropping.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Aug 2011 17:09:06 +0000 (13:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Aug 2011 17:09:06 +0000 (13:09 -0400)
commitcb5c2ba2d82688d29b5902d86b993a54355cad4d
treeab8202b815090dd170770a08d68729a43906885c
parentd4aa491493e6cfa7542d16deba4018c2fd7af9fd
Fix multiple bugs in extension dropping.

When we implemented extensions, we made findDependentObjects() treat
EXTENSION dependency links similarly to INTERNAL links.  However, that
logic contained an implicit assumption that an object could have at most
one INTERNAL dependency, so it did not work correctly for objects having
both INTERNAL and DEPENDENCY links.  This led to failure to drop some
extension member objects when dropping the extension.  Furthermore, we'd
never actually exercised the case of recursing to an internally-referenced
(owning) object from anything other than a NORMAL dependency, and it turns
out that passing the incoming dependency's flags to the owning object is
the Wrong Thing.  This led to sometimes dropping a whole extension silently
when we should have rejected the drop command for lack of CASCADE.

Since we obviously were under-testing extension drop scenarios, add some
regression test cases.  Unfortunately, such test cases require some
extensions (duh), so we can't test for problems in the core regression
tests.  I chose to add them to the earthdistance contrib module, which is
a good test case because it has a dependency on the cube contrib module.

Back-patch to 9.1.  Arguably these are pre-existing bugs in INTERNAL
dependency handling, but since it appears that the cases can never arise
pre-9.1, I'll refrain from back-patching the logic changes further than
that.
contrib/earthdistance/expected/earthdistance.out
contrib/earthdistance/sql/earthdistance.sql
src/backend/catalog/dependency.c