VTK
vtkSQLDatabaseSchema.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 Module: vtkSQLDatabaseSchema.h
5 
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*-------------------------------------------------------------------------
16  Copyright 2008 Sandia Corporation.
17  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
18  the U.S. Government retains certain rights in this software.
19 -------------------------------------------------------------------------*/
43 #ifndef vtkSQLDatabaseSchema_h
44 #define vtkSQLDatabaseSchema_h
45 
46 #include "vtkIOSQLModule.h" // For export macro
47 #include "vtkObject.h"
48 
49 #include <cstdarg> // Because one method has a variable list of arguments
50 
51 // This is a list of known supported VTK SQL backend classes.
52 // A particular SQL backend does not have to be listed here to be supported, but
53 // these macros allow for the specification of SQL backend-specific database schema items.
54 #define VTK_SQL_ALLBACKENDS "*" // works for all backends
55 #define VTK_SQL_MYSQL "vtkMySQLDatabase"
56 #define VTK_SQL_POSTGRESQL "vtkPostgreSQLDatabase"
57 #define VTK_SQL_SQLITE "vtkSQLiteDatabase"
58 
59 class vtkSQLDatabaseSchemaInternals;
60 
61 class VTKIOSQL_EXPORT vtkSQLDatabaseSchema : public vtkObject
62 {
63  public:
65  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
66  static vtkSQLDatabaseSchema* New();
67 
72  {
73  SERIAL = 0, // specifying the indices explicitly to prevent bad compiler mishaps
74  SMALLINT = 1,
75  INTEGER = 2,
76  BIGINT = 3,
77  VARCHAR = 4,
78  TEXT = 5,
79  REAL = 6,
80  DOUBLE = 7,
81  BLOB = 8,
82  TIME = 9,
83  DATE = 10,
84  TIMESTAMP = 11
85  };
86 
91  {
92  INDEX = 0, // Non-unique index of values in named columns
93  UNIQUE = 1, // Index of values in named columns required to have at most one entry per pair of valid values.
94  PRIMARY_KEY = 2 // Like UNIQUE but additionally this serves as the primary key for the table to speed up insertions.
95  };
96 
101  {
102  BEFORE_INSERT = 0, // Just before a row is inserted
103  AFTER_INSERT = 1, // Just after a row is inserted
104  BEFORE_UPDATE = 2, // Just before a row's values are changed
105  AFTER_UPDATE = 3, // Just after a row's values are changed
106  BEFORE_DELETE = 4, // Just before a row is deleted
107  AFTER_DELETE = 5 // Just after a row is deleted
108  };
109 
127  virtual int AddPreamble(
128  const char* preName, const char* preAction,
129  const char* preBackend = VTK_SQL_ALLBACKENDS );
130 
134  virtual int AddTable( const char* tblName );
135 
137 
142  virtual int AddColumnToTable(
143  int tblHandle, int colType, const char* colName,
144  int colSize, const char* colAttribs );
145  virtual int AddColumnToTable(
146  const char* tblName, int colType, const char* colName,
147  int colSize, const char* colAttribs )
148  {
149  return this->AddColumnToTable( this->GetTableHandleFromName( tblName ),
150  colType, colName, colSize, colAttribs );
151  }
153 
155 
160  virtual int AddIndexToTable(
161  int tblHandle, int idxType, const char* idxName );
162  virtual int AddIndexToTable(
163  const char* tblName, int idxType, const char* idxName )
164  {
165  return this->AddIndexToTable( this->GetTableHandleFromName( tblName ),
166  idxType, idxName );
167  }
169 
171 
176  virtual int AddColumnToIndex( int tblHandle, int idxHandle, int colHandle );
177  virtual int AddColumnToIndex(
178  const char* tblName, const char* idxName, const char* colName )
179  {
180  int tblHandle = this->GetTableHandleFromName( tblName );
181  return this->AddColumnToIndex( tblHandle,
182  this->GetIndexHandleFromName( tblName, idxName ),
183  this->GetColumnHandleFromName( tblName, colName ) );
184  }
186 
188 
194  virtual int AddTriggerToTable(
195  int tblHandle, int trgType, const char* trgName,
196  const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS );
197  virtual int AddTriggerToTable(
198  const char* tblName, int trgType, const char* trgName,
199  const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS )
200  {
201  return this->AddTriggerToTable( this->GetTableHandleFromName( tblName ),
202  trgType, trgName, trgAction, trgBackend );
203  }
205 
207 
218  virtual int AddOptionToTable(
219  int tblHandle, const char* optStr,
220  const char* optBackend = VTK_SQL_ALLBACKENDS );
221  virtual int AddOptionToTable(
222  const char* tblName, const char* optStr,
223  const char* optBackend = VTK_SQL_ALLBACKENDS )
224  {
225  return this->AddOptionToTable( this->GetTableHandleFromName( tblName ),
226  optStr, optBackend );
227  }
229 
233  int GetPreambleHandleFromName( const char* preName );
234 
238  const char* GetPreambleNameFromHandle( int preHandle );
239 
243  const char* GetPreambleActionFromHandle( int preHandle );
244 
248  const char* GetPreambleBackendFromHandle( int preHandle );
249 
253  int GetTableHandleFromName( const char* tblName );
254 
258  const char* GetTableNameFromHandle( int tblHandle );
259 
263  int GetIndexHandleFromName( const char* tblName, const char* idxName );
264 
268  const char* GetIndexNameFromHandle( int tblHandle, int idxHandle );
269 
273  int GetIndexTypeFromHandle( int tblHandle, int idxHandle );
274 
278  const char* GetIndexColumnNameFromHandle(
279  int tblHandle, int idxHandle, int cnmHandle );
280 
284  int GetColumnHandleFromName( const char* tblName, const char* colName );
285 
289  const char* GetColumnNameFromHandle( int tblHandle, int colHandle );
290 
294  int GetColumnTypeFromHandle( int tblHandle, int colHandle );
295 
299  int GetColumnSizeFromHandle( int tblHandle, int colHandle );
300 
304  const char* GetColumnAttributesFromHandle( int tblHandle, int colHandle );
305 
309  int GetTriggerHandleFromName( const char* tblName, const char* trgName );
310 
314  const char* GetTriggerNameFromHandle( int tblHandle, int trgHandle );
315 
319  int GetTriggerTypeFromHandle( int tblHandle, int trgHandle );
320 
324  const char* GetTriggerActionFromHandle( int tblHandle, int trgHandle );
325 
329  const char* GetTriggerBackendFromHandle( int tblHandle, int trgHandle );
330 
334  const char* GetOptionTextFromHandle( int tblHandle, int optHandle );
335 
339  const char* GetOptionBackendFromHandle( int tblHandle, int trgHandle );
340 
344  void Reset();
345 
349  int GetNumberOfPreambles();
350 
354  int GetNumberOfTables();
355 
359  int GetNumberOfColumnsInTable( int tblHandle );
360 
364  int GetNumberOfIndicesInTable( int tblHandle );
365 
369  int GetNumberOfColumnNamesInIndex( int tblHandle, int idxHandle );
370 
374  int GetNumberOfTriggersInTable( int tblHandle );
375 
379  int GetNumberOfOptionsInTable( int tblHandle );
380 
382 
385  vtkSetStringMacro(Name);
386  vtkGetStringMacro(Name);
388 
389  // Tokens passed to AddTable to indicate the type of data that follows. Random integers chosen to prevent mishaps.
391  {
392  COLUMN_TOKEN = 58,
393  INDEX_TOKEN = 63,
394  INDEX_COLUMN_TOKEN = 65,
395  END_INDEX_TOKEN = 75,
396  TRIGGER_TOKEN = 81,
397  OPTION_TOKEN = 86,
398  END_TABLE_TOKEN = 99
399  };
400 
430  int AddTableMultipleArguments( const char* tblName, ... );
431 
432  protected:
434  ~vtkSQLDatabaseSchema() VTK_OVERRIDE;
435 
436  char* Name;
437 
438  class vtkSQLDatabaseSchemaInternals* Internals;
439 
440  private:
441  vtkSQLDatabaseSchema(const vtkSQLDatabaseSchema &) VTK_DELETE_FUNCTION;
442  void operator=(const vtkSQLDatabaseSchema &) VTK_DELETE_FUNCTION;
443 };
444 
445 #endif // vtkSQLDatabaseSchema_h
abstract base class for most VTK objects
Definition: vtkObject.h:53
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual int AddTriggerToTable(const char *tblName, int trgType, const char *trgName, const char *trgAction, const char *trgBackend=VTK_SQL_ALLBACKENDS)
Add a (possibly backend-specific) trigger action to a table.
virtual int AddColumnToTable(const char *tblName, int colType, const char *colName, int colSize, const char *colAttribs)
Add a column to table.
represent an SQL database schema
DatabaseColumnType
Basic data types for database columns.
a simple class to control print indentation
Definition: vtkIndent.h:33
DatabaseTriggerType
Events where database triggers can be registered.
#define VTK_SQL_ALLBACKENDS
DatabaseIndexType
Types of indices that can be generated for database tables.
vtkGetStringMacro(ExtensionsString)
Returns a string listing all available extensions.
virtual int AddColumnToIndex(const char *tblName, const char *idxName, const char *colName)
Add a column to a table index.
virtual int AddOptionToTable(const char *tblName, const char *optStr, const char *optBackend=VTK_SQL_ALLBACKENDS)
Add (possibly backend-specific) text to the end of a CREATE TABLE (...) statement.
virtual int AddIndexToTable(const char *tblName, int idxType, const char *idxName)
Add an index to table.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...