Index: pgadmin/include/schema/pgTable.h =================================================================== --- pgadmin/include/schema/pgTable.h (révision 5875) +++ pgadmin/include/schema/pgTable.h (copie de travail) @@ -78,6 +78,8 @@ void iSetHasSubclass(bool b) { hasSubclass = b; } void iSetIsReplicated(bool b) { isReplicated = b; } bool GetIsReplicated() const { return isReplicated; } + bool GetAllTriggersEnabled(); + void iSetAllTriggersEnabled(const bool b); void UpdateRows(); bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded); bool CanView() { return true; } @@ -110,7 +112,7 @@ void AppendStuff(wxString &sql, ctlTree *browser, pgaFactory &factory); wxULongLong rows; double estimatedRows; - bool hasOids, hasSubclass, rowsCounted, isReplicated, showExtendedStatistics; + bool hasOids, hasSubclass, rowsCounted, isReplicated, showExtendedStatistics, allTriggersEnabled; long inheritedTableCount; wxString quotedInheritedTables, inheritedTables, primaryKey, quotedPrimaryKey, primaryKeyName, primaryKeyColNumbers, tablespace; Index: pgadmin/include/schema/pgTrigger.h =================================================================== --- pgadmin/include/schema/pgTrigger.h (révision 5875) +++ pgadmin/include/schema/pgTrigger.h (copie de travail) @@ -45,7 +45,7 @@ long GetTriggerType() const {return triggerType; } void iSetTriggerType(const long l) { triggerType=l; } bool GetEnabled() const { return enabled; } - void iSetEnabled(const bool b) {enabled=b; } + void iSetEnabled(const bool b); void iSetTriggerFunction(pgFunction *fkt) { triggerFunction=fkt; } wxString GetQuotedFullTable() const { return quotedFullTable; } void iSetQuotedFullTable(const wxString &s) { quotedFullTable=s; } Index: pgadmin/include/dlg/dlgTrigger.h =================================================================== --- pgadmin/include/dlg/dlgTrigger.h (révision 5875) +++ pgadmin/include/dlg/dlgTrigger.h (copie de travail) @@ -39,4 +39,14 @@ }; +class enabledisableTriggerFactory : public contextActionFactory +{ +public: + enabledisableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar); + wxWindow *StartDialog(frmMain *form, pgObject *obj); + bool CheckEnable(pgObject *obj); + bool CheckChecked(pgObject *obj); +}; + + #endif Index: pgadmin/include/dlg/dlgTable.h =================================================================== --- pgadmin/include/dlg/dlgTable.h (révision 5875) +++ pgadmin/include/dlg/dlgTable.h (copie de travail) @@ -92,4 +92,15 @@ bool CheckChecked(pgObject *obj); }; + +class enabledisableAllTriggersFactory : public contextActionFactory +{ +public: + enabledisableAllTriggersFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar); + wxWindow *StartDialog(frmMain *form, pgObject *obj); + bool CheckEnable(pgObject *obj); + bool CheckChecked(pgObject *obj); +}; + + #endif Index: pgadmin/frm/frmMain.cpp =================================================================== --- pgadmin/frm/frmMain.cpp (révision 5875) +++ 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,8 +259,10 @@ actionFactory *refFact=new refreshFactory(menuFactories, viewMenu, toolBar); new countRowsFactory(menuFactories, viewMenu, 0); new executePgstattupleFactory(menuFactories, viewMenu, 0); + new enabledisableTriggerFactory(menuFactories, viewMenu, 0); + new enabledisableAllTriggersFactory(menuFactories, viewMenu, 0); - + //-------------------------- new separatorFactory(menuFactories); Index: pgadmin/schema/pgTable.cpp =================================================================== --- pgadmin/schema/pgTable.cpp (révision 5875) +++ pgadmin/schema/pgTable.cpp (copie de travail) @@ -408,6 +408,30 @@ } +void pgTable::iSetAllTriggersEnabled(const bool b) +{ + if (((allTriggersEnabled && !b) || (!allTriggersEnabled && b))) + { + wxString sql = wxT("ALTER TABLE ") + GetQuotedFullIdentifier() + wxT(" "); + if (allTriggersEnabled && !b) + sql += wxT("DISABLE"); + else if (!allTriggersEnabled && b) + sql += wxT("ENABLE"); + sql += wxT(" TRIGGER ALL"); +printf((sql + wxT("\n")).ToAscii()); + GetDatabase()->ExecuteVoid(sql); + } + + allTriggersEnabled=b; +} + + +bool pgTable::GetAllTriggersEnabled() +{ + return allTriggersEnabled; +} + + void pgTable::UpdateRows() { pgSet *props = ExecuteSet(wxT("SELECT count(*) AS rows FROM ONLY ") + GetQuotedFullIdentifier()); Index: pgadmin/schema/pgTrigger.cpp =================================================================== --- pgadmin/schema/pgTrigger.cpp (révision 5875) +++ pgadmin/schema/pgTrigger.cpp (copie de travail) @@ -48,6 +48,23 @@ } +void pgTrigger::iSetEnabled(const bool b) +{ + if (GetQuotedFullTable().Len() > 0 && ((enabled && !b) || (!enabled && b))) + { + wxString sql = wxT("ALTER TABLE ") + GetQuotedFullTable() + wxT(" "); + if (enabled && !b) + sql += wxT("DISABLE"); + else if (!enabled && b) + sql += wxT("ENABLE"); + sql += wxT(" TRIGGER ") + GetQuotedIdentifier(); + GetDatabase()->ExecuteVoid(sql); + } + + enabled=b; +} + + void pgTrigger::SetDirty() { if (expandedKids) Index: pgadmin/dlg/dlgTable.cpp =================================================================== --- pgadmin/dlg/dlgTable.cpp (révision 5875) +++ pgadmin/dlg/dlgTable.cpp (copie de travail) @@ -1205,4 +1205,34 @@ bool executePgstattupleFactory::CheckChecked(pgObject *obj) { return obj && ((pgTable*)obj)->GetShowExtendedStatistics(); -} \ Pas de fin de ligne à la fin du fichier +} + +enabledisableAllTriggersFactory::enabledisableAllTriggersFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar) : contextActionFactory(list) +{ + mnu->Append(id, _("All table's triggers enabled?"), _("Enable or disable all triggers on selected table."), wxITEM_CHECK); +} + + +wxWindow *enabledisableAllTriggersFactory::StartDialog(frmMain *form, pgObject *obj) +{ + ((pgTable*)obj)->iSetAllTriggersEnabled(!((pgTable*)obj)->GetAllTriggersEnabled()); + + 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 enabledisableAllTriggersFactory::CheckEnable(pgObject *obj) +{ + return obj && obj->IsCreatedBy(tableFactory) + && ((pgTable*)obj)->GetConnection()->BackendMinimumVersion(8, 1); +} + +bool enabledisableAllTriggersFactory::CheckChecked(pgObject *obj) +{ + return obj && obj->IsCreatedBy(tableFactory) && ((pgTable*)obj)->GetAllTriggersEnabled(); +} Index: pgadmin/dlg/dlgTrigger.cpp =================================================================== --- pgadmin/dlg/dlgTrigger.cpp (révision 5875) +++ 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,34 @@ EnableOK(enable); } } + + +enabledisableTriggerFactory::enabledisableTriggerFactory(menuFactoryList *list, wxMenu *mnu, wxToolBar *toolbar) : contextActionFactory(list) +{ + mnu->Append(id, _("Trigger enabled?"), _("Enable or disable selected trigger."), wxITEM_CHECK); +} + + +wxWindow *enabledisableTriggerFactory::StartDialog(frmMain *form, pgObject *obj) +{ + ((pgTrigger*)obj)->iSetEnabled(!((pgTrigger*)obj)->GetEnabled()); + + 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 enabledisableTriggerFactory::CheckEnable(pgObject *obj) +{ + return obj && obj->IsCreatedBy(triggerFactory) + && ((pgTrigger*)obj)->GetConnection()->BackendMinimumVersion(8, 1); +} + +bool enabledisableTriggerFactory::CheckChecked(pgObject *obj) +{ + return obj && obj->IsCreatedBy(triggerFactory) && ((pgTrigger*)obj)->GetEnabled(); +}