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

dox/IO/vtkSQLDatabaseSchema.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003 Program:   Visualization Toolkit
00004 Module:    $RCSfile: vtkSQLDatabaseSchema.h,v $
00005 
00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007 All rights reserved.
00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010 This software is distributed WITHOUT ANY WARRANTY; without even
00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012 PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*-------------------------------------------------------------------------
00016   Copyright 2008 Sandia Corporation.
00017   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00018   the U.S. Government retains certain rights in this software.
00019 -------------------------------------------------------------------------*/
00037 #ifndef __vtkSQLDatabaseSchema_h
00038 #define __vtkSQLDatabaseSchema_h
00039 
00040 #include "vtkObject.h"
00041 
00042 #include <cstdarg> // Because one method has a variable list of arguments 
00043 
00044 // This is a list of known supported VTK SQL backend classes. 
00045 // A particular SQL backend does not have to be listed here to be supported, but
00046 // these macros allow for the specification of SQL backend-specific database schema items.
00047 #define VTK_SQL_ALLBACKENDS      "*" // works for all backends
00048 #define VTK_SQL_MYSQL            "vtkMySQLDatabase"
00049 #define VTK_SQL_POSTGRESQL       "vtkPostgreSQLDatabase"
00050 #define VTK_SQL_SQLITE           "vtkSQLiteDatabase"
00051 
00052 class vtkSQLDatabaseSchemaInternals;
00053 
00054 class VTK_IO_EXPORT vtkSQLDatabaseSchema : public vtkObject
00055 {
00056  public:
00057   vtkTypeRevisionMacro(vtkSQLDatabaseSchema, vtkObject);
00058   void PrintSelf(ostream& os, vtkIndent indent);
00059   static vtkSQLDatabaseSchema *New();
00060 
00061   //BTX
00063 
00064   enum DatabaseColumnType
00065     {
00066       SERIAL    = 0, // specifying the indices explicitly to prevent bad compiler mishaps
00067       SMALLINT  = 1,
00068       INTEGER   = 2,
00069       BIGINT    = 3,
00070       VARCHAR   = 4,
00071       TEXT      = 5,
00072       REAL      = 6,
00073       DOUBLE    = 7,
00074       BLOB      = 8,
00075       TIME      = 9,
00076       DATE      = 10,
00077       TIMESTAMP = 11
00078     };
00080 
00082 
00083   enum DatabaseIndexType
00084     {
00085       INDEX       = 0, // Non-unique index of values in named columns
00086       UNIQUE      = 1, // Index of values in named columns required to have at most one entry per pair of valid values.
00087       PRIMARY_KEY = 2 // Like UNIQUE but additionally this serves as the primary key for the table to speed up insertions.
00088     };
00090 
00092 
00093   enum DatabaseTriggerType
00094     {
00095       BEFORE_INSERT = 0, // Just before a row is inserted
00096       AFTER_INSERT  = 1,  // Just after a row is inserted
00097       BEFORE_UPDATE = 2, // Just before a row's values are changed
00098       AFTER_UPDATE  = 3,  // Just after a row's values are changed
00099       BEFORE_DELETE = 4, // Just before a row is deleted
00100       AFTER_DELETE  = 5  // Just after a row is deleted
00101     };
00102   //ETX
00104 
00117   virtual int AddPreamble( const char* preName, 
00118                            const char* preAction,
00119                            const char* preBackend = VTK_SQL_ALLBACKENDS );
00120 
00122   virtual int AddTable( const char* tblName );
00123 
00124   virtual int AddColumnToTable( int tblHandle, 
00125                                 int colType, 
00126                                 const char* colName,
00127                                 int colSize, 
00128                                 const char* colAttribs );
00129 
00130   virtual int AddColumnToTable( const char* tblName, 
00131                                 int colType, 
00132                                 const char* colName,
00133                                 int colSize, 
00134                                 const char* colAttribs )
00135   {
00136     return this->AddColumnToTable( this->GetTableHandleFromName( tblName ),
00137                                    colType, 
00138                                    colName, 
00139                                    colSize, 
00140                                    colAttribs );
00141   }
00142 
00143   virtual int AddIndexToTable( int tblHandle, 
00144                                int idxType, 
00145                                const char* idxName );
00146 
00147   virtual int AddIndexToTable( const char* tblName, 
00148                                int idxType, 
00149                                const char* idxName )
00150   {
00151     return this->AddIndexToTable( this->GetTableHandleFromName( tblName ), 
00152                                   idxType, 
00153                                   idxName );
00154   }
00155 
00156   virtual int AddColumnToIndex( int tblHandle, 
00157                                 int idxHandle, 
00158                                 int colHandle );
00159 
00160   virtual int AddColumnToIndex( const char* tblName, 
00161                                 const char* idxName, 
00162                                 const char* colName )
00163   {
00164     int tblHandle = this->GetTableHandleFromName( tblName );
00165     return this->AddColumnToIndex( tblHandle,
00166                                    this->GetIndexHandleFromName( tblName, idxName ),
00167                                    this->GetColumnHandleFromName( tblName, colName ) );
00168   }
00169 
00170   virtual int AddTriggerToTable( int tblHandle,
00171                                  int trgType, 
00172                                  const char* trgName, 
00173                                  const char* trgAction,
00174                                  const char* trgBackend = VTK_SQL_ALLBACKENDS );
00175 
00176   virtual int AddTriggerToTable( const char* tblName,
00177                                  int trgType, 
00178                                  const char* trgName, 
00179                                  const char* trgAction,
00180                                  const char* trgBackend = VTK_SQL_ALLBACKENDS )
00181   {
00182     return this->AddTriggerToTable( this->GetTableHandleFromName( tblName ),
00183                                     trgType, 
00184                                     trgName, 
00185                                     trgAction,
00186                                     trgBackend );
00187   }
00188 
00190   int GetPreambleHandleFromName( const char* preName );
00191 
00193   const char* GetPreambleNameFromHandle( int preHandle );
00194 
00196   const char* GetPreambleActionFromHandle( int preHandle );
00197 
00199   const char* GetPreambleBackendFromHandle( int preHandle );
00200 
00202   int GetTableHandleFromName( const char* tblName );
00203 
00205   const char* GetTableNameFromHandle( int tblHandle );
00206 
00208 
00210   int GetIndexHandleFromName( const char* tblName, 
00211                               const char* idxName );
00213 
00215 
00216   const char* GetIndexNameFromHandle( int tblHandle, 
00217                                       int idxHandle );
00219 
00221 
00222   int GetIndexTypeFromHandle( int tblHandle, 
00223                               int idxHandle );
00225 
00227 
00229   const char* GetIndexColumnNameFromHandle( int tblHandle, 
00230                                             int idxHandle,
00231                                             int cnmHandle );
00233 
00235 
00237   int GetColumnHandleFromName( const char* tblName, 
00238                                const char* colName );
00240 
00242 
00244   const char* GetColumnNameFromHandle( int tblHandle, 
00245                                        int colHandle );
00247 
00249 
00251   int GetColumnTypeFromHandle( int tblHandle, 
00252                                int colHandle );
00254 
00256 
00258   int GetColumnSizeFromHandle( int tblHandle, 
00259                                int colHandle );
00261 
00263 
00265   const char* GetColumnAttributesFromHandle( int tblHandle, 
00266                                              int colHandle );
00268 
00270 
00272   int GetTriggerHandleFromName( const char* tblName, 
00273                                 const char* trgName );
00275 
00277 
00279   const char* GetTriggerNameFromHandle( int tblHandle, 
00280                                         int trgHandle );
00282 
00284 
00286   int GetTriggerTypeFromHandle( int tblHandle, 
00287                                 int trgHandle );
00289 
00291 
00293   const char* GetTriggerActionFromHandle( int tblHandle, 
00294                                           int trgHandle );
00296 
00298 
00300   const char* GetTriggerBackendFromHandle( int tblHandle, 
00301                                            int trgHandle );
00303 
00305   void Reset();
00306 
00308   int GetNumberOfPreambles();
00309 
00311   int GetNumberOfTables();
00312 
00314   int GetNumberOfColumnsInTable( int tblHandle );
00315 
00317   int GetNumberOfIndicesInTable( int tblHandle );
00318 
00320 
00322   int GetNumberOfColumnNamesInIndex( int tblHandle, 
00323                                      int idxHandle );
00325 
00327   int GetNumberOfTriggersInTable( int tblHandle );
00328 
00330 
00331   vtkSetStringMacro(Name);
00332   vtkGetStringMacro(Name);
00334 
00335   //BTX
00336   // Tokens passed to AddTable to indicate the type of data that follows. Random integers chosen to prevent mishaps.
00337   enum VarargTokens
00338     {
00339       COLUMN_TOKEN       = 58,
00340       INDEX_TOKEN        = 63,
00341       INDEX_COLUMN_TOKEN = 65,
00342       END_INDEX_TOKEN    = 75,
00343       TRIGGER_TOKEN      = 81,
00344       END_TABLE_TOKEN    = 99
00345     };
00346 
00348 
00373   int AddTableMultipleArguments( const char* tblName, ... );
00374   //ETX
00376 
00377  protected:
00378   vtkSQLDatabaseSchema();
00379   ~vtkSQLDatabaseSchema();
00380 
00381   char* Name;
00382 //BTX
00383   class vtkSQLDatabaseSchemaInternals* Internals;
00384 //ETX
00385 
00386  private:
00387   vtkSQLDatabaseSchema(const vtkSQLDatabaseSchema &); // Not implemented.
00388   void operator=(const vtkSQLDatabaseSchema &); // Not implemented.
00389 };
00390 
00391 #endif // __vtkSQLDatabaseSchema_h

Generated by  doxygen 1.7.1