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 -------------------------------------------------------------------------*/
48 #ifndef vtkPostgreSQLDatabase_h
49 #define vtkPostgreSQLDatabase_h
50 
51 #include "vtkIOPostgreSQLModule.h" // For export macro
52 #include "vtkSQLDatabase.h"
53 
54 class vtkPostgreSQLQuery;
55 class vtkStringArray;
57 struct PQconn;
58 
60 {
61  //BTX
62  friend class vtkPostgreSQLQuery;
63  friend class vtkPostgreSQLQueryPrivate;
64  //ETX
65 
66 public:
68  void PrintSelf(ostream& os, vtkIndent indent);
70 
74  bool Open( const char* password = 0 );
75 
77  void Close();
78 
80  bool IsOpen();
81 
84 
86  virtual bool HasError();
87 
89  const char* GetLastErrorText();
90 
92 
93  vtkGetStringMacro(DatabaseType);
95 
97 
98  virtual void SetHostName( const char* );
99  vtkGetStringMacro(HostName);
101 
103 
104  virtual void SetUser( const char* );
107 
109  virtual void SetPassword( const char* );
110 
112 
113  virtual void SetDatabaseName( const char* );
114  vtkGetStringMacro(DatabaseName);
116 
118 
119  virtual void SetConnectOptions( const char* );
120  vtkGetStringMacro(ConnectOptions);
122 
124 
125  virtual void SetServerPort( int );
126  virtual int GetServerPortMinValue()
127  {
128  return 0;
129  }
130  virtual int GetServerPortMaxValue()
131  {
132  return VTK_INT_MAX;
133  }
134  vtkGetMacro(ServerPort, int);
136 
142  virtual vtkStdString GetURL();
143 
146 
148  vtkStringArray* GetRecord( const char* table );
149 
151  bool IsSupported( int feature );
152 
155 
159  bool CreateDatabase( const char* dbName, bool dropExisting = false );
160 
163  bool DropDatabase( const char* dbName );
164 
166 
171  vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle );
173 
177  virtual bool ParseURL(const char* url);
178 
179 protected:
182 
194 
195  vtkSetStringMacro(DatabaseType);
196  vtkSetStringMacro(LastErrorText);
197  void NullTrailingWhitespace( char* msg );
198  bool OpenInternal( const char* connectionOptions );
199 
205  char* HostName;
206  char* User;
207  char* Password;
212 
213 private:
214  vtkPostgreSQLDatabase( const vtkPostgreSQLDatabase& ); // Not implemented.
215  void operator = ( const vtkPostgreSQLDatabase& ); // Not implemented.
216 };
217 
218 // This is basically the body of the SetStringMacro but with a
219 // call to update an additional vtkTimeStamp. We inline the implementation
220 // so that wrapping will work.
221 #define vtkSetStringPlusMTimeMacro(className,name,timeStamp) \
222  inline void className::Set##name (const char* _arg) \
223  { \
224  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " << (_arg?_arg:"(null)") ); \
225  if ( this->name == NULL && _arg == NULL) { return;} \
226  if ( this->name && _arg && (!strcmp(this->name,_arg))) { return;} \
227  delete [] this->name; \
228  if (_arg) \
229  { \
230  size_t n = strlen(_arg) + 1; \
231  char *cp1 = new char[n]; \
232  const char *cp2 = (_arg); \
233  this->name = cp1; \
234  do { *cp1++ = *cp2++; } while ( --n ); \
235  } \
236  else \
237  { \
238  this->name = NULL; \
239  } \
240  this->Modified(); \
241  this->timeStamp.Modified(); \
242  this->Close(); /* Force a re-open on next query */ \
243  }
244 
250 
252 {
253  vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting ServerPort to " << _arg );
254  if ( this->ServerPort != ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) ) )
255  {
256  this->ServerPort = ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) );
257  this->Modified();
258  this->URLMTime.Modified();
259  this->Close(); // Force a re-open on next query
260  }
261 }
262 
263 #endif // vtkPostgreSQLDatabase_h
vtkPostgreSQLDatabase::Password
char * Password
Definition: vtkPostgreSQLDatabase.h:207
vtkPostgreSQLDatabasePrivate
internal details of a connection to a PostgreSQL database
Definition: vtkPostgreSQLDatabasePrivate.h:47
vtkPostgreSQLDatabase::~vtkPostgreSQLDatabase
~vtkPostgreSQLDatabase()
vtkPostgreSQLDatabase::New
static vtkPostgreSQLDatabase * New()
VTK_INT_MAX
#define VTK_INT_MAX
Definition: vtkType.h:132
vtkPostgreSQLDatabase::IsSupported
bool IsSupported(int feature)
vtkPostgreSQLDatabase::HostName
char * HostName
Definition: vtkPostgreSQLDatabase.h:205
vtkPostgreSQLDatabase::SetPassword
virtual void SetPassword(const char *)
vtkPostgreSQLDatabase::Open
bool Open(const char *password=0)
vtkPostgreSQLDatabase::GetServerPortMinValue
virtual int GetServerPortMinValue()
Definition: vtkPostgreSQLDatabase.h:126
vtkPostgreSQLDatabase::GetColumnSpecification
virtual vtkStdString GetColumnSpecification(vtkSQLDatabaseSchema *schema, int tblHandle, int colHandle)
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkDebugMacro
#define vtkDebugMacro(x)
Definition: vtkSetGet.h:464
vtkPostgreSQLDatabase::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkPostgreSQLDatabase::IsOpen
bool IsOpen()
vtkObject::Modified
virtual void Modified()
vtkPostgreSQLDatabase
maintain a connection to a PostgreSQL database
Definition: vtkPostgreSQLDatabase.h:60
vtkPostgreSQLDatabase::DatabaseType
char * DatabaseType
Definition: vtkPostgreSQLDatabase.h:204
vtkPostgreSQLDatabase::URLMTime
vtkTimeStamp URLMTime
Definition: vtkPostgreSQLDatabase.h:200
vtkgl::table
GLenum GLsizei GLenum GLenum const GLvoid * table
Definition: vtkgl.h:11332
vtkPostgreSQLDatabase::ServerPort
int ServerPort
Definition: vtkPostgreSQLDatabase.h:209
vtkPostgreSQLDatabase::OpenInternal
bool OpenInternal(const char *connectionOptions)
vtkPostgreSQLDatabase::Connection
vtkPostgreSQLDatabasePrivate * Connection
Definition: vtkPostgreSQLDatabase.h:201
vtkSQLDatabase.h
vtkPostgreSQLDatabase::Close
void Close()
vtkPostgreSQLDatabase::SetServerPort
virtual void SetServerPort(int)
Definition: vtkPostgreSQLDatabase.h:251
vtkPostgreSQLDatabase::User
char * User
Definition: vtkPostgreSQLDatabase.h:206
vtkPostgreSQLDatabase::GetTables
vtkStringArray * GetTables()
vtkPostgreSQLDatabase::Tables
vtkStringArray * Tables
Definition: vtkPostgreSQLDatabase.h:203
vtkPostgreSQLDatabase::ConnectOptions
char * ConnectOptions
Definition: vtkPostgreSQLDatabase.h:210
vtkObjectBase::GetClassName
const char * GetClassName() const
vtkPostgreSQLDatabase::SetConnectOptions
virtual void SetConnectOptions(const char *)
vtkTimeStamp::Modified
void Modified()
vtkPostgreSQLDatabase::vtkPostgreSQLDatabase
vtkPostgreSQLDatabase()
vtkPostgreSQLDatabase::ConnectionMTime
vtkTimeStamp ConnectionMTime
Definition: vtkPostgreSQLDatabase.h:202
vtkPostgreSQLDatabase::CreateDatabase
bool CreateDatabase(const char *dbName, bool dropExisting=false)
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkPostgreSQLQuery
vtkSQLQuery implementation for PostgreSQL databases
Definition: vtkPostgreSQLQuery.h:50
vtkSetStringMacro
#define vtkSetStringMacro(name)
Definition: vtkSetGet.h:104
vtkPostgreSQLDatabase::GetDatabases
vtkStringArray * GetDatabases()
vtkPostgreSQLDatabase::HasError
virtual bool HasError()
vtkPostgreSQLDatabase::GetServerPortMaxValue
virtual int GetServerPortMaxValue()
Definition: vtkPostgreSQLDatabase.h:130
vtkPostgreSQLDatabase::NullTrailingWhitespace
void NullTrailingWhitespace(char *msg)
vtkX3D::url
@ url
Definition: vtkX3D.h:233
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkGetStringMacro
vtkGetStringMacro(ExtensionsString)
vtkPostgreSQLDatabase::ParseURL
virtual bool ParseURL(const char *url)
vtkPostgreSQLDatabase::GetRecord
vtkStringArray * GetRecord(const char *table)
VTKIOPOSTGRESQL_EXPORT
#define VTKIOPOSTGRESQL_EXPORT
Definition: vtkIOPostgreSQLModule.h:15
vtkSQLDatabaseSchema
represent an SQL database schema
Definition: vtkSQLDatabaseSchema.h:64
vtkPostgreSQLDatabase::UpdateDataTypeMap
void UpdateDataTypeMap()
vtkPostgreSQLDatabase::LastErrorText
char * LastErrorText
Definition: vtkPostgreSQLDatabase.h:211
vtkStringArray
a vtkAbstractArray subclass for strings
Definition: vtkStringArray.h:45
vtkPostgreSQLDatabase::DropDatabase
bool DropDatabase(const char *dbName)
vtkSetStringPlusMTimeMacro
#define vtkSetStringPlusMTimeMacro(className, name, timeStamp)
Definition: vtkPostgreSQLDatabase.h:221
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:48
vtkPostgreSQLDatabase::SetDatabaseName
virtual void SetDatabaseName(const char *)
vtkPostgreSQLDatabase::GetURL
virtual vtkStdString GetURL()
vtkPostgreSQLDatabase::SetUser
virtual void SetUser(const char *)
vtkSQLQuery
executes an sql query and retrieves results
Definition: vtkSQLQuery.h:74
vtkPostgreSQLDatabase::GetLastErrorText
const char * GetLastErrorText()
vtkPostgreSQLDatabase::DatabaseName
char * DatabaseName
Definition: vtkPostgreSQLDatabase.h:208
vtkPostgreSQLDatabase::SetHostName
virtual void SetHostName(const char *)
vtkPostgreSQLDatabase::GetQueryInstance
vtkSQLQuery * GetQueryInstance()
vtkSQLDatabase
maintain a connection to an sql database
Definition: vtkSQLDatabase.h:90
vtkIOPostgreSQLModule.h