Re: dealing with extension dependencies that aren't quite 'e'

Поиск
Список
Период
Сортировка
От Abhijit Menon-Sen
Тема Re: dealing with extension dependencies that aren't quite 'e'
Дата
Msg-id 20160324171851.GA12244@toroid.org
обсуждение исходный текст
Ответ на Re: dealing with extension dependencies that aren't quite 'e'  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Ответы Re: dealing with extension dependencies that aren't quite 'e'  (Abhijit Menon-Sen <ams@2ndQuadrant.com>)
Список pgsql-hackers
At 2016-03-24 12:31:16 -0300, alvherre@2ndquadrant.com wrote:
>
> In other words I think the conclusion here is that we must use
> qualified_name in the new production rather than switching the old
> production to any_name.

Makes sense.

> I think I would like to see code implement both alternatives to see
> which one is least ugly.  Maybe a third idea will manifest itself upon
> seeing those.

Here's the first one. ExecAlterObjectDependsStmt() looks like this:

+ObjectAddress
+ExecAlterObjectDependsStmt(AlterObjectDependsStmt *stmt)
+{
+    ObjectAddress address;
+    ObjectAddress extAddr;
+    Relation    rel = NULL;
+
+    /*
+     * If the parser handed us a RangeVar, we add the relation's name to
+     * stmt->objname so that we can pass it to get_object_address().
+     */
+    if (stmt->relation)
+    {
+        stmt->objname = lcons(makeString(stmt->relation->relname), stmt->objname);
+        if (stmt->relation->schemaname)
+            stmt->objname = lcons(makeString(stmt->relation->schemaname), stmt->objname);
+        if (stmt->relation->catalogname)
+            stmt->objname = lcons(makeString(stmt->relation->catalogname), stmt->objname);
+    }
+
+    address = get_object_address(stmt->objectType, stmt->objname, stmt->objargs,
+                                 &rel, AccessExclusiveLock, false);
+
+    if (rel)
+        heap_close(rel, NoLock);
+
+    extAddr = get_object_address(OBJECT_EXTENSION, stmt->extname, NULL,
+                                 &rel, AccessExclusiveLock, false);
+
+    recordDependencyOn(&address, &extAddr, DEPENDENCY_AUTO_EXTENSION);
+
+    return address;
+}

(This works fine for both functions and triggers, I tested it.)

Complete patch attached for reference.

I'll post the get_object_address_rv() variant tomorrow, but comments are
welcome in the meantime.

-- Abhijit

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: Combining Aggregates
Следующее
От: Aleksey Demakov
Дата:
Сообщение: Re: Rationalizing code-sharing among src/bin/ directories