VTK  9.3.1
vtkSQLDatabaseSchema.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright 2008 Sandia Corporation
3 // SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
30 #ifndef vtkSQLDatabaseSchema_h
31 #define vtkSQLDatabaseSchema_h
32 
33 #include "vtkIOSQLModule.h" // For export macro
34 #include "vtkObject.h"
35 
36 #include <cstdarg> // Because one method has a variable list of arguments
37 
38 // This is a list of known supported VTK SQL backend classes.
39 // A particular SQL backend does not have to be listed here to be supported, but
40 // these macros allow for the specification of SQL backend-specific database schema items.
41 #define VTK_SQL_ALLBACKENDS "*" // works for all backends
42 #define VTK_SQL_MYSQL "vtkMySQLDatabase"
43 #define VTK_SQL_POSTGRESQL "vtkPostgreSQLDatabase"
44 #define VTK_SQL_SQLITE "vtkSQLiteDatabase"
45 
46 VTK_ABI_NAMESPACE_BEGIN
47 class vtkSQLDatabaseSchemaInternals;
48 
49 class VTKIOSQL_EXPORT vtkSQLDatabaseSchema : public vtkObject
50 {
51 public:
53  void PrintSelf(ostream& os, vtkIndent indent) override;
54  static vtkSQLDatabaseSchema* New();
55 
60  {
61  SERIAL = 0, // specifying the indices explicitly to prevent bad compiler mishaps
62  SMALLINT = 1,
63  INTEGER = 2,
64  BIGINT = 3,
65  VARCHAR = 4,
66  TEXT = 5,
67  REAL = 6,
68  DOUBLE = 7,
69  BLOB = 8,
70  TIME = 9,
71  DATE = 10,
72  TIMESTAMP = 11
73  };
74 
79  {
80  INDEX = 0, // Non-unique index of values in named columns
81  UNIQUE = 1, // Index of values in named columns required to have at most one entry per pair of
82  // valid values.
83  PRIMARY_KEY = 2 // Like UNIQUE but additionally this serves as the primary key for the table to
84  // speed up insertions.
85  };
86 
91  {
92  BEFORE_INSERT = 0, // Just before a row is inserted
93  AFTER_INSERT = 1, // Just after a row is inserted
94  BEFORE_UPDATE = 2, // Just before a row's values are changed
95  AFTER_UPDATE = 3, // Just after a row's values are changed
96  BEFORE_DELETE = 4, // Just before a row is deleted
97  AFTER_DELETE = 5 // Just after a row is deleted
98  };
99 
113  virtual int AddPreamble(
114  const char* preName, const char* preAction, const char* preBackend = VTK_SQL_ALLBACKENDS);
115 
119  virtual int AddTable(const char* tblName);
120 
122 
127  virtual int AddColumnToTable(
128  int tblHandle, int colType, const char* colName, int colSize, const char* colOpts);
129  virtual int AddColumnToTable(
130  const char* tblName, int colType, const char* colName, int colSize, const char* colAttribs)
131  {
132  return this->AddColumnToTable(
133  this->GetTableHandleFromName(tblName), colType, colName, colSize, colAttribs);
134  }
136 
138 
143  virtual int AddIndexToTable(int tblHandle, int idxType, const char* idxName);
144  virtual int AddIndexToTable(const char* tblName, int idxType, const char* idxName)
145  {
146  return this->AddIndexToTable(this->GetTableHandleFromName(tblName), idxType, idxName);
147  }
149 
151 
156  virtual int AddColumnToIndex(int tblHandle, int idxHandle, int colHandle);
157  virtual int AddColumnToIndex(const char* tblName, const char* idxName, const char* colName)
158  {
159  int tblHandle = this->GetTableHandleFromName(tblName);
160  return this->AddColumnToIndex(tblHandle, this->GetIndexHandleFromName(tblName, idxName),
161  this->GetColumnHandleFromName(tblName, colName));
162  }
164 
166 
172  virtual int AddTriggerToTable(int tblHandle, int trgType, const char* trgName,
173  const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS);
174  virtual int AddTriggerToTable(const char* tblName, int trgType, const char* trgName,
175  const char* trgAction, const char* trgBackend = VTK_SQL_ALLBACKENDS)
176  {
177  return this->AddTriggerToTable(
178  this->GetTableHandleFromName(tblName), trgType, trgName, trgAction, trgBackend);
179  }
181 
183 
194  virtual int AddOptionToTable(
195  int tblHandle, const char* optText, const char* optBackend = VTK_SQL_ALLBACKENDS);
196  virtual int AddOptionToTable(
197  const char* tblName, const char* optStr, const char* optBackend = VTK_SQL_ALLBACKENDS)
198  {
199  return this->AddOptionToTable(this->GetTableHandleFromName(tblName), optStr, optBackend);
200  }
202 
206  int GetPreambleHandleFromName(const char* preName);
207 
211  const char* GetPreambleNameFromHandle(int preHandle);
212 
216  const char* GetPreambleActionFromHandle(int preHandle);
217 
221  const char* GetPreambleBackendFromHandle(int preHandle);
222 
226  int GetTableHandleFromName(const char* tblName);
227 
231  const char* GetTableNameFromHandle(int tblHandle);
232 
236  int GetIndexHandleFromName(const char* tblName, const char* idxName);
237 
241  const char* GetIndexNameFromHandle(int tblHandle, int idxHandle);
242 
246  int GetIndexTypeFromHandle(int tblHandle, int idxHandle);
247 
251  const char* GetIndexColumnNameFromHandle(int tblHandle, int idxHandle, int cnmHandle);
252 
256  int GetColumnHandleFromName(const char* tblName, const char* colName);
257 
261  const char* GetColumnNameFromHandle(int tblHandle, int colHandle);
262 
266  int GetColumnTypeFromHandle(int tblHandle, int colHandle);
267 
271  int GetColumnSizeFromHandle(int tblHandle, int colHandle);
272 
276  const char* GetColumnAttributesFromHandle(int tblHandle, int colHandle);
277 
281  int GetTriggerHandleFromName(const char* tblName, const char* trgName);
282 
286  const char* GetTriggerNameFromHandle(int tblHandle, int trgHandle);
287 
291  int GetTriggerTypeFromHandle(int tblHandle, int trgHandle);
292 
296  const char* GetTriggerActionFromHandle(int tblHandle, int trgHandle);
297 
301  const char* GetTriggerBackendFromHandle(int tblHandle, int trgHandle);
302 
306  const char* GetOptionTextFromHandle(int tblHandle, int optHandle);
307 
311  const char* GetOptionBackendFromHandle(int tblHandle, int optHandle);
312 
316  void Reset();
317 
321  int GetNumberOfPreambles();
322 
326  int GetNumberOfTables();
327 
331  int GetNumberOfColumnsInTable(int tblHandle);
332 
336  int GetNumberOfIndicesInTable(int tblHandle);
337 
341  int GetNumberOfColumnNamesInIndex(int tblHandle, int idxHandle);
342 
346  int GetNumberOfTriggersInTable(int tblHandle);
347 
351  int GetNumberOfOptionsInTable(int tblHandle);
352 
354 
357  vtkSetStringMacro(Name);
358  vtkGetStringMacro(Name);
360 
361  // Tokens passed to AddTable to indicate the type of data that follows. Random integers chosen to
362  // prevent mishaps.
364  {
365  COLUMN_TOKEN = 58,
366  INDEX_TOKEN = 63,
367  INDEX_COLUMN_TOKEN = 65,
368  END_INDEX_TOKEN = 75,
369  TRIGGER_TOKEN = 81,
370  OPTION_TOKEN = 86,
371  END_TABLE_TOKEN = 99
372  };
373 
403  int AddTableMultipleArguments(const char* tblName, ...);
404 
405 protected:
407  ~vtkSQLDatabaseSchema() override;
408 
409  char* Name;
410 
411  class vtkSQLDatabaseSchemaInternals* Internals;
412 
413 private:
415  void operator=(const vtkSQLDatabaseSchema&) = delete;
416 };
417 
418 VTK_ABI_NAMESPACE_END
419 #endif // vtkSQLDatabaseSchema_h
abstract base class for most VTK objects
Definition: vtkObject.h:51
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:28
DatabaseTriggerType
Events where database triggers can be registered.
#define VTK_SQL_ALLBACKENDS
DatabaseIndexType
Types of indices that can be generated for database tables.
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...
class vtkSQLDatabaseSchemaInternals * Internals