mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
213 lines
8.1 KiB
C++
213 lines
8.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkSQLQuery.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
// .NAME vtkSQLQuery - executes an sql query and retrieves results
|
|
//
|
|
// .SECTION Description
|
|
// The abstract superclass of SQL query classes. Instances of subclasses
|
|
// of vtkSQLQuery are created using the GetQueryInstance() function in
|
|
// vtkSQLDatabase. To implement a query connection for a new database
|
|
// type, subclass both vtkSQLDatabase and vtkSQLQuery, and implement the
|
|
// required functions. For the query class, this involves the following:
|
|
//
|
|
// Execute() - Execute the query on the database. No results need to be
|
|
// retrieved at this point, unless you are performing caching.
|
|
//
|
|
// GetNumberOfFields() - After Execute() is performed, returns the number
|
|
// of fields in the query results.
|
|
//
|
|
// GetFieldName() - The name of the field at an index.
|
|
//
|
|
// GetFieldType() - The data type of the field at an index.
|
|
//
|
|
// NextRow() - Advances the query results by one row, and returns whether
|
|
// there are more rows left in the query.
|
|
//
|
|
// DataValue() - Extract a single data value from the current row.
|
|
//
|
|
// Begin/Rollback/CommitTransaction() - These methods are optional but
|
|
// recommended if the database supports transactions.
|
|
//
|
|
// .SECTION Thanks
|
|
// Thanks to Andrew Wilson from Sandia National Laboratories for his work
|
|
// on the database classes.
|
|
//
|
|
// .SECTION See Also
|
|
// vtkSQLDatabase
|
|
|
|
#ifndef vtkSQLQuery_h
|
|
#define vtkSQLQuery_h
|
|
|
|
#include "vtkIOSQLModule.h" // For export macro
|
|
#include "vtkRowQuery.h"
|
|
#include "vtkStdString.h" // for EscapeString()
|
|
|
|
class vtkSQLDatabase;
|
|
class vtkVariant;
|
|
class vtkVariantArray;
|
|
|
|
class VTKIOSQL_EXPORT vtkSQLQuery : public vtkRowQuery
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkSQLQuery, vtkRowQuery);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// The query string to be executed. Since some databases will
|
|
// process the query string as soon as it's set, this method returns
|
|
// a boolean to indicate success or failure.
|
|
virtual bool SetQuery(const char *query);
|
|
virtual const char *GetQuery();
|
|
|
|
// Description:
|
|
// Return true if the query is active (i.e. execution was successful
|
|
// and results are ready to be fetched). Returns false on error or
|
|
// inactive query.
|
|
bool IsActive() { return this->Active; }
|
|
|
|
// Description:
|
|
// Execute the query. This must be performed
|
|
// before any field name or data access functions
|
|
// are used.
|
|
virtual bool Execute() = 0;
|
|
|
|
// Description:
|
|
// Begin, commit, or roll back a transaction. If the underlying
|
|
// database does not support transactions these calls will do
|
|
// nothing.
|
|
virtual bool BeginTransaction() { return true; }
|
|
virtual bool CommitTransaction() { return true; }
|
|
virtual bool RollbackTransaction() { return true; }
|
|
|
|
// Description:
|
|
// Return the database associated with the query.
|
|
vtkGetObjectMacro(Database, vtkSQLDatabase);
|
|
|
|
//BTX
|
|
// Description:
|
|
// Bind a parameter to a placeholder in a query. A full discussion
|
|
// of this feature is beyond the scope of this header file, but in
|
|
// short, here's how it works:
|
|
//
|
|
// Instead of saying "SELECT foo FROM mytable WHERE myfield = 12345"
|
|
// you can say "SELECT foo FROM mytable WHERE myfield = ?". The ?
|
|
// character is a placeholder for a parameter that must then be
|
|
// bound. Call BindParameter(0, 12345) to bind the integer value
|
|
// 12345 to that field. Placeholders are indexed starting at 0.
|
|
//
|
|
// You are responsible for making sure that the types match when you
|
|
// call BindParameter. You don't have to get it precisely correct:
|
|
// in general, the SQL driver is smart enough to do things like cast
|
|
// a short to a long or a float to a double.
|
|
//
|
|
// Bound parameters were introduced in ANSI SQL 92. Please see that
|
|
// standard for more information.
|
|
//
|
|
// Most of these methods are excluded from wrapping because the Java
|
|
// wrapper treats all integer types from char up through 64-bit long
|
|
// as 'int'. This is incorrect behavior but what else am I going to
|
|
// do?
|
|
//
|
|
// Finally, the default implementation for BindParameter(int,
|
|
// vtkVariant) dispatches to one of the more type-specific versions. It
|
|
// should be OK to use in database drivers without modification.
|
|
|
|
virtual bool BindParameter(int index, unsigned char value);
|
|
virtual bool BindParameter(int index, unsigned short value);
|
|
virtual bool BindParameter(int index, unsigned int value);
|
|
virtual bool BindParameter(int index, unsigned long value);
|
|
// The C and C++ standards leave it up to each compiler to decide
|
|
// whether chars are signed or unsigned by default. All the other
|
|
// types are signed unless otherwise specified.
|
|
virtual bool BindParameter(int index, signed char value);
|
|
virtual bool BindParameter(int index, short value);
|
|
//ETX
|
|
virtual bool BindParameter(int index, int value);
|
|
//BTX
|
|
virtual bool BindParameter(int index, long value);
|
|
virtual bool BindParameter(int index, vtkTypeUInt64 value);
|
|
virtual bool BindParameter(int index, vtkTypeInt64 value);
|
|
//ETX
|
|
virtual bool BindParameter(int index, float value);
|
|
virtual bool BindParameter(int index, double value);
|
|
// Description:
|
|
// Bind a string value -- string must be null-terminated
|
|
virtual bool BindParameter(int index, const char *stringValue);
|
|
// Description:
|
|
// Bind a string value by specifying an array and a size
|
|
virtual bool BindParameter(int index, const char *stringValue, size_t length);
|
|
//BTX
|
|
virtual bool BindParameter(int index, const vtkStdString &string);
|
|
//ETX
|
|
virtual bool BindParameter(int index, vtkVariant var);
|
|
// Description:
|
|
// Bind a blob value. Not all databases support blobs as a data
|
|
// type. Check vtkSQLDatabase::IsSupported(VTK_SQL_FEATURE_BLOB) to
|
|
// make sure.
|
|
virtual bool BindParameter(int index, const void *data, size_t length);
|
|
// Description:
|
|
// Reset all parameter bindings to NULL.
|
|
virtual bool ClearParameterBindings();
|
|
|
|
//BTX
|
|
// Description:
|
|
// Escape a string for inclusion into an SQL query.
|
|
// If \a addSurroundingQuotes is true, then quotation marks appropriate to the
|
|
// backend database will be added to enclose the escaped string. This argument
|
|
// defaults to true.
|
|
//
|
|
// A default, simple-minded implementation is provided for
|
|
// database backends that do not provde a way to escape
|
|
// strings for use inside queries.
|
|
virtual vtkStdString EscapeString( vtkStdString s, bool addSurroundingQuotes = true );
|
|
//ETX
|
|
|
|
// Description:
|
|
// Escape a string for inclusion into an SQL query.
|
|
// This method exists to provide a wrappable version of
|
|
// the method that takes and returns vtkStdString objects.
|
|
// You are responsible for calling delete [] on the
|
|
// character array returned by this method.
|
|
// This method simply calls the vtkStdString variant and thus
|
|
// need not be re-implemented by subclasses.
|
|
char* EscapeString( const char* src, bool addSurroundingQuotes );
|
|
|
|
protected:
|
|
vtkSQLQuery();
|
|
~vtkSQLQuery();
|
|
|
|
// Description:
|
|
// Set the database associated with the query.
|
|
// This is only to be called by the corresponding
|
|
// database class on creation of the query in
|
|
// GetQueryInstance().
|
|
void SetDatabase(vtkSQLDatabase* db);
|
|
|
|
char* Query;
|
|
vtkSQLDatabase* Database;
|
|
bool Active;
|
|
|
|
private:
|
|
vtkSQLQuery(const vtkSQLQuery &); // Not implemented.
|
|
void operator=(const vtkSQLQuery &); // Not implemented.
|
|
};
|
|
|
|
#endif // vtkSQLQuery_h
|
|
|