Enable/disable trigger path

Поиск
Список
Период
Сортировка
От Guillaume Lelarge
Тема Enable/disable trigger path
Дата
Msg-id 45AC8767.4050508@lelarge.info
обсуждение исходный текст
Ответы Re: Enable/disable trigger path  (Dave Page <dpage@postgresql.org>)
Список pgadmin-hackers
Hi all,

Here is my first patch to support enable/disable trigger. This
functionnality is available since release 8.1 of PostgreSQL. Im' not
really happy with my code. I have some code to enable a trigger and some
code to disable it. I think it would be better to merge them since they
are pretty close. For example, I use two menus (Enable trigger and
Disable trigger). It would be better to use just one but I don't know
what to do :
 * rename the menu's title
 * use a checked menu.

Or perhaps two menus are just fine. Any advice on this ?

Also, I would like to add enable/disable all triggers but I don't know
where I should put the menu item : on the table name's contextual menu ?
on the "Triggers" contextual menu ?

Thanks for any tips on this matter.

Regards.


--
Guillaume.
<!-- http://abs.traduc.org/
     http://lfs.traduc.org/
     http://docs.postgresqlfr.org/ -->
Index: pgadmin/include/schema/pgTrigger.h
===================================================================
--- pgadmin/include/schema/pgTrigger.h    (révision 5866)
+++ pgadmin/include/schema/pgTrigger.h    (copie de travail)
@@ -57,6 +57,8 @@
     bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
     wxString GetSql(ctlTree *browser);
     pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
+    bool EnableTrigger();
+    bool DisableTrigger();

     bool HasStats() { return false; }
     bool HasDepends() { return true; }
Index: pgadmin/include/dlg/dlgTrigger.h
===================================================================
--- pgadmin/include/dlg/dlgTrigger.h    (révision 5866)
+++ pgadmin/include/dlg/dlgTrigger.h    (copie de travail)
@@ -39,4 +39,21 @@
 };


+class enableTriggerFactory : public contextActionFactory
+{
+public:
+    enableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar);
+    wxWindow *StartDialog(frmMain *form, pgObject *obj);
+    bool CheckEnable(pgObject *obj);
+};
+
+
+class disableTriggerFactory : public contextActionFactory
+{
+public:
+    disableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar);
+    wxWindow *StartDialog(frmMain *form, pgObject *obj);
+    bool CheckEnable(pgObject *obj);
+};
+
 #endif
Index: pgadmin/frm/frmMain.cpp
===================================================================
--- pgadmin/frm/frmMain.cpp    (révision 5866)
+++ pgadmin/frm/frmMain.cpp    (copie de travail)
@@ -63,6 +63,7 @@
 #include "dlg/dlgServer.h"
 #include "dlg/dlgDatabase.h"
 #include "dlg/dlgTable.h"
+#include "dlg/dlgTrigger.h"
 #include "dlg/dlgServer.h"
 #include "slony/dlgRepCluster.h"
 #include "slony/dlgRepSet.h"
@@ -258,6 +259,8 @@
     actionFactory *refFact=new refreshFactory(menuFactories, viewMenu, toolBar);
     new countRowsFactory(menuFactories, viewMenu, 0);
     new executePgstattupleFactory(menuFactories, viewMenu, 0);
+    new enableTriggerFactory(menuFactories, viewMenu, 0);
+    new disableTriggerFactory(menuFactories, viewMenu, 0);


     //--------------------------
Index: pgadmin/schema/pgTrigger.cpp
===================================================================
--- pgadmin/schema/pgTrigger.cpp    (révision 5866)
+++ pgadmin/schema/pgTrigger.cpp    (copie de travail)
@@ -48,6 +48,20 @@
 }


+bool pgTrigger::EnableTrigger()
+{
+    wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" ENABLE TRIGGER ") + GetQuotedIdentifier();
+    return GetDatabase()->ExecuteVoid(sql);
+}
+
+
+bool pgTrigger::DisableTrigger()
+{
+    wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" DISABLE TRIGGER ") + GetQuotedIdentifier();
+    return GetDatabase()->ExecuteVoid(sql);
+}
+
+
 void pgTrigger::SetDirty()
 {
     if (expandedKids)
Index: pgadmin/dlg/dlgTrigger.cpp
===================================================================
--- pgadmin/dlg/dlgTrigger.cpp    (révision 5866)
+++ pgadmin/dlg/dlgTrigger.cpp    (copie de travail)
@@ -15,6 +15,7 @@
 // App headers
 #include "pgAdmin3.h"
 #include "utils/misc.h"
+#include "frm/frmMain.h"
 #include "utils/pgDefs.h"

 #include "dlg/dlgTrigger.h"
@@ -208,3 +209,58 @@
         EnableOK(enable);
     }
 }
+
+enableTriggerFactory::enableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar) :
contextActionFactory(list)
+{
+    mnu->Append(id, _("&Enable trigger"), _("Enable trigger."));
+}
+
+
+wxWindow *enableTriggerFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+    if (((pgTrigger*)obj)->EnableTrigger())
+        ((pgTrigger*)obj)->iSetEnabled(true);
+
+    wxTreeItemId item=form->GetBrowser()->GetSelection();
+    {
+        obj->ShowTreeDetail(form->GetBrowser(), 0, form->GetProperties());
+        form->GetMenuFactories()->CheckMenu(obj, form->GetMenuBar(), form->GetToolBar());
+    }
+
+    return 0;
+}
+
+
+bool enableTriggerFactory::CheckEnable(pgObject *obj)
+{
+    return obj && obj->IsCreatedBy(triggerFactory) && ! ((pgTrigger*)obj)->GetEnabled()
+               && ((pgTrigger*)obj)->GetConnection()->BackendMinimumVersion(8, 1);
+}
+
+disableTriggerFactory::disableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar) :
contextActionFactory(list)
+{
+    mnu->Append(id, _("&Disable trigger"), _("Disable trigger."));
+}
+
+
+wxWindow *disableTriggerFactory::StartDialog(frmMain *form, pgObject *obj)
+{
+    if (((pgTrigger*)obj)->DisableTrigger())
+        ((pgTrigger*)obj)->iSetEnabled(false);
+
+    wxTreeItemId item=form->GetBrowser()->GetSelection();
+    if (obj == form->GetBrowser()->GetObject(item))
+    {
+        obj->ShowTreeDetail(form->GetBrowser(), 0, form->GetProperties());
+        form->GetMenuFactories()->CheckMenu(obj, form->GetMenuBar(), form->GetToolBar());
+    }
+
+    return 0;
+}
+
+
+bool disableTriggerFactory::CheckEnable(pgObject *obj)
+{
+    return obj && obj->IsCreatedBy(triggerFactory) && ((pgTrigger*)obj)->GetEnabled()
+               && ((pgTrigger*)obj)->GetConnection()->BackendMinimumVersion(8, 1);
+}

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

Предыдущее
От: svn@pgadmin.org
Дата:
Сообщение: SVN Commit by guillaume: r5868 - trunk/www/development
Следующее
От: Dave Page
Дата:
Сообщение: Re: Enable/disable trigger path