VTK
|
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