• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/IO/vtkPostgreSQLDatabase.h

Go to the documentation of this file.
00001 /* -*- Mode: C++; -*- */
00002 /*=========================================================================
00003 
00004   Program:   Visualization Toolkit
00005   Module:    $RCSfile: vtkPostgreSQLDatabase.h,v $
00006 
00007   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00016 /*-------------------------------------------------------------------------
00017   Copyright 2008 Sandia Corporation.
00018   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00019   the U.S. Government retains certain rights in this software.
00020 -------------------------------------------------------------------------*/
00048 #ifndef __vtkPostgreSQLDatabase_h
00049 #define __vtkPostgreSQLDatabase_h
00050 
00051 #include "vtkSQLDatabase.h"
00052 
00053 class vtkPostgreSQLQuery;
00054 class vtkStringArray;
00055 class vtkPostgreSQLDatabasePrivate;
00056 struct PQconn;
00057 
00058 class VTK_IO_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
00059 {
00060   //BTX
00061   friend class vtkPostgreSQLQuery;
00062   friend class vtkPostgreSQLQueryPrivate;
00063   //ETX
00064 
00065 public:
00066   vtkTypeRevisionMacro(vtkPostgreSQLDatabase, vtkSQLDatabase);
00067   void PrintSelf(ostream& os, vtkIndent indent);
00068   static vtkPostgreSQLDatabase *New();
00069 
00073   bool Open( const char* password = 0 );
00074 
00076   void Close();
00077   
00079   bool IsOpen();
00080 
00082   vtkSQLQuery* GetQueryInstance();
00083   
00085   virtual bool HasError();
00086   
00088   const char* GetLastErrorText();
00089 
00091 
00092   vtkGetStringMacro(DatabaseType);
00094 
00096 
00097   virtual void SetHostName( const char* );
00098   vtkGetStringMacro(HostName);
00100 
00102 
00103   virtual void SetUser( const char* );
00104   vtkGetStringMacro(User);
00106 
00108   virtual void SetPassword( const char* );
00109 
00111 
00112   virtual void SetDatabaseName( const char* );
00113   vtkGetStringMacro(DatabaseName);
00115 
00117 
00118   virtual void SetConnectOptions( const char* );
00119   vtkGetStringMacro(ConnectOptions);
00121 
00123 
00124   virtual void SetServerPort( int );
00125   virtual int GetServerPortMinValue()
00126     {
00127     return 0;
00128     }
00129   virtual int GetServerPortMaxValue()
00130     {
00131     return VTK_INT_MAX;
00132     }
00133   vtkGetMacro(ServerPort, int);
00135   
00141   virtual vtkStdString GetURL();
00142 
00144   vtkStringArray* GetTables();
00145     
00147   vtkStringArray* GetRecord( const char* table );
00148 
00150   bool IsSupported( int feature );
00151 
00153   vtkStringArray* GetDatabases();
00154 
00158   bool CreateDatabase( const char* dbName, bool dropExisting = false );
00159 
00162   bool DropDatabase( const char* dbName );
00163 
00165 
00169   virtual vtkStdString GetColumnSpecification(
00170     vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle );
00172  
00173 protected:
00174   vtkPostgreSQLDatabase();
00175   ~vtkPostgreSQLDatabase();
00176 
00187   void UpdateDataTypeMap();
00188 
00192   virtual bool ParseURL(const char* url);
00193 
00194   vtkSetStringMacro(DatabaseType);
00195   vtkSetStringMacro(LastErrorText);
00196   void NullTrailingWhitespace( char* msg );
00197   bool OpenInternal( const char* connectionOptions );
00198 
00199   vtkTimeStamp URLMTime;
00200   vtkPostgreSQLDatabasePrivate *Connection; 
00201   vtkTimeStamp ConnectionMTime;
00202   char* DatabaseType;
00203   char* HostName;
00204   char* User;
00205   char* Password;
00206   char* DatabaseName;
00207   int ServerPort;
00208   char* ConnectOptions;
00209   char* LastErrorText;
00210   
00211 private:
00212   vtkPostgreSQLDatabase( const vtkPostgreSQLDatabase& ); // Not implemented.
00213   void operator = ( const vtkPostgreSQLDatabase& ); // Not implemented.
00214 };
00215 
00216 // This is basically the body of the SetStringMacro but with a
00217 // call to update an additional vtkTimeStamp. We inline the implementation
00218 // so that wrapping will work.
00219 #define vtkSetStringPlusMTimeMacro(className,name,timeStamp) \
00220   inline void className::Set##name (const char* _arg) \
00221   { \
00222     vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting " << #name " to " << (_arg?_arg:"(null)") ); \
00223     if ( this->name == NULL && _arg == NULL) { return;} \
00224     if ( this->name && _arg && (!strcmp(this->name,_arg))) { return;} \
00225     if (this->name) { delete [] this->name; } \
00226     if (_arg) \
00227       { \
00228           size_t n = strlen(_arg) + 1; \
00229           char *cp1 =  new char[n]; \
00230           const char *cp2 = (_arg); \
00231           this->name = cp1; \
00232           do { *cp1++ = *cp2++; } while ( --n ); \
00233           } \
00234      else \
00235       { \
00236           this->name = NULL; \
00237           } \
00238     this->Modified(); \
00239     this->timeStamp.Modified(); \
00240     this->Close(); /* Force a re-open on next query */ \
00241     }
00242 
00243 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,HostName,URLMTime);
00244 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,User,URLMTime);
00245 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,Password,URLMTime);
00246 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,DatabaseName,URLMTime);
00247 vtkSetStringPlusMTimeMacro(vtkPostgreSQLDatabase,ConnectOptions,URLMTime);
00248 
00249 inline void vtkPostgreSQLDatabase::SetServerPort( int _arg )
00250 {
00251   vtkDebugMacro(<< this->GetClassName() << " (" << this << "): setting ServerPort to " << _arg );
00252   if ( this->ServerPort != ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) ) )
00253     {
00254     this->ServerPort = ( _arg < 0 ? 0 : ( _arg > VTK_INT_MAX ? VTK_INT_MAX : _arg ) );
00255     this->Modified();
00256     this->URLMTime.Modified();
00257     this->Close(); // Force a re-open on next query
00258     }
00259 }
00260 
00261 #endif // __vtkPostgreSQLDatabase_h

Generated by  doxygen 1.7.1