/*========================================================================= Program: Visualization Toolkit Module: TestPostgreSQLTableReadWrite.cxx 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. =========================================================================*/ // .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 tableFileReader = vtkSmartPointer::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)); vtkStdString 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 writerToTest = vtkSmartPointer::New(); writerToTest->SetInputData(table); writerToTest->SetDatabase(db); writerToTest->SetTableName("tabletest"); writerToTest->Update(); cerr << "converting it back to a vtkTable" << endl; vtkSmartPointer readerToTest = vtkSmartPointer::New(); readerToTest->SetDatabase(db); readerToTest->SetTableName("tabletest"); readerToTest->Update(); cerr << "writing the table out to disk" << endl; vtkSmartPointer tableFileWriter = vtkSmartPointer::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.c_str() << "\" failed.\n"; cerr << "\"" << db->GetLastErrorText() << "\"" << endl; } // clean up memory db->Delete(); query->Delete(); return result; }