pgadmin3/include/schema/pgDatabase.h
levinsv 4af765213c support PG11
Поддержка PostgreSQL 11 только для Windows
2018-10-10 22:59:25 +05:00

360 lines
7.4 KiB
C++

//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// pgDatabase.h - PostgreSQL Database
//
//////////////////////////////////////////////////////////////////////////
#ifndef PGDATABASE_H
#define PGDATABASE_H
#include "pgServer.h"
class pgDatabaseFactory : public pgServerObjFactory
{
public:
pgDatabaseFactory();
virtual dlgProperty *CreateDialog(frmMain *frame, pgObject *node, pgObject *parent);
virtual pgObject *CreateObjects(pgCollection *obj, ctlTree *browser, const wxString &restr = wxEmptyString);
virtual pgCollection *CreateCollection(pgObject *obj);
int GetClosedIconId()
{
return WantSmallIcon() ? smallClosedId : closedId;
}
protected:
int closedId, smallClosedId;
};
extern pgDatabaseFactory databaseFactory;
// Class declarations
class pgDatabase : public pgServerObject
{
public:
pgDatabase(const wxString &newName = wxT(""));
~pgDatabase();
wxString GetTranslatedMessage(int kindOfMessage) const;
int GetIconId();
static wxString GetDefaultPrivileges(const wxChar &cType, wxString strDefPrivs, const wxString &strSchema);
pgDatabase *GetDatabase() const
{
return (pgDatabase *)this;
}
bool BackendMinimumVersion(int major, int minor)
{
return connection()->BackendMinimumVersion(major, minor);
}
bool BackendMinimumVersion(int major, int minor, int patch)
{
return connection()->BackendMinimumVersion(major, minor, patch);
}
void ShowTreeDetail(ctlTree *browser, frmMain *form = 0, ctlListView *properties = 0, ctlSQLBox *sqlPane = 0);
void ShowHint(frmMain *form, bool force);
void ShowStatistics(frmMain *form, ctlListView *statistics);
pgSet *ExecuteSet(const wxString &sql);
wxString ExecuteScalar(const wxString &sql);
bool ExecuteVoid(const wxString &sql, bool reportError = true);
void UpdateDefaultSchema();
pgConn *CreateConn(const wxString &applicationname)
{
return server->CreateConn(GetName(), GetOid(), applicationname);
}
wxString GetPrettyOption() const
{
return prettyOption;
}
bool GetCreatePrivilege() const
{
return createPrivilege;
}
void iSetCreatePrivilege(const bool b)
{
createPrivilege = b;
}
// Default Privileges on ALL
wxString GetDefPrivsOnTables()
{
return m_defPrivsOnTables;
}
wxString GetDefPrivsOnSequences()
{
return m_defPrivsOnSeqs;
}
wxString GetDefPrivsOnFunctions()
{
return m_defPrivsOnFuncs;
}
wxString GetDefPrivsOnTypes()
{
return m_defPrivsOnTypes;
}
wxString GetPath() const
{
return path;
};
void iSetPath(const wxString &newVal)
{
path = newVal;
}
wxString GetTablespace() const
{
return tablespace;
};
void iSetTablespace(const wxString &newVal)
{
tablespace = newVal;
}
OID GetTablespaceOid() const
{
return tablespaceOid;
};
void iSetTablespaceOid(const OID newVal)
{
tablespaceOid = newVal;
}
wxString GetDefaultTablespace() const
{
return defaultTablespace;
};
void iSetDefaultTablespace(const wxString &newVal)
{
defaultTablespace = newVal;
}
wxString GetEncoding() const
{
return encoding;
}
void iSetEncoding(const wxString &newVal)
{
encoding = newVal;
}
wxString GetSchemaRestriction()
{
return schemaRestriction;
}
void iSetSchemaRestriction(const wxString &s)
{
schemaRestriction = s;
}
wxString GetCollate() const
{
return collate;
}
void iSetCollate( const wxString &newVal)
{
collate = newVal;
}
wxString GetCType() const
{
return ctype;
}
void iSetCType( const wxString &newVal)
{
ctype = newVal;
}
long GetConnectionLimit()
{
return connectionLimit;
}
void iSetConnectionLimit(long newVal)
{
connectionLimit = newVal;
}
wxArrayString &GetVariables()
{
return variables;
}
bool GetAllowConnections() const
{
return allowConnections;
}
void iSetAllowConnections(bool newVal)
{
allowConnections = newVal;
}
wxString GetSearchPath() const
{
return searchPath;
}
wxString GetSchemaPrefix(const wxString &schemaname) const;
wxString GetQuotedSchemaPrefix(const wxString &schemaname) const;
wxString GetDefaultSchema()
{
return defaultSchema;
};
bool GetConnected()
{
return connected;
}
bool GetSystemObject() const;
long GetMissingFKs() const
{
return missingFKs;
}
wxArrayString GetSlonyClusters(ctlTree *browser);
bool DropObject(wxFrame *frame, ctlTree *browser, bool cascaded);
bool CanCreate();
bool CanMaintenance()
{
return connected;
}
bool CanBackup()
{
return connected;
}
bool CanRestore()
{
return connected;
}
bool GetCanHint();
bool RequireDropConfirm()
{
return true;
}
pgConn *connection();
int Connect();
void Disconnect();
void CheckAlive();
void AppendSchemaChange(const wxString &sql);
wxString GetSchemaChanges()
{
return schemaChanges;
}
void ClearSchemaChanges()
{
schemaChanges = wxEmptyString;
}
wxMenu *GetNewMenu();
wxString GetSql(ctlTree *browser);
pgObject *Refresh(ctlTree *browser, const wxTreeItemId item);
bool HasStats()
{
return false;
}
bool HasDepends()
{
return true;
}
bool HasReferences()
{
return true;
}
bool CanDebugPlpgsql();
bool CanDebugEdbspl();
private:
pgConn *conn;
bool connected;
bool useServerConnection;
wxString searchPath, path, tablespace, defaultTablespace, encoding, collate, ctype;
wxString prettyOption, defaultSchema;
bool allowConnections, createPrivilege;
long missingFKs;
long connectionLimit;
wxArrayString variables;
wxString schemaChanges;
wxString schemaRestriction;
wxString m_defPrivsOnTables, m_defPrivsOnSeqs, m_defPrivsOnFuncs, m_defPrivsOnTypes;
int canDebugPlpgsql, canDebugEdbspl;
OID tablespaceOid;
};
class pgDatabaseCollection : public pgServerObjCollection
{
public:
pgDatabaseCollection(pgaFactory *factory, pgServer *sv);
wxString GetTranslatedMessage(int kindOfMessage) const;
void ShowStatistics(frmMain *form, ctlListView *statistics);
};
////////////////////////////////////////////////
class pgDatabaseObjFactory : public pgServerObjFactory
{
public:
pgDatabaseObjFactory(const wxChar *tn, const wxChar *ns, const wxChar *nls, wxImage *img, wxImage *imgSm = 0)
: pgServerObjFactory(tn, ns, nls, img, imgSm) {}
virtual pgCollection *CreateCollection(pgObject *obj);
};
class disconnectDatabaseFactory : public contextActionFactory
{
public:
disconnectDatabaseFactory(menuFactoryList *list, wxMenu *mnu, ctlMenuToolbar *toolbar);
wxWindow *StartDialog(frmMain *form, pgObject *obj);
bool CheckEnable(pgObject *obj);
};
// Object that lives in a database
class pgDatabaseObject : public pgObject
{
public:
pgDatabaseObject(pgaFactory &factory, const wxString &newName = wxEmptyString) : pgObject(factory, newName) {}
pgDatabaseObject(int newType, const wxString &newName) : pgObject(newType, newName) {}
void iSetDatabase(pgDatabase *newDatabase)
{
database = newDatabase;
}
pgDatabase *GetDatabase() const
{
return database;
}
pgServer *GetServer() const;
void DisplayStatistics(ctlListView *statistics, const wxString &query);
// compiles a prefix from the schema name with '.', if necessary
wxString GetSchemaPrefix(const wxString &schemaname) const;
wxString GetQuotedSchemaPrefix(const wxString &schemaname) const;
bool CanDrop();
bool CanEdit()
{
return true;
}
bool CanCreate();
protected:
pgDatabase *database;
};
// collection of pgDatabaseObject
class pgDatabaseObjCollection : public pgCollection
{
public:
pgDatabaseObjCollection(pgaFactory *factory, pgDatabase *db);
bool CanCreate();
};
#endif