pgadmin3/schema/pgConversion.cpp
2020-07-07 22:19:12 +05:00

245 lines
7.3 KiB
C++

//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgConversion.cpp - Conversion class
//
//////////////////////////////////////////////////////////////////////////
// wxWindows headers
#include <wx/wx.h>
// App headers
#include "pgAdmin3.h"
#include "utils/misc.h"
#include "schema/pgConversion.h"
pgConversion::pgConversion(pgSchema *newSchema, const wxString &newName)
: pgSchemaObject(newSchema, conversionFactory, newName)
{
}
pgConversion::~pgConversion()
{
}
wxString pgConversion::GetTranslatedMessage(int kindOfMessage) const
{
wxString message = wxEmptyString;
switch (kindOfMessage)
{
case RETRIEVINGDETAILS:
message = _("Retrieving details on conversion");
message += wxT(" ") + GetName();
break;
case REFRESHINGDETAILS:
message = _("Refreshing conversion");
message += wxT(" ") + GetName();
break;
case DROPINCLUDINGDEPS:
message = wxString::Format(_("Are you sure you wish to drop conversion \"%s\" including all objects that depend on it?"),
GetFullIdentifier().c_str());
break;
case DROPEXCLUDINGDEPS:
message = wxString::Format(_("Are you sure you wish to drop conversion \"%s\"?"),
GetFullIdentifier().c_str());
break;
case DROPCASCADETITLE:
message = _("Drop conversion cascaded?");
break;
case DROPTITLE:
message = _("Drop conversion?");
break;
case PROPERTIESREPORT:
message = _("Conversion properties report");
message += wxT(" - ") + GetName();
break;
case PROPERTIES:
message = _("Conversion properties");
break;
case DDLREPORT:
message = _("Conversion DDL report");
message += wxT(" - ") + GetName();
break;
case DDL:
message = _("Conversion DDL");
break;
case DEPENDENCIESREPORT:
message = _("Conversion dependencies report");
message += wxT(" - ") + GetName();
break;
case DEPENDENCIES:
message = _("Conversion dependencies");
break;
case DEPENDENTSREPORT:
message = _("Conversion dependents report");
message += wxT(" - ") + GetName();
break;
case DEPENDENTS:
message = _("Conversion dependents");
break;
}
return message;
}
bool pgConversion::DropObject(wxFrame *frame, ctlTree *browser, bool cascaded)
{
wxString sql = wxT("DROP CONVERSION ") + this->GetSchema()->GetQuotedIdentifier() + wxT(".") + this->GetQuotedIdentifier();
if (cascaded)
sql += wxT(" CASCADE");
return GetDatabase()->ExecuteVoid(sql);
}
wxString pgConversion::GetSql(ctlTree *browser)
{
if (sql.IsNull())
{
sql = wxT("-- Conversion: ") + GetQuotedFullIdentifier() + wxT("\n\n")
+ wxT("-- DROP CONVERSION ") + GetQuotedFullIdentifier() + wxT(";")
+ wxT("\n\nCREATE ");
if (GetDefaultConversion())
sql += wxT("DEFAULT ");
sql += wxT("CONVERSION ") + qtIdent(GetName())
+ wxT("\n FOR '") + GetForEncoding() + wxT("'")
+ wxT("\n TO '") + GetToEncoding() + wxT("'")
+ wxT("\n FROM ") + GetDatabase()->GetQuotedSchemaPrefix(GetProcNamespace())
+ qtIdent(GetProc()) + wxT(";\n")
+ GetOwnerSql(8, 0);
}
return sql;
}
void pgConversion::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane)
{
if (properties)
{
CreateListColumns(properties);
properties->AppendItem(_("Name"), GetName());
properties->AppendItem(_("OID"), GetOid());
properties->AppendItem(_("Owner"), GetOwner());
properties->AppendItem(_("From"), GetForEncoding());
properties->AppendItem(_("To"), GetToEncoding());
properties->AppendItem(_("Function"), GetSchemaPrefix(GetProcNamespace()) + GetProc());
properties->AppendYesNoItem(_("Default?"), GetDefaultConversion());
properties->AppendYesNoItem(_("System conversion?"), GetSystemObject());
if (GetConnection()->BackendMinimumVersion(7, 5))
properties->AppendItem(_("Comment"), firstLineOnly(GetComment()));
}
}
pgObject *pgConversion::Refresh(ctlTree *browser, const wxTreeItemId item)
{
pgObject *conversion = 0;
pgCollection *coll = browser->GetParentCollection(item);
if (coll)
conversion = conversionFactory.CreateObjects(coll, 0, wxT("\n AND co.oid=") + GetOidStr());
return conversion;
}
pgObject *pgConversionFactory::CreateObjects(pgCollection *collection, ctlTree *browser, const wxString &restriction)
{
pgConversion *conversion = 0;
pgSet *conversions = collection->GetDatabase()->ExecuteSet(
wxT("SELECT co.oid, co.*, pg_encoding_to_char(conforencoding) as forencoding, pg_get_userbyid(conowner) as owner,")
wxT("pg_encoding_to_char(contoencoding) as toencoding, proname, nspname, description\n")
wxT(" FROM pg_conversion co\n")
wxT(" JOIN pg_proc pr ON pr.oid=conproc\n")
wxT(" JOIN pg_namespace na ON na.oid=pr.pronamespace\n")
wxT(" LEFT OUTER JOIN pg_description des ON (des.objoid=co.oid AND des.objsubid=0 AND des.classoid='pg_conversion'::regclass)\n")
wxT(" WHERE connamespace = ") + collection->GetSchema()->GetOidStr()
+ restriction + wxT("\n")
wxT(" ORDER BY conname"));
if (conversions)
{
while (!conversions->Eof())
{
conversion = new pgConversion(collection->GetSchema(),
conversions->GetVal(wxT("conname")));
conversion->iSetOid(conversions->GetOid(wxT("oid")));
conversion->iSetOwner(conversions->GetVal(wxT("owner")));
conversion->iSetComment(conversions->GetVal(wxT("description")));
conversion->iSetForEncoding(conversions->GetVal(wxT("forencoding")));
conversion->iSetToEncoding(conversions->GetVal(wxT("toencoding")));
conversion->iSetProc(conversions->GetVal(wxT("proname")));
conversion->iSetProcNamespace(conversions->GetVal(wxT("nspname")));
conversion->iSetDefaultConversion(conversions->GetBool(wxT("condefault")));
if (browser)
{
browser->AppendObject(collection, conversion);
conversions->MoveNext();
}
else
break;
}
delete conversions;
}
return conversion;
}
/////////////////////////////
pgConversionCollection::pgConversionCollection(pgaFactory *factory, pgSchema *sch)
: pgSchemaObjCollection(factory, sch)
{
}
wxString pgConversionCollection::GetTranslatedMessage(int kindOfMessage) const
{
wxString message = wxEmptyString;
switch (kindOfMessage)
{
case RETRIEVINGDETAILS:
message = _("Retrieving details on conversions");
break;
case REFRESHINGDETAILS:
message = _("Refreshing conversions");
break;
case OBJECTSLISTREPORT:
message = _("Conversions list report");
break;
}
return message;
}
/////////////////////////////
#include "images/conversion.pngc"
#include "images/conversions.pngc"
pgConversionFactory::pgConversionFactory()
: pgSchemaObjFactory(__("Conversion"), __("New Conversion..."), __("Create a new Conversion."), conversion_png_img)
{
}
pgCollection *pgConversionFactory::CreateCollection(pgObject *obj)
{
return new pgConversionCollection(GetCollectionFactory(), (pgSchema *)obj);
}
pgConversionFactory conversionFactory;
static pgaCollectionFactory cf(&conversionFactory, __("Conversions"), conversions_png_img);