00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00045 #ifndef __vtkSQLDatabaseSchema_h
00046 #define __vtkSQLDatabaseSchema_h
00047
00048 #include "vtkObject.h"
00049
00050 #include <cstdarg>
00051
00052
00053
00054
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
00071
00072 enum DatabaseColumnType
00073 {
00074 SERIAL = 0,
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,
00094 UNIQUE = 1,
00095 PRIMARY_KEY = 2
00096 };
00098
00100
00101 enum DatabaseTriggerType
00102 {
00103 BEFORE_INSERT = 0,
00104 AFTER_INSERT = 1,
00105 BEFORE_UPDATE = 2,
00106 AFTER_UPDATE = 3,
00107 BEFORE_DELETE = 4,
00108 AFTER_DELETE = 5
00109 };
00110
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
00326
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
00367
00368 protected:
00369 vtkSQLDatabaseSchema();
00370 ~vtkSQLDatabaseSchema();
00371
00372 char* Name;
00373
00374 class vtkSQLDatabaseSchemaInternals* Internals;
00375
00376
00377 private:
00378 vtkSQLDatabaseSchema(const vtkSQLDatabaseSchema &);
00379 void operator=(const vtkSQLDatabaseSchema &);
00380 };
00381
00382 #endif // __vtkSQLDatabaseSchema_h