VTK
vtkPostgreSQLDatabase.h
Go to the documentation of this file.
1 /* -*- Mode: C++; -*- */
2 /*=========================================================================
3 
4  Program: Visualization Toolkit
5  Module: vtkPostgreSQLDatabase.h
6 
7  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
8  All rights reserved.
9  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
10 
11  This software is distributed WITHOUT ANY WARRANTY; without even
12  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13  PURPOSE. See the above copyright notice for more information.
14 
15 =========================================================================*/
16 /*-------------------------------------------------------------------------
17  Copyright 2008 Sandia Corporation.
18  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
19  the U.S. Government retains certain rights in this software.
20 -------------------------------------------------------------------------*/
49 #ifndef vtkPostgreSQLDatabase_h
50 #define vtkPostgreSQLDatabase_h
51 
52 #include "vtkIOPostgreSQLModule.h" // For export macro
53 #include "vtkSQLDatabase.h"
54 
55 class vtkPostgreSQLQuery;
56 class vtkStringArray;
58 struct PQconn;
59 
60 class VTKIOPOSTGRESQL_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
61 {
62 
63  friend class vtkPostgreSQLQuery;
64  friend class vtkPostgreSQLQueryPrivate;
65 
66 public:
68  void PrintSelf(ostream& os, vtkIndent indent) override;
70 
76  bool Open( const char* password = 0 ) override;
77 
81  void Close() override;
82 
86  bool IsOpen() override;
87 
92 
96  virtual bool HasError() override;
97 
101  const char* GetLastErrorText() override;
102 
104 
107  const char* GetDatabaseType() override
108  {
109  return this->DatabaseType;
110  }
112 
114 
117  virtual void SetHostName( const char* );
118  vtkGetStringMacro(HostName);
120 
122 
125  virtual void SetUser( const char* );
126  vtkGetStringMacro(User);
128 
132  virtual void SetPassword( const char* );
133 
135 
138  virtual void SetDatabaseName( const char* );
139  vtkGetStringMacro(DatabaseName);
141 
143 
146  virtual void SetConnectOptions( const char* );
147  vtkGetStringMacro(ConnectOptions);
149 
151 
154  virtual void SetServerPort( int );
155  virtual int GetServerPortMinValue()
156  {
157  return 0;
158  }
159  virtual int GetServerPortMaxValue()
160  {
161  return VTK_INT_MAX;
162  }
163  vtkGetMacro(ServerPort, int);
165 
172  vtkStdString GetURL() override;
173 
178 
182  vtkStringArray* GetRecord( const char* table ) override;
183 
187  bool IsSupported( int feature ) override;
188 
193 
198  bool CreateDatabase( const char* dbName, bool dropExisting = false );
199 
204  bool DropDatabase( const char* dbName );
205 
213  vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle ) override;
214 
220  bool ParseURL(const char* url) override;
221 
222 protected:
225 
241 
242  vtkSetStringMacro(DatabaseType);
243  vtkSetStringMacro(LastErrorText);
244  void NullTrailingWhitespace( char* msg );
245  bool OpenInternal( const char* connectionOptions );
246 
252  char* HostName;
253  char* User;
254  char* Password;
259 
260 private:
261  vtkPostgreSQLDatabase( const vtkPostgreSQLDatabase& ) = delete;
262  void operator = ( const vtkPostgreSQLDatabase& ) = delete;
263 };
264 
265 // This is basically the body of the SetStringMacro but with a
266 // call to update an additional vtkTimeStamp. We inline the implementation
267 // so that wrapping will work.
268 #define vtkSetStringPlusMTimeMacro(className,name,timeStamp) \
269  inline void className::Set##name (const char* _arg) \
270  { \
271  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " << (_arg?_arg:"(null)") ); \
272  if ( this->name == nullptr && _arg == nullptr) { return;} \
273  if ( this->name && _arg && (!strcmp(this->name,_arg))) { return;} \
274  delete [] this->name; \
275  if (_arg) \
276  { \
277  size_t n = strlen(_arg) + 1; \
278  char *cp1 = new char[n]; \
279  const char *cp2 = (_arg); \
280  this->name = cp1; \
281  do { *cp1++ = *cp2++; } while ( --n ); \
282  } \
283  else \
284  { \
285  this->name = nullptr; \
286  } \
287  this->Modified(); \
288  this->timeStamp.Modified(); \
289  this->Close(); /* Force a re-open on next query */ \
290  }
291 
297 
299 {
300  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting ServerPort to " << _arg );
301  if ( this->ServerPort != ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) ) )
302  {
303  this->ServerPort = ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) );
304  this->Modified();
305  this->URLMTime.Modified();
306  this->Close(); // Force a re-open on next query
307  }
308 }
309 
310 #endif // vtkPostgreSQLDatabase_h
vtkPostgreSQLDatabase::Password
char * Password
Definition: vtkPostgreSQLDatabase.h:254
vtkPostgreSQLDatabasePrivate
internal details of a connection to a PostgreSQL database
Definition: vtkPostgreSQLDatabasePrivate.h:47
vtkPostgreSQLDatabase::~vtkPostgreSQLDatabase
~vtkPostgreSQLDatabase()
vtkPostgreSQLDatabase::HasError
virtual bool HasError() override
Did the last operation generate an error.
vtkPostgreSQLDatabase::New
static vtkPostgreSQLDatabase * New()
VTK_INT_MAX
#define VTK_INT_MAX
Definition: vtkType.h:159
vtkPostgreSQLDatabase::HostName
char * HostName
Definition: vtkPostgreSQLDatabase.h:252
vtkPostgreSQLDatabase::ParseURL
bool ParseURL(const char *url) override
Overridden to determine connection parameters given the URL.
vtkPostgreSQLDatabase::GetQueryInstance
vtkSQLQuery * GetQueryInstance() override
Return an empty query on this database.
vtkPostgreSQLDatabase::SetPassword
virtual void SetPassword(const char *)
The user's password for connecting to the database server.
vtkPostgreSQLDatabase::GetServerPortMinValue
virtual int GetServerPortMinValue()
Definition: vtkPostgreSQLDatabase.h:155
vtkPostgreSQLDatabase::GetURL
vtkStdString GetURL() override
Get a URL referencing the current database connection.
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:36
vtkObject::Modified
virtual void Modified()
Update the modification time for this object.
vtkPostgreSQLDatabase
maintain a connection to a PostgreSQL database
Definition: vtkPostgreSQLDatabase.h:61
vtkPostgreSQLDatabase::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkPostgreSQLDatabase::DatabaseType
char * DatabaseType
Definition: vtkPostgreSQLDatabase.h:251
vtkPostgreSQLDatabase::URLMTime
vtkTimeStamp URLMTime
Definition: vtkPostgreSQLDatabase.h:247
vtkPostgreSQLDatabase::ServerPort
int ServerPort
Definition: vtkPostgreSQLDatabase.h:256
vtkPostgreSQLDatabase::OpenInternal
bool OpenInternal(const char *connectionOptions)
vtkPostgreSQLDatabase::GetLastErrorText
const char * GetLastErrorText() override
Get the last error text from the database.
vtkPostgreSQLDatabase::Connection
vtkPostgreSQLDatabasePrivate * Connection
Definition: vtkPostgreSQLDatabase.h:248
vtkSQLDatabase.h
vtkPostgreSQLDatabase::SetServerPort
virtual void SetServerPort(int)
The port used for connecting to the database.
Definition: vtkPostgreSQLDatabase.h:298
vtkPostgreSQLDatabase::User
char * User
Definition: vtkPostgreSQLDatabase.h:253
vtkPostgreSQLDatabase::Tables
vtkStringArray * Tables
Definition: vtkPostgreSQLDatabase.h:250
vtkPostgreSQLDatabase::ConnectOptions
char * ConnectOptions
Definition: vtkPostgreSQLDatabase.h:257
vtkPostgreSQLDatabase::Open
bool Open(const char *password=0) override
Open a new connection to the database.
vtkObjectBase::GetClassName
const char * GetClassName() const
Return the class name as a string.
vtkPostgreSQLDatabase::SetConnectOptions
virtual void SetConnectOptions(const char *)
Additional options for the database.
vtkTimeStamp::Modified
void Modified()
Set this objects time to the current time.
vtkPostgreSQLDatabase::vtkPostgreSQLDatabase
vtkPostgreSQLDatabase()
vtkPostgreSQLDatabase::ConnectionMTime
vtkTimeStamp ConnectionMTime
Definition: vtkPostgreSQLDatabase.h:249
vtkPostgreSQLDatabase::CreateDatabase
bool CreateDatabase(const char *dbName, bool dropExisting=false)
Create a new database, optionally dropping any existing database of the same name.
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkPostgreSQLQuery
vtkSQLQuery implementation for PostgreSQL databases
Definition: vtkPostgreSQLQuery.h:51
vtkPostgreSQLDatabase::Close
void Close() override
Close the connection to the database.
vtkPostgreSQLDatabase::GetDatabases
vtkStringArray * GetDatabases()
Return a list of databases on the server.
vtkPostgreSQLDatabase::GetServerPortMaxValue
virtual int GetServerPortMaxValue()
Definition: vtkPostgreSQLDatabase.h:159
vtkPostgreSQLDatabase::NullTrailingWhitespace
void NullTrailingWhitespace(char *msg)
vtkX3D::url
@ url
Definition: vtkX3D.h:233
vtkPostgreSQLDatabase::IsOpen
bool IsOpen() override
Return whether the database has an open connection.
vtkSQLDatabaseSchema
represent an SQL database schema
Definition: vtkSQLDatabaseSchema.h:65
vtkPostgreSQLDatabase::IsSupported
bool IsSupported(int feature) override
Return whether a feature is supported by the database.
vtkPostgreSQLDatabase::UpdateDataTypeMap
void UpdateDataTypeMap()
Create or refresh the map from Postgres column types to VTK array types.
vtkPostgreSQLDatabase::LastErrorText
char * LastErrorText
Definition: vtkPostgreSQLDatabase.h:258
vtkPostgreSQLDatabase::GetRecord
vtkStringArray * GetRecord(const char *table) override
Get the list of fields for a particular table.
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:43
vtkPostgreSQLDatabase::DropDatabase
bool DropDatabase(const char *dbName)
Drop a database if it exists.
vtkPostgreSQLDatabase::GetDatabaseType
const char * GetDatabaseType() override
String representing database type (e.g.
Definition: vtkPostgreSQLDatabase.h:107
vtkSetStringPlusMTimeMacro
#define vtkSetStringPlusMTimeMacro(className, name, timeStamp)
Definition: vtkPostgreSQLDatabase.h:268
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:41
vtkPostgreSQLDatabase::SetDatabaseName
virtual void SetDatabaseName(const char *)
The name of the database to connect to.
vtkPostgreSQLDatabase::SetUser
virtual void SetUser(const char *)
The user name for connecting to the database server.
vtkSQLQuery
executes an sql query and retrieves results
Definition: vtkSQLQuery.h:75
vtkPostgreSQLDatabase::GetTables
vtkStringArray * GetTables() override
Get the list of tables from the database.
vtkPostgreSQLDatabase::DatabaseName
char * DatabaseName
Definition: vtkPostgreSQLDatabase.h:255
vtkPostgreSQLDatabase::SetHostName
virtual void SetHostName(const char *)
The database server host name.
vtkPostgreSQLDatabase::GetColumnSpecification
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.
vtkSQLDatabase
maintain a connection to an sql database
Definition: vtkSQLDatabase.h:91