You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.0 KiB
C++
188 lines
5.0 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkSQLiteDatabase.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.
|
|
-------------------------------------------------------------------------*/
|
|
/**
|
|
* @class vtkSQLiteDatabase
|
|
* @brief maintain a connection to an SQLite database
|
|
*
|
|
*
|
|
*
|
|
* SQLite (http://www.sqlite.org) is a public-domain SQL database
|
|
* written in C++. It's small, fast, and can be easily embedded
|
|
* inside other applications. Its databases are stored in files.
|
|
*
|
|
* This class provides a VTK interface to SQLite. You do not need to
|
|
* download any external libraries: we include a copy of SQLite 3.3.16
|
|
* in VTK/Utilities/vtksqlite.
|
|
*
|
|
* If you want to open a database that stays in memory and never gets
|
|
* written to disk, pass in the URL 'sqlite://:memory:'; otherwise,
|
|
* specify the file path by passing the URL 'sqlite://<file_path>'.
|
|
*
|
|
* @par Thanks:
|
|
* Thanks to Andrew Wilson and Philippe Pebay from Sandia National
|
|
* Laboratories for implementing this class.
|
|
*
|
|
* @sa
|
|
* vtkSQLiteQuery
|
|
*/
|
|
|
|
#ifndef vtkSQLiteDatabase_h
|
|
#define vtkSQLiteDatabase_h
|
|
|
|
#include "vtkIOSQLModule.h" // For export macro
|
|
#include "vtkSQLDatabase.h"
|
|
|
|
class vtkSQLQuery;
|
|
class vtkSQLiteQuery;
|
|
class vtkStringArray;
|
|
class vtkSQLiteDatabaseInternals;
|
|
|
|
class VTKIOSQL_EXPORT vtkSQLiteDatabase : public vtkSQLDatabase
|
|
{
|
|
|
|
friend class vtkSQLiteQuery;
|
|
|
|
public:
|
|
vtkTypeMacro(vtkSQLiteDatabase, vtkSQLDatabase);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
static vtkSQLiteDatabase* New();
|
|
|
|
enum
|
|
{
|
|
USE_EXISTING,
|
|
USE_EXISTING_OR_CREATE,
|
|
CREATE_OR_CLEAR,
|
|
CREATE
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Open a new connection to the database. You need to set the
|
|
* filename before calling this function. Returns true if the
|
|
* database was opened successfully; false otherwise.
|
|
* - USE_EXISTING (default) - Fail if the file does not exist.
|
|
* - USE_EXISTING_OR_CREATE - Create a new file if necessary.
|
|
* - CREATE_OR_CLEAR - Create new or clear existing file.
|
|
* - CREATE - Create new, fail if file exists.
|
|
*/
|
|
bool Open(const char* password) override;
|
|
bool Open(const char* password, int mode);
|
|
//@}
|
|
|
|
/**
|
|
* Close the connection to the database.
|
|
*/
|
|
void Close() override;
|
|
|
|
/**
|
|
* Return whether the database has an open connection
|
|
*/
|
|
bool IsOpen() override;
|
|
|
|
/**
|
|
* Return an empty query on this database.
|
|
*/
|
|
vtkSQLQuery* GetQueryInstance() override;
|
|
|
|
/**
|
|
* Get the list of tables from the database
|
|
*/
|
|
vtkStringArray* GetTables() override;
|
|
|
|
/**
|
|
* Get the list of fields for a particular table
|
|
*/
|
|
vtkStringArray* GetRecord(const char* table) override;
|
|
|
|
/**
|
|
* Return whether a feature is supported by the database.
|
|
*/
|
|
bool IsSupported(int feature) override;
|
|
|
|
/**
|
|
* Did the last operation generate an error
|
|
*/
|
|
bool HasError() override;
|
|
|
|
/**
|
|
* Get the last error text from the database
|
|
*/
|
|
const char* GetLastErrorText() override;
|
|
|
|
//@{
|
|
/**
|
|
* String representing database type (e.g. "sqlite").
|
|
*/
|
|
const char* GetDatabaseType() override { return this->DatabaseType; }
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* String representing the database filename.
|
|
*/
|
|
vtkGetStringMacro(DatabaseFileName);
|
|
vtkSetStringMacro(DatabaseFileName);
|
|
//@}
|
|
|
|
/**
|
|
* Get the URL of the database.
|
|
*/
|
|
vtkStdString GetURL() override;
|
|
|
|
/**
|
|
* Return the SQL string with the syntax to create a column inside a
|
|
* "CREATE TABLE" SQL statement.
|
|
* NB: this method implements the SQLite-specific syntax:
|
|
* <column name> <column type> <column attributes>
|
|
*/
|
|
vtkStdString GetColumnSpecification(
|
|
vtkSQLDatabaseSchema* schema, int tblHandle, int colHandle) override;
|
|
|
|
protected:
|
|
vtkSQLiteDatabase();
|
|
~vtkSQLiteDatabase() override;
|
|
|
|
/**
|
|
* Overridden to determine connection parameters given the URL.
|
|
* This is called by CreateFromURL() to initialize the instance.
|
|
* Look at CreateFromURL() for details about the URL format.
|
|
*/
|
|
bool ParseURL(const char* url) override;
|
|
|
|
private:
|
|
vtkSQLiteDatabaseInternals* Internal;
|
|
|
|
// We want this to be private, a user of this class
|
|
// should not be setting this for any reason
|
|
vtkSetStringMacro(DatabaseType);
|
|
|
|
vtkStringArray* Tables;
|
|
|
|
char* DatabaseType;
|
|
char* DatabaseFileName;
|
|
|
|
vtkStdString TempURL;
|
|
|
|
vtkSQLiteDatabase(const vtkSQLiteDatabase&) = delete;
|
|
void operator=(const vtkSQLiteDatabase&) = delete;
|
|
};
|
|
|
|
#endif // vtkSQLiteDatabase_h
|