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);
+}
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly