mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
ParaView-5.0.1: Added the source-tree to ThirdParty-dev and patched as described in the README file
Resolves bug-report http://bugs.openfoam.org/view.php?id=2098
This commit is contained in:
169
ParaView-5.0.1/VTK/IO/MySQL/vtkTableToMySQLWriter.cxx
Normal file
169
ParaView-5.0.1/VTK/IO/MySQL/vtkTableToMySQLWriter.cxx
Normal file
@ -0,0 +1,169 @@
|
||||
/*=========================================================================
|
||||
|
||||
Program: Visualization Toolkit
|
||||
Module: vtkTableToMySQLWriter.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.
|
||||
|
||||
=========================================================================*/
|
||||
#include "vtkAbstractArray.h"
|
||||
#include "vtkInformation.h"
|
||||
#include "vtkObjectFactory.h"
|
||||
#include "vtkMySQLDatabase.h"
|
||||
#include "vtkMySQLQuery.h"
|
||||
#include "vtkSmartPointer.h"
|
||||
#include "vtkTable.h"
|
||||
#include "vtkVariant.h"
|
||||
|
||||
#include "vtkTableToMySQLWriter.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkStandardNewMacro(vtkTableToMySQLWriter);
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkTableToMySQLWriter::vtkTableToMySQLWriter()
|
||||
{
|
||||
this->Database = 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkTableToMySQLWriter::~vtkTableToMySQLWriter()
|
||||
{
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkTableToMySQLWriter::WriteData()
|
||||
{
|
||||
//Make sure we have all the information we need to create a MySQL table
|
||||
if(!this->Database)
|
||||
{
|
||||
vtkErrorMacro(<<"No open database connection");
|
||||
return;
|
||||
}
|
||||
if(!this->Database->IsA("vtkMySQLDatabase"))
|
||||
{
|
||||
vtkErrorMacro(<<"Wrong type of database for this writer");
|
||||
return;
|
||||
}
|
||||
if(this->TableName == "")
|
||||
{
|
||||
vtkErrorMacro(<<"No table name specified!");
|
||||
return;
|
||||
}
|
||||
|
||||
//converting this table to MySQL will require two queries: one to create
|
||||
//the table, and another to populate its rows with data.
|
||||
std::string createTableQuery = "CREATE table ";
|
||||
createTableQuery += this->TableName;
|
||||
createTableQuery += "(";
|
||||
|
||||
std::string insertPreamble = "INSERT into ";
|
||||
insertPreamble += this->TableName;
|
||||
insertPreamble += "(";
|
||||
|
||||
//get the columns from the vtkTable to finish the query
|
||||
int numColumns = this->GetInput()->GetNumberOfColumns();
|
||||
for(int i = 0; i < numColumns; i++)
|
||||
{
|
||||
//get this column's name
|
||||
std::string columnName = this->GetInput()->GetColumn(i)->GetName();
|
||||
createTableQuery += columnName;
|
||||
insertPreamble += columnName;
|
||||
|
||||
//figure out what type of data is stored in this column
|
||||
std::string columnType = this->GetInput()->GetColumn(i)->GetClassName();
|
||||
|
||||
if( (columnType.find("String") != std::string::npos) ||
|
||||
(columnType.find("Data") != std::string::npos) ||
|
||||
(columnType.find("Variant") != std::string::npos) )
|
||||
{
|
||||
createTableQuery += " TEXT";
|
||||
}
|
||||
else if( (columnType.find("Double") != std::string::npos) ||
|
||||
(columnType.find("Float") != std::string::npos) )
|
||||
{
|
||||
createTableQuery += " DOUBLE";
|
||||
}
|
||||
else
|
||||
{
|
||||
createTableQuery += " INTEGER";
|
||||
}
|
||||
if(i == numColumns - 1)
|
||||
{
|
||||
createTableQuery += ");";
|
||||
insertPreamble += ") VALUES (";
|
||||
}
|
||||
else
|
||||
{
|
||||
createTableQuery += ", ";
|
||||
insertPreamble += ", ";
|
||||
}
|
||||
}
|
||||
|
||||
//perform the create table query
|
||||
vtkMySQLQuery *query =
|
||||
static_cast<vtkMySQLQuery*>(this->Database->GetQueryInstance());
|
||||
|
||||
query->SetQuery(createTableQuery.c_str());
|
||||
if(!query->Execute())
|
||||
{
|
||||
vtkErrorMacro(<<"Error performing 'create table' query");
|
||||
}
|
||||
|
||||
//iterate over the rows of the vtkTable to complete the insert query
|
||||
int numRows = this->GetInput()->GetNumberOfRows();
|
||||
for(int i = 0; i < numRows; i++)
|
||||
{
|
||||
std::string insertQuery = insertPreamble;
|
||||
for (int j = 0; j < numColumns; j++)
|
||||
{
|
||||
insertQuery += "'" + this->GetInput()->GetValue(i, j).ToString() + "'";
|
||||
if(j < numColumns - 1)
|
||||
{
|
||||
insertQuery += ", ";
|
||||
}
|
||||
}
|
||||
insertQuery += ");";
|
||||
//perform the insert query for this row
|
||||
query->SetQuery(insertQuery.c_str());
|
||||
if(!query->Execute())
|
||||
{
|
||||
vtkErrorMacro(<<"Error performing 'insert' query");
|
||||
}
|
||||
}
|
||||
|
||||
//cleanup and return
|
||||
query->Delete();
|
||||
return;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int vtkTableToMySQLWriter::FillInputPortInformation(int, vtkInformation *info)
|
||||
{
|
||||
info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkTable");
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkTable* vtkTableToMySQLWriter::GetInput()
|
||||
{
|
||||
return vtkTable::SafeDownCast(this->Superclass::GetInput());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
vtkTable* vtkTableToMySQLWriter::GetInput(int port)
|
||||
{
|
||||
return vtkTable::SafeDownCast(this->Superclass::GetInput(port));
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void vtkTableToMySQLWriter::PrintSelf(ostream& os, vtkIndent indent)
|
||||
{
|
||||
this->Superclass::PrintSelf(os,indent);
|
||||
}
|
||||
Reference in New Issue
Block a user