VTK
dox/IO/vtkSQLDatabaseSchema.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003 Program:   Visualization Toolkit
00004 Module:    vtkSQLDatabaseSchema.h
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 -------------------------------------------------------------------------*/
00045 #ifndef __vtkSQLDatabaseSchema_h
00046 #define __vtkSQLDatabaseSchema_h
00047 
00048 #include "vtkObject.h"
00049 
00050 #include <cstdarg> // Because one method has a variable list of arguments
00051 
00052 // This is a list of known supported VTK SQL backend classes.
00053 // A particular SQL backend does not have to be listed here to be supported, but
00054 // these macros allow for the specification of SQL backend-specific database schema items.
00055 #define VTK_SQL_ALLBACKENDS      "*" // works for all backends
00056 #define VTK_SQL_MYSQL            "vtkMySQLDatabase"
00057 #define VTK_SQL_POSTGRESQL       "vtkPostgreSQLDatabase"
00058 #define VTK_SQL_SQLITE           "vtkSQLiteDatabase"
00059 
00060 class vtkSQLDatabaseSchemaInternals;
00061 
00062 class VTK_IO_EXPORT vtkSQLDatabaseSchema : public vtkObject
00063 {
00064  public:
00065   vtkTypeMacro(vtkSQLDatabaseSchema, vtkObject);
00066   void PrintSelf(ostream& os, vtkIndent indent);
00067   static vtkSQLDatabaseSchema* New();
00068 
00069   //BTX
00071 
00072   enum DatabaseColumnType
00073     {
00074       SERIAL    = 0, // specifying the indices explicitly to prevent bad compiler mishaps
00075       SMALLINT  = 1,
00076       INTEGER   = 2,
00077       BIGINT    = 3,
00078       VARCHAR   = 4,
00079       TEXT      = 5,
00080       REAL      = 6,
00081       DOUBLE    = 7,
00082       BLOB      = 8,
00083       TIME      = 9,
00084       DATE      = 10,
00085       TIMESTAMP = 11
00086     };
00088 
00090 
00091   enum DatabaseIndexType
00092     {
00093       INDEX       = 0, // Non-unique index of values in named columns
00094       UNIQUE      = 1, // Index of values in named columns required to have at most one entry per pair of valid values.
00095       PRIMARY_KEY = 2 // Like UNIQUE but additionally this serves as the primary key for the table to speed up insertions.
00096     };
00098 
00100 
00101   enum DatabaseTriggerType
00102     {
00103       BEFORE_INSERT = 0, // Just before a row is inserted
00104       AFTER_INSERT  = 1,  // Just after a row is inserted
00105       BEFORE_UPDATE = 2, // Just before a row's values are changed
00106       AFTER_UPDATE  = 3,  // Just after a row's values are changed
00107       BEFORE_DELETE = 4, // Just before a row is deleted
00108       AFTER_DELETE  = 5  // Just after a row is deleted
00109     };
00110   //ETX
00112 
00114 
00125   virtual int AddPreamble(
00126     const char* preName, const char* preAction,
00127     const char* preBackend = VTK_SQL_ALLBACKENDS );
00129 
00131   virtual int AddTable( const char* tblName );
00132 
00134 
00136   virtual int AddColumnToTable(
00137     int tblHandle, int colType, const char* colName,
00138     int colSize, const char* colAttribs );
00139   virtual int AddColumnToTable(
00140     const char* tblName, int colType, const char* colName,
00141     int colSize, const char* colAttribs )
00142     {
00143     return this->AddColumnToTable( this->GetTableHandleFromName( tblName ),
00144       colType, colName, colSize, colAttribs );
00145     }
00147 
00149 
00151   virtual int AddIndexToTable(
00152     int tblHandle, int idxType, const char* idxName );
00153   virtual int AddIndexToTable(
00154     const char* tblName, int idxType, const char* idxName )
00155     {
00156     return this->AddIndexToTable( this->GetTableHandleFromName( tblName ),
00157       idxType, idxName );
00158     }
00160 
00162 
00164   virtual int AddColumnToIndex( int tblHandle, int idxHandle, int colHandle );
00165   virtual int AddColumnToIndex(
00166     const char* tblName, const char* idxName, const char* colName )
00167     {
00168     int tblHandle = this->GetTableHandleFromName( tblName );
00169     return this->AddColumnToIndex( tblHandle,
00170       this->GetIndexHandleFromName( tblName, idxName ),
00171       this->GetColumnHandleFromName( tblName, colName ) );
00172     }
00174 
00176 
00180   virtual int AddTriggerToTable(
00181     int tblHandle, int trgType, const char* trgName,
00182     const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS );
00183   virtual int AddTriggerToTable(
00184     const char* tblName, int trgType, const char* trgName,
00185     const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS )
00186     {
00187     return this->AddTriggerToTable( this->GetTableHandleFromName( tblName ),
00188       trgType, trgName, trgAction, trgBackend );
00189     }
00191 
00193 
00199   virtual int AddOptionToTable(
00200     int tblHandle, const char* optStr,
00201     const char* optBackend = VTK_SQL_ALLBACKENDS );
00202   virtual int AddOptionToTable(
00203     const char* tblName, const char* optStr,
00204     const char* optBackend = VTK_SQL_ALLBACKENDS )
00205     {
00206     return this->AddOptionToTable( this->GetTableHandleFromName( tblName ),
00207       optStr, optBackend );
00208     }
00210 
00212   int GetPreambleHandleFromName( const char* preName );
00213 
00215   const char* GetPreambleNameFromHandle( int preHandle );
00216 
00218   const char* GetPreambleActionFromHandle( int preHandle );
00219 
00221   const char* GetPreambleBackendFromHandle( int preHandle );
00222 
00224   int GetTableHandleFromName( const char* tblName );
00225 
00227   const char* GetTableNameFromHandle( int tblHandle );
00228 
00231   int GetIndexHandleFromName( const char* tblName, const char* idxName );
00232 
00234   const char* GetIndexNameFromHandle( int tblHandle, int idxHandle );
00235 
00237   int GetIndexTypeFromHandle( int tblHandle, int idxHandle );
00238 
00240 
00242   const char* GetIndexColumnNameFromHandle(
00243     int tblHandle, int idxHandle, int cnmHandle );
00245 
00248   int GetColumnHandleFromName( const char* tblName, const char* colName );
00249 
00252   const char* GetColumnNameFromHandle( int tblHandle, int colHandle );
00253 
00256   int GetColumnTypeFromHandle( int tblHandle, int colHandle );
00257 
00260   int GetColumnSizeFromHandle( int tblHandle, int colHandle );
00261 
00264   const char* GetColumnAttributesFromHandle( int tblHandle, int colHandle );
00265 
00268   int GetTriggerHandleFromName( const char* tblName, const char* trgName );
00269 
00272   const char* GetTriggerNameFromHandle( int tblHandle, int trgHandle );
00273 
00276   int GetTriggerTypeFromHandle( int tblHandle, int trgHandle );
00277 
00280   const char* GetTriggerActionFromHandle( int tblHandle, int trgHandle );
00281 
00284   const char* GetTriggerBackendFromHandle( int tblHandle, int trgHandle );
00285 
00288   const char* GetOptionTextFromHandle( int tblHandle, int optHandle );
00289 
00292   const char* GetOptionBackendFromHandle( int tblHandle, int trgHandle );
00293 
00295   void Reset();
00296 
00298   int GetNumberOfPreambles();
00299 
00301   int GetNumberOfTables();
00302 
00304   int GetNumberOfColumnsInTable( int tblHandle );
00305 
00307   int GetNumberOfIndicesInTable( int tblHandle );
00308 
00311   int GetNumberOfColumnNamesInIndex( int tblHandle, int idxHandle );
00312 
00314   int GetNumberOfTriggersInTable( int tblHandle );
00315 
00317   int GetNumberOfOptionsInTable( int tblHandle );
00318 
00320 
00321   vtkSetStringMacro(Name);
00322   vtkGetStringMacro(Name);
00324 
00325   //BTX
00326   // Tokens passed to AddTable to indicate the type of data that follows. Random integers chosen to prevent mishaps.
00327   enum VarargTokens
00328     {
00329       COLUMN_TOKEN       = 58,
00330       INDEX_TOKEN        = 63,
00331       INDEX_COLUMN_TOKEN = 65,
00332       END_INDEX_TOKEN    = 75,
00333       TRIGGER_TOKEN      = 81,
00334       OPTION_TOKEN       = 86,
00335       END_TABLE_TOKEN    = 99
00336     };
00337 
00339 
00364   int AddTableMultipleArguments( const char* tblName, ... );
00365   //ETX
00367 
00368  protected:
00369   vtkSQLDatabaseSchema();
00370   ~vtkSQLDatabaseSchema();
00371 
00372   char* Name;
00373 //BTX
00374   class vtkSQLDatabaseSchemaInternals* Internals;
00375 //ETX
00376 
00377  private:
00378   vtkSQLDatabaseSchema(const vtkSQLDatabaseSchema &); // Not implemented.
00379   void operator=(const vtkSQLDatabaseSchema &); // Not implemented.
00380 };
00381 
00382 #endif // __vtkSQLDatabaseSchema_h