File: pgDatabase.h

package info (click to toggle)
pgadmin3 1.20.0~beta2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 73,704 kB
  • ctags: 18,591
  • sloc: cpp: 193,786; ansic: 18,736; sh: 5,154; pascal: 1,120; yacc: 927; makefile: 516; lex: 421; xml: 126; perl: 40
file content (360 lines) | stat: -rw-r--r-- 7,618 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, 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