////////////////////////////////////////////////////////////////////////// // // pgAdmin III - PostgreSQL Tools // RCS-ID: $Id: $ // Copyright (C) 2002 - 2009, The pgAdmin Development Team // This software is released under the Artistic Licence // // pgResQueue.cpp - Greenplum Resource Queue // ////////////////////////////////////////////////////////////////////////// // wxWindows headers #include #include // App headers #include "pgAdmin3.h" #include "utils/misc.h" #include "schema/pgResQueue.h" #include "frm/frmMain.h" #include "utils/pgDefs.h" #include "schema/pgDatabase.h" pgResQueue::pgResQueue(pgaFactory &factory, const wxString& newName) : pgServerObject(factory, newName) { } pgResQueue::pgResQueue(const wxString& newName) : pgServerObject(resQueueFactory, newName) { } int pgResQueue::GetIconId() { return resQueueFactory.GetIconId(); } bool pgResQueue::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded) { return server->ExecuteVoid(wxT("DROP RESOURCE QUEUE ") + GetQuotedFullIdentifier() + wxT(";")); } wxString pgResQueue::GetSql(ctlTree *browser) { if (sql.IsNull()) { sql = wxT("-- Resource Queue: \"") + GetName() + wxT("\"\n\n") + wxT("-- DROP RESOURCE QUEUE ") + GetQuotedFullIdentifier() + wxT(";") + wxT("\n\nCREATE RESOURCE QUEUE ") + GetQuotedIdentifier(); if (GetCountLimit() != -1.0) { sql += wxT(" ACTIVE THRESHOLD "); sql += NumToStr(GetCountLimit()); } if (GetCostLimit() != -1.0) { sql += wxT(" COST THRESHOLD "); sql += GetCostLimit(); sql += NumToStr(GetCostLimit()); } if (GetIgnoreCostLimit() != 0.0) { sql += wxT(" IGNORE THRESHOLD "); sql += GetIgnoreCostLimit(); sql += NumToStr(GetIgnoreCostLimit()); } if (GetOvercommit()) sql += wxT(" OVERCOMMIT"); else sql += wxT(" NOOVERCOMMIT"); } return sql; } void pgResQueue::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { if (!expandedKids) { expandedKids=true; wxString queuesquery; queuesquery = wxT("SELECT rolname,\n") wxT(" pg_catalog.shobj_description(r.oid, 'pg_authid') AS description\n"); queuesquery += wxT(" FROM pg_roles r\n") wxT(" JOIN pg_resqueue q ON rolresqueue=q.oid\n") wxT(" WHERE rolresqueue=") + GetOidStr() + wxT("\n") wxT(" ORDER BY rolname"); pgSetIterator queues(GetConnection(), queuesquery); while (queues.RowsLeft()) { wxString queue=queues.GetVal(wxT("rolname")); queuesIn.Add(queue); } } if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("OID"), GetOid()); properties->AppendItem(_("Comment"), firstLineOnly(GetComment())); wxString roleList; size_t index; for (index=0 ; index < queuesIn.GetCount() ; index++) { if (!roleList.IsEmpty()) roleList += wxT(", "); roleList += queuesIn.Item(index); } properties->AppendItem(_("Roles Using this"), roleList); } } pgObject *pgResQueue::Refresh(ctlTree *browser, const wxTreeItemId item) { pgObject *queue=0; pgCollection *coll=browser->GetParentCollection(item); if (coll) queue = resQueueFactory.CreateObjects(coll, 0, wxT("\n WHERE oid=") + GetOidStr()); return queue; } pgObject *pgResQueueFactory::CreateObjects(pgCollection *collection, ctlTree *browser, const wxString &restriction) { pgResQueue *queue=0; pgSet *queues=0; queues = collection->GetServer()->ExecuteSet(wxT("SELECT rsqname, rsqcountlimit, rsqcostlimit, rsqovercommit, rsqignorecostlimit, oid FROM pg_resqueue ORDER BY 1")); if (queues) { while (!queues->Eof()) { queue = new pgResQueue(queues->GetVal(wxT("rsqname"))); queue->iSetServer(collection->GetServer()); queue->iSetCountLimit(queues->GetDouble(wxT("rsqcountlimit"))); queue->iSetCostLimit(queues->GetDouble(wxT("rsqcostlimit"))); queue->iSetOvercommit(queues->GetBool(wxT("rsqovercommit"))); queue->iSetIgnoreCostLimit(queues->GetDouble(wxT("rsqignorecostlimit"))); queue->iSetOid(queues->GetOid(wxT("oid"))); if (browser) { browser->AppendObject(collection, queue); queues->MoveNext(); } else break; } delete queues; } return queue; } #include "images/user.xpm" #include "images/group.xpm" #include "images/roles.xpm" #include "images/loginroles.xpm" pgResQueueFactory::pgResQueueFactory(const wxChar *tn, const wxChar *ns, const wxChar *nls, const char **img) : pgServerObjFactory(tn, ns, nls, img) { metaType = PGM_RESOURCE_QUEUE; } pgResQueueFactory::pgResQueueFactory() : pgServerObjFactory(__("Resource Queue"), __("New Resource Queue..."), __("Create a new Resource Queue."), group_xpm) { } pgResQueueFactory resQueueFactory; static pgaCollectionFactory lcf(&resQueueFactory, __("Resource Queues"), roles_xpm); dlgProperty *pgResQueueFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent) { return 0; }