1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
// .NAME Test of vtkTableToPostgreSQLWriter and vtkPostgreSQLToTableReader
// .SECTION Description
//
#include "vtkPostgreSQLDatabase.h"
#include "vtkSQLQuery.h"
#include "vtkSmartPointer.h"
#include "vtkTable.h"
#include "vtkTableReader.h"
#include "vtkTableWriter.h"
#include "vtksys/SystemTools.hxx"
#include "vtkIOPostgresSQLTestingCxxConfigure.h"
#include "vtkPostgreSQLToTableReader.h"
#include "vtkTableToPostgreSQLWriter.h"
int TestPostgreSQLTableReadWrite(int argc, char* argv[])
{
if (argc <= 1)
{
cerr << "Usage: " << argv[0] << " <.vtk table file>" << endl;
return 1;
}
cerr << "reading a vtkTable from file" << endl;
vtkSmartPointer<vtkTableReader> tableFileReader = vtkSmartPointer<vtkTableReader>::New();
tableFileReader->SetFileName(argv[1]);
vtkTable* table = tableFileReader->GetOutput();
tableFileReader->Update();
cerr << "opening a PostgreSQL database connection" << endl;
vtkPostgreSQLDatabase* db =
vtkPostgreSQLDatabase::SafeDownCast(vtkSQLDatabase::CreateFromURL(VTK_PSQL_TEST_URL));
std::string realDatabase = db->GetDatabaseName();
db->SetDatabaseName("template1"); // This is guaranteed to exist
bool status = db->Open();
if (!status)
{
cerr << "Couldn't open database.\n";
return 1;
}
if (!db->CreateDatabase(realDatabase.c_str(), true))
{
cerr << "Error: " << db->GetLastErrorText() << endl;
}
db->SetDatabaseName(realDatabase.c_str());
if (!db->Open())
{
cerr << "Error: " << db->GetLastErrorText() << endl;
return 1;
}
cerr << "creating a PostgreSQL table from a vtkTable" << endl;
vtkSmartPointer<vtkTableToPostgreSQLWriter> writerToTest =
vtkSmartPointer<vtkTableToPostgreSQLWriter>::New();
writerToTest->SetInputData(table);
writerToTest->SetDatabase(db);
writerToTest->SetTableName("tabletest");
writerToTest->Update();
cerr << "converting it back to a vtkTable" << endl;
vtkSmartPointer<vtkPostgreSQLToTableReader> readerToTest =
vtkSmartPointer<vtkPostgreSQLToTableReader>::New();
readerToTest->SetDatabase(db);
readerToTest->SetTableName("tabletest");
readerToTest->Update();
cerr << "writing the table out to disk" << endl;
vtkSmartPointer<vtkTableWriter> tableFileWriter = vtkSmartPointer<vtkTableWriter>::New();
tableFileWriter->SetFileName("TestPostgreSQLTableReadWrite.vtk");
tableFileWriter->SetInputConnection(readerToTest->GetOutputPort());
tableFileWriter->Update();
cerr << "verifying that it's the same as what we started with...";
int result = 0;
if (vtksys::SystemTools::FilesDiffer(argv[1], "TestPostgreSQLTableReadWrite.vtk"))
{
cerr << "it's not." << endl;
result = 1;
}
else
{
cerr << "it is!" << endl;
}
// drop the table we created
vtkSQLQuery* query = db->GetQueryInstance();
query->SetQuery("DROP TABLE tabletest");
query->Execute();
cerr << "dropping the database...";
if (!db->DropDatabase(realDatabase.c_str()))
{
cout << "Drop of \"" << realDatabase << "\" failed.\n";
cerr << "\"" << db->GetLastErrorText() << "\"" << endl;
}
// clean up memory
db->Delete();
query->Delete();
return result;
}
|