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