mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 06:05:49 -06:00
154 lines
4.2 KiB
C++
154 lines
4.2 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// pgAdmin III - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
|
|
// This software is released under the PostgreSQL Licence
|
|
//
|
|
// dlgRepPath.cpp - PostgreSQL Slony-I Path Property
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// wxWindows headers
|
|
#include <wx/wx.h>
|
|
|
|
// App headers
|
|
#include "pgAdmin3.h"
|
|
|
|
#include "slony/dlgRepPath.h"
|
|
#include "slony/slCluster.h"
|
|
#include "slony/slNode.h"
|
|
#include "slony/slPath.h"
|
|
#include "schema/pgDatatype.h"
|
|
|
|
|
|
// pointer to controls
|
|
#define cbServer CTRL_COMBOBOX("cbServer")
|
|
#define txtConnInfo CTRL_TEXT("txtConnInfo")
|
|
#define txtConnRetry CTRL_TEXT("txtConnRetry")
|
|
|
|
|
|
BEGIN_EVENT_TABLE(dlgRepPath, dlgProperty)
|
|
EVT_TEXT(XRCID("txtConnInfo"), dlgRepPath::OnChange)
|
|
EVT_COMBOBOX(XRCID("cbServer"), dlgRepPath::OnChange)
|
|
END_EVENT_TABLE();
|
|
|
|
dlgProperty *slPathFactory::CreateDialog(frmMain *frame, pgObject *node, pgObject *parent)
|
|
{
|
|
return new dlgRepPath(this, frame, (slPath *)node, (slNode *)parent);
|
|
}
|
|
|
|
|
|
dlgRepPath::dlgRepPath(pgaFactory *f, frmMain *frame, slPath *p, slNode *n)
|
|
: dlgRepProperty(f, frame, n->GetCluster(), wxT("dlgRepPath"))
|
|
{
|
|
path = p;
|
|
node = n;
|
|
}
|
|
|
|
|
|
pgObject *dlgRepPath::GetObject()
|
|
{
|
|
return path;
|
|
}
|
|
|
|
|
|
int dlgRepPath::Go(bool modal)
|
|
{
|
|
|
|
if (path)
|
|
{
|
|
// edit mode
|
|
cbServer->Append(IdAndName(path->GetSlId(), path->GetName()), (void *)path->GetSlId());
|
|
cbServer->SetSelection(0);
|
|
cbServer->Disable();
|
|
|
|
txtConnInfo->SetValue(path->GetConnInfo());
|
|
txtConnRetry->SetValue(NumToStr(path->GetConnRetry()));
|
|
}
|
|
else
|
|
{
|
|
// create mode
|
|
|
|
txtConnRetry->SetValue(wxT("10"));
|
|
|
|
pgSet *nodes = connection->ExecuteSet(
|
|
wxT("SELECT no_id, no_comment\n")
|
|
wxT(" FROM ") + cluster->GetSchemaPrefix() + wxT("sl_node\n")
|
|
wxT(" LEFT JOIN ") + cluster->GetSchemaPrefix() + wxT("sl_path ON pa_client=\n") + NumToStr(node->GetSlId()) +
|
|
wxT(" AND pa_server=no_id\n")
|
|
wxT(" WHERE no_active AND pa_client IS NULL\n")
|
|
wxT(" AND no_id <> ") + NumToStr(node->GetSlId()) + wxT("\n")
|
|
wxT(" ORDER BY no_id")
|
|
);
|
|
|
|
if (nodes)
|
|
{
|
|
while (!nodes->Eof())
|
|
{
|
|
cbServer->Append(IdAndName(nodes->GetLong(wxT("no_id")), nodes->GetVal(wxT("no_comment"))),
|
|
(void *)nodes->GetLong(wxT("no_id")));
|
|
nodes->MoveNext();
|
|
}
|
|
delete nodes;
|
|
}
|
|
if (cbServer->GetCount() > 0)
|
|
cbServer->SetSelection(0);
|
|
}
|
|
|
|
return dlgProperty::Go(modal);
|
|
}
|
|
|
|
|
|
pgObject *dlgRepPath::CreateObject(pgCollection *collection)
|
|
{
|
|
pgObject *obj = pathFactory.CreateObjects(collection, 0,
|
|
wxT(" WHERE pa_server = ") + NumToStr((long long)cbServer->wxItemContainer::GetClientData(cbServer->GetCurrentSelection())) +
|
|
wxT(" AND pa_client = ") + NumToStr(node->GetSlId()));
|
|
|
|
return obj;
|
|
}
|
|
|
|
|
|
|
|
|
|
void dlgRepPath::CheckChange()
|
|
{
|
|
if (path)
|
|
{
|
|
EnableOK(txtConnInfo->GetValue() != path->GetConnInfo()
|
|
|| StrToLong(txtConnRetry->GetValue()) != path->GetConnRetry());
|
|
}
|
|
else
|
|
{
|
|
bool enable = true;
|
|
CheckValid(enable, cbServer->GetCount() > 0, _("No provider node without path definition left."));
|
|
CheckValid(enable, cbServer->GetCurrentSelection() >= 0, _("Please select provider node."));
|
|
|
|
wxString connInfo = txtConnInfo->GetValue();
|
|
CheckValid(enable, connInfo.Find(wxT("host=")) >= 0, _("Please provide host in connect info."));
|
|
CheckValid(enable, connInfo.Find(wxT("dbname=")) >= 0, _("Please provide dbname in connect info."));
|
|
CheckValid(enable, connInfo.Find(wxT("user=")) >= 0, _("Please provide user in connect info."));
|
|
|
|
EnableOK(enable);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
wxString dlgRepPath::GetSql()
|
|
{
|
|
wxString sql;
|
|
|
|
int sel = cbServer->GetCurrentSelection();
|
|
|
|
if (sel >= 0)
|
|
{
|
|
sql = wxT("SELECT ") + cluster->GetSchemaPrefix() + wxT("storepath(")
|
|
+ NumToStr((long long)cbServer->wxItemContainer::GetClientData(sel)) + wxT(", ")
|
|
+ NumToStr(node->GetSlId()) + wxT(", ")
|
|
+ qtDbString(txtConnInfo->GetValue()) + wxT(", ")
|
|
+ NumToStr(StrToLong(txtConnRetry->GetValue())) + wxT(");");
|
|
}
|
|
return sql;
|
|
}
|