00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00044 #ifndef __vtkPostgreSQLDatabase_h
00045 #define __vtkPostgreSQLDatabase_h
00046
00047 #include "vtkSQLDatabase.h"
00048
00049 class vtkPostgreSQLQuery;
00050 class vtkStringArray;
00051 class vtkPostgreSQLDatabasePrivate;
00052
00053 class VTK_IO_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
00054 {
00055
00056 friend class vtkPostgreSQLQuery;
00057 friend class vtkPostgreSQLQueryPrivate;
00058
00059
00060 public:
00061 vtkTypeRevisionMacro(vtkPostgreSQLDatabase, vtkSQLDatabase);
00062 void PrintSelf(ostream& os, vtkIndent indent);
00063 static vtkPostgreSQLDatabase *New();
00064
00068 bool Open();
00069
00071 void Close();
00072
00074 bool IsOpen();
00075
00077 vtkSQLQuery* GetQueryInstance();
00078
00080 virtual bool HasError();
00081
00083 const char* GetLastErrorText();
00084
00086
00087 vtkGetStringMacro(DatabaseType);
00089
00091
00092 virtual void SetHostName( const char* );
00093 vtkGetStringMacro(HostName);
00095
00097
00098 virtual void SetUser( const char* );
00099 vtkGetStringMacro(User);
00101
00103
00104 virtual void SetPassword( const char* );
00105 vtkGetStringMacro(Password);
00107
00109
00110 virtual void SetDatabaseName( const char* );
00111 vtkGetStringMacro(DatabaseName);
00113
00115
00116 virtual void SetConnectOptions( const char* );
00117 vtkGetStringMacro(ConnectOptions);
00119
00121
00122 virtual void SetServerPort( int );
00123 virtual int GetServerPortMinValue()
00124 {
00125 return 0;
00126 }
00127 virtual int GetServerPortMaxValue()
00128 {
00129 return VTK_INT_MAX;
00130 }
00131 vtkGetMacro(ServerPort, int);
00133
00139 virtual vtkStdString GetURL();
00140
00142 vtkStringArray* GetTables();
00143
00145 vtkStringArray* GetRecord( const char* table );
00146
00148 bool IsSupported( int feature );
00149
00151 vtkStringArray* GetDatabases();
00152
00156 bool CreateDatabase( const char* dbName, bool dropExisting = false );
00157
00160 bool DropDatabase( const char* dbName );
00161
00163
00167 virtual vtkStdString GetColumnSpecification(
00168 vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle );
00170
00171 protected:
00172 vtkPostgreSQLDatabase();
00173 ~vtkPostgreSQLDatabase();
00174
00175 vtkSetStringMacro(DatabaseType);
00176 vtkSetStringMacro(LastErrorText);
00177 void NullTrailingWhitespace( char* msg );
00178 bool OpenInternal( const char* connectionOptions );
00179
00180 vtkTimeStamp URLMTime;
00181 vtkPostgreSQLDatabasePrivate* Connection;
00182 vtkTimeStamp ConnectionMTime;
00183 char* DatabaseType;
00184 char* HostName;
00185 char* User;
00186 char* Password;
00187 char* DatabaseName;
00188 int ServerPort;
00189 char* ConnectOptions;
00190 char* LastErrorText;
00191
00192 private:
00193 vtkPostgreSQLDatabase( const vtkPostgreSQLDatabase& );
00194 void operator = ( const vtkPostgreSQLDatabase& );
00195 };
00196
00197
00198
00199
00200 #define vtkSetStringPlusMTimeMacro(className,name,timeStamp) \
00201 inline void className::Set##name (const char* _arg) \
00202 { \
00203 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " << (_arg?_arg:"(null)") ); \
00204 if ( this->name == NULL && _arg == NULL) { return;} \
00205 if ( this->name && _arg && (!strcmp(this->name,_arg))) { return;} \
00206 if (this->name) { delete [] this->name; } \
00207 if (_arg) \
00208 { \
00209 size_t n = strlen(_arg) + 1; \
00210 char *cp1 = new char[n]; \
00211 const char *cp2 = (_arg); \
00212 this->name = cp1; \
00213 do { *cp1++ = *cp2++; } while ( --n ); \
00214 } \
00215 else \
00216 { \
00217 this->name = NULL; \
00218 } \
00219 this->Modified(); \
00220 this->timeStamp.Modified(); \
00221 this->Close(); \
00222 }
00223
00224 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,HostName,URLMTime);
00225 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,User,URLMTime);
00226 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,Password,URLMTime);
00227 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,DatabaseName,URLMTime);
00228 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,ConnectOptions,URLMTime);
00229
00230 inline void vtkPostgreSQLDatabase::SetServerPort( int _arg )
00231 {
00232 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting ServerPort to " << _arg );
00233 if ( this->ServerPort != ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) ) )
00234 {
00235 this->ServerPort = ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) );
00236 this->Modified();
00237 this->URLMTime.Modified();
00238 this->Close();
00239 }
00240 }
00241
00242 #endif // __vtkPostgreSQLDatabase_h