VTK  9.3.20240419
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 
38 VTK_ABI_NAMESPACE_BEGIN
39 class vtkPostgreSQLQuery;
40 class vtkStringArray;
42 struct PQconn;
43 
44 class VTKIOPOSTGRESQL_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
45 {
46 
47  friend class vtkPostgreSQLQuery;
48  friend class vtkPostgreSQLQueryPrivate;
49 
50 public:
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 
147  vtkStdString GetURL() override;
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 
199 protected:
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 
237 private:
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 
297 VTK_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.
vtkStringArray * GetDatabases()
Return a list of databases on the server.
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.
vtkStringArray * GetTables() override
Get the list of tables from the database.
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.
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.
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)
static vtkPostgreSQLDatabase * New()
const char * GetDatabaseType() override
String representing database type (e.g.
virtual int GetServerPortMaxValue()
The port used for connecting to the database.
void Close() override
Close the connection to the database.
vtkStdString GetURL() override
Get a URL referencing the current database connection.
const char * GetLastErrorText() override
Get the last error text from the database.
vtkPostgreSQLDatabasePrivate * Connection
bool CreateDatabase(const char *dbName, bool dropExisting=false)
Create a new database, optionally dropping any existing database of the same name.
vtkSQLQuery * GetQueryInstance() override
Return an empty query on this 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.
Definition: vtkStdString.h:78
a vtkAbstractArray subclass for strings
record modification and/or execution time
Definition: vtkTimeStamp.h:44
void Modified()
Set this objects time to the current time.
@ url
Definition: vtkX3D.h:233
#define vtkSetStringPlusMTimeMacro(className, name, timeStamp)
#define VTK_INT_MAX
Definition: vtkType.h:144