VTK  9.3.20240423
vtkPostgreSQLDatabase.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-FileCopyrightText: Copyright 2008 Sandia Corporation
3// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
32#ifndef vtkPostgreSQLDatabase_h
33#define vtkPostgreSQLDatabase_h
34
35#include "vtkIOPostgreSQLModule.h" // For export macro
36#include "vtkSQLDatabase.h"
37
38VTK_ABI_NAMESPACE_BEGIN
40class vtkStringArray;
42struct PQconn;
43
44class VTKIOPOSTGRESQL_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
45{
46
47 friend class vtkPostgreSQLQuery;
48 friend class vtkPostgreSQLQueryPrivate;
49
50public:
52 void PrintSelf(ostream& os, vtkIndent indent) override;
54
60 bool Open(const char* password = nullptr) override;
61
65 void Close() override;
66
70 bool IsOpen() override;
71
76
80 bool HasError() override;
81
85 const char* GetLastErrorText() override;
86
88
91 const char* GetDatabaseType() override { return this->DatabaseType; }
93
95
98 virtual void SetHostName(const char*);
99 vtkGetStringMacro(HostName);
101
103
106 virtual void SetUser(const char*);
107 vtkGetStringMacro(User);
109
113 virtual void SetPassword(const char*);
114
116
119 virtual void SetDatabaseName(const char*);
120 vtkGetStringMacro(DatabaseName);
122
124
127 virtual void SetConnectOptions(const char*);
128 vtkGetStringMacro(ConnectOptions);
130
132
135 virtual void SetServerPort(int);
136 virtual int GetServerPortMinValue() { return 0; }
137 virtual int GetServerPortMaxValue() { return VTK_INT_MAX; }
138 vtkGetMacro(ServerPort, int);
140
148
153
157 vtkStringArray* GetRecord(const char* table) override;
158
162 bool IsSupported(int feature) override;
163
168
173 bool CreateDatabase(const char* dbName, bool dropExisting = false);
174
179 bool DropDatabase(const char* dbName);
180
190 vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle) override;
191
197 bool ParseURL(const char* url) override;
198
199protected:
202
218
219 vtkSetStringMacro(DatabaseType);
220 vtkSetStringMacro(LastErrorText);
221 void NullTrailingWhitespace(char* msg);
222 bool OpenInternal(const char* connectionOptions);
223
229 char* HostName;
230 char* User;
231 char* Password;
236
237private:
239 void operator=(const vtkPostgreSQLDatabase&) = delete;
240};
241
242// This is basically the body of the SetStringMacro but with a
243// call to update an additional vtkTimeStamp. We inline the implementation
244// so that wrapping will work.
245#define vtkSetStringPlusMTimeMacro(className, name, timeStamp) \
246 inline void className::Set##name(const char* _arg) \
247 { \
248 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " \
249 << (_arg ? _arg : "(null)")); \
250 if (this->name == nullptr && _arg == nullptr) \
251 { \
252 return; \
253 } \
254 if (this->name && _arg && (!strcmp(this->name, _arg))) \
255 { \
256 return; \
257 } \
258 delete[] this->name; \
259 if (_arg) \
260 { \
261 size_t n = strlen(_arg) + 1; \
262 char* cp1 = new char[n]; \
263 const char* cp2 = (_arg); \
264 this->name = cp1; \
265 do \
266 { \
267 *cp1++ = *cp2++; \
268 } while (--n); \
269 } \
270 else \
271 { \
272 this->name = nullptr; \
273 } \
274 this->Modified(); \
275 this->timeStamp.Modified(); \
276 this->Close(); /* Force a re-open on next query */ \
277 }
278
284
286{
287 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting ServerPort to " << _arg);
288 if (this->ServerPort != (_arg < 0 ? 0 : (_arg > VTK_INT_MAX ? VTK_INT_MAX : _arg)))
289 {
290 this->ServerPort = (_arg < 0 ? 0 : (_arg > VTK_INT_MAX ? VTK_INT_MAX : _arg));
291 this->Modified();
292 this->URLMTime.Modified();
293 this->Close(); // Force a re-open on next query
294 }
295}
296
297VTK_ABI_NAMESPACE_END
298#endif // vtkPostgreSQLDatabase_h
a simple class to control print indentation
Definition vtkIndent.h:108
const char * GetClassName() const
Return the class name as a string.
virtual void Modified()
Update the modification time for this object.
internal details of a connection to a PostgreSQL database
maintain a connection to a PostgreSQL database
virtual int GetServerPortMinValue()
The port used for connecting to the database.
bool Open(const char *password=nullptr) override
Open a new connection to the database.
vtkSQLQuery * GetQueryInstance() override
Return an empty query on this database.
bool IsOpen() override
Return whether the database has an open connection.
virtual void SetServerPort(int)
The port used for connecting to the database.
virtual void SetConnectOptions(const char *)
Additional options for the database.
virtual void SetDatabaseName(const char *)
The name of the database to connect to.
bool HasError() override
Did the last operation generate an error.
void NullTrailingWhitespace(char *msg)
~vtkPostgreSQLDatabase() override
void UpdateDataTypeMap()
Create or refresh the map from Postgres column types to VTK array types.
bool IsSupported(int feature) override
Return whether a feature is supported by the database.
virtual void SetHostName(const char *)
The database server host name.
const char * GetDatabaseType() override
String representing database type (e.g.
static vtkPostgreSQLDatabase * New()
bool ParseURL(const char *url) override
Overridden to determine connection parameters given the URL.
vtkStdString GetColumnSpecification(vtkSQLDatabaseSchema *schema, int tblHandle, int colHandle) override
Return the SQL string with the syntax to create a column inside a "CREATE TABLE" SQL statement.
virtual void SetUser(const char *)
The user name for connecting to the database server.
vtkStringArray * GetRecord(const char *table) override
Get the list of fields for a particular table.
vtkStringArray * GetDatabases()
Return a list of databases on the server.
bool DropDatabase(const char *dbName)
Drop a database if it exists.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
bool OpenInternal(const char *connectionOptions)
virtual int GetServerPortMaxValue()
The port used for connecting to the database.
const char * GetLastErrorText() override
Get the last error text from the database.
void Close() override
Close the connection to the database.
vtkStdString GetURL() override
Get a URL referencing the current database connection.
vtkPostgreSQLDatabasePrivate * Connection
bool CreateDatabase(const char *dbName, bool dropExisting=false)
Create a new database, optionally dropping any existing database of the same name.
vtkStringArray * GetTables() override
Get the list of tables from the database.
virtual void SetPassword(const char *)
The user's password for connecting to the database server.
vtkSQLQuery implementation for PostgreSQL databases
represent an SQL database schema
maintain a connection to an sql database
executes an sql query and retrieves results
Definition vtkSQLQuery.h:60
Wrapper around std::string to keep symbols short.
a vtkAbstractArray subclass for strings
record modification and/or execution time
void Modified()
Set this objects time to the current time.
#define vtkSetStringPlusMTimeMacro(className, name, timeStamp)
#define VTK_INT_MAX
Definition vtkType.h:144