Skip to content

Commit 1c3e775

Browse files
committed
New classes to interface between vtkTables and SQL database tables
1 parent cd87bd0 commit 1c3e775

File tree

5 files changed

+60
-31
lines changed

5 files changed

+60
-31
lines changed

IO/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ vtkBase64OutputStream.cxx
3535
vtkBase64Utilities.cxx
3636
vtkCGMWriter.cxx
3737
vtkChacoReader.cxx
38+
vtkDatabaseToTableReader.cxx
3839
vtkDEMReader.cxx
3940
vtkDICOMImageReader.cxx
4041
vtkDataCompressor.cxx
@@ -116,6 +117,7 @@ vtkSLACReader.cxx
116117
vtkSQLDatabase.cxx
117118
vtkSQLDatabaseSchema.cxx
118119
vtkSQLiteDatabase.cxx
120+
vtkSQLiteToTableReader.cxx
119121
vtkSQLiteQuery.cxx
120122
vtkSQLQuery.cxx
121123
vtkSLCReader.cxx
@@ -129,6 +131,8 @@ vtkStructuredPointsReader.cxx
129131
vtkStructuredPointsWriter.cxx
130132
vtkTableReader.cxx
131133
vtkTableWriter.cxx
134+
vtkTableToDatabaseWriter.cxx
135+
vtkTableToSQLiteWriter.cxx
132136
vtkTecplotReader.cxx
133137
vtkTIFFReader.cxx
134138
vtkTIFFWriter.cxx
@@ -201,13 +205,15 @@ vtkZLibDataCompressor.cxx
201205

202206
SET_SOURCE_FILES_PROPERTIES(
203207
vtkAbstractParticleWriter
208+
vtkDatabaseToTableReader
204209
vtkDataCompressor
205210
vtkEnSightReader
206211
vtkGenericMovieWriter
207212
vtkMoleculeReaderBase
208213
vtkRowQuery
209214
vtkSQLDatabase
210215
vtkSQLQuery
216+
vtkTableToDatabaseWriter
211217
vtkVolumeReader
212218
vtkWriter
213219
vtkXMLCompositeDataReader.cxx
@@ -330,6 +336,8 @@ IF ( VTK_USE_POSTGRES AND POSTGRES_FOUND )
330336
${Kit_SRCS}
331337
vtkPostgreSQLDatabase.cxx
332338
vtkPostgreSQLQuery.cxx
339+
vtkPostgreSQLToTableReader.cxx
340+
vtkTableToPostgreSQLWriter.cxx
333341
)
334342
LINK_LIBRARIES( ${POSTGRES_LIBRARIES} )
335343
ENDIF ( VTK_USE_POSTGRES AND POSTGRES_FOUND )
@@ -356,6 +364,8 @@ IF ( VTK_USE_MYSQL AND MYSQL_FOUND )
356364
${Kit_SRCS}
357365
vtkMySQLDatabase.cxx
358366
vtkMySQLQuery.cxx
367+
vtkMySQLToTableReader.cxx
368+
vtkTableToMySQLWriter.cxx
359369
)
360370
LINK_LIBRARIES( ${MYSQL_LIBRARY} ${MYSQL_EXTRA_LIBRARIES} )
361371
ENDIF ( VTK_USE_MYSQL AND MYSQL_FOUND )

IO/Testing/Cxx/CMakeLists.txt

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,17 @@ ENDIF(VTK_USE_INFOVIS)
3535
IF(VTK_USE_METAIO)
3636
SET(ConditionalTests ${ConditionalTests} TestMetaIO.cxx)
3737
ENDIF(VTK_USE_METAIO)
38-
IF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL AND POSTGRES_FOUND)
38+
IF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL)
3939
SET(ConditionalTests ${ConditionalTests} TestPostgreSQLDatabase.cxx)
40-
ENDIF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL AND POSTGRES_FOUND)
40+
IF (VTK_DATA_ROOT)
41+
SET(ConditionalTests ${ConditionalTests} TestPostgreSQLTableReadWrite.cxx)
42+
ENDIF (VTK_DATA_ROOT)
43+
ENDIF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL)
4144
IF(VTK_USE_MYSQL AND VTK_MYSQL_TEST_URL)
4245
SET(ConditionalTests ${ConditionalTests} TestMySQLDatabase.cxx)
46+
IF (VTK_DATA_ROOT)
47+
SET(ConditionalTests ${ConditionalTests} TestMySQLTableReadWrite.cxx)
48+
ENDIF (VTK_DATA_ROOT)
4349
ENDIF(VTK_USE_MYSQL AND VTK_MYSQL_TEST_URL)
4450
IF(VTK_USE_ODBC AND VTK_ODBC_TEST_DSN)
4551
SET(ConditionalTests ${ConditionalTest} TestODBCDatabase.cxx)
@@ -70,6 +76,7 @@ CREATE_TEST_SOURCELIST(Tests ${KIT}CxxTests.cxx
7076
TestXML.cxx
7177
TestCompress.cxx
7278
TestSQLDatabaseSchema.cxx
79+
TestSQLiteTableReadWrite.cxx
7380
TestImageReader2Factory.cxx
7481
${ConditionalTests}
7582
EXTRA_INCLUDE vtkTestDriver.h
@@ -92,6 +99,8 @@ IF (VTK_DATA_ROOT)
9299
${VTK_DATA_ROOT}/Data/sample.xml)
93100
ADD_TEST(TestImageReader2Factory ${CXX_TEST_PATH}/${KIT}CxxTests TestImageReader2Factory
94101
${VTK_DATA_ROOT}/Baseline/${KIT}/TestHyperOctreeIO.png)
102+
ADD_TEST(TestSQLiteTableReadWrite ${CXX_TEST_PATH}/${KIT}CxxTests
103+
TestSQLiteTableReadWrite ${VTK_DATA_ROOT}/Baseline/IO/simple_table.vtk)
95104
IF(VTK_USE_METAIO)
96105
ADD_TEST(TestMetaIO ${CXX_TEST_PATH}/${KIT}CxxTests TestMetaIO
97106
${VTK_DATA_ROOT}/Data/HeadMRVolume.mhd)
@@ -143,11 +152,19 @@ ENDIF(VTK_USE_FFMPEG_ENCODER)
143152
IF(VTK_HAS_UINT64_ARRAY)
144153
ADD_TEST(TestSQLiteDatabase ${CXX_TEST_PATH}/${KIT}CxxTests TestSQLiteDatabase)
145154
ENDIF(VTK_HAS_UINT64_ARRAY)
146-
IF(VTK_USE_POSTGRES AND POSTGRES_FOUND AND VTK_PSQL_TEST_URL)
155+
IF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL)
147156
ADD_TEST(TestPostgreSQLDatabase ${CXX_TEST_PATH}/${KIT}CxxTests TestPostgreSQLDatabase)
148-
ENDIF(VTK_USE_POSTGRES AND POSTGRES_FOUND AND VTK_PSQL_TEST_URL)
157+
IF (VTK_DATA_ROOT)
158+
ADD_TEST(TestPostgreSQLTableReadWrite ${CXX_TEST_PATH}/${KIT}CxxTests
159+
TestPostgreSQLTableReadWrite ${VTK_DATA_ROOT}/Baseline/IO/simple_table.vtk)
160+
ENDIF (VTK_DATA_ROOT)
161+
ENDIF(VTK_USE_POSTGRES AND VTK_PSQL_TEST_URL)
149162
IF(VTK_USE_MYSQL AND VTK_MYSQL_TEST_URL)
150163
ADD_TEST(TestMySQLDatabase ${CXX_TEST_PATH}/${KIT}CxxTests TestMySQLDatabase)
164+
IF (VTK_DATA_ROOT)
165+
ADD_TEST(TestMySQLTableReadWrite ${CXX_TEST_PATH}/${KIT}CxxTests
166+
TestMySQLTableReadWrite ${VTK_DATA_ROOT}/Baseline/IO/simple_table.vtk)
167+
ENDIF (VTK_DATA_ROOT)
151168
ENDIF(VTK_USE_MYSQL AND VTK_MYSQL_TEST_URL)
152169
IF(VTK_USE_OGGTHEORA_ENCODER)
153170
ADD_TEST(TestOggTheoraWriter ${CXX_TEST_PATH}/${KIT}CxxTests TestOggTheoraWriter)

IO/vtkMySQLDatabase.cxx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,13 +349,13 @@ bool vtkMySQLDatabase::ParseURL(const char* URL)
349349
vtkstd::string urlstr( URL ? URL : "" );
350350
vtkstd::string protocol;
351351
vtkstd::string username;
352-
vtkstd::string unused;
352+
vtkstd::string password;
353353
vtkstd::string hostname;
354354
vtkstd::string dataport;
355355
vtkstd::string database;
356356

357357
if ( ! vtksys::SystemTools::ParseURL(
358-
urlstr, protocol, username, unused, hostname, dataport, database) )
358+
urlstr, protocol, username, password, hostname, dataport, database) )
359359
{
360360
vtkGenericWarningMacro( "Invalid URL: \"" << urlstr.c_str() << "\"" );
361361
return false;
@@ -367,6 +367,10 @@ bool vtkMySQLDatabase::ParseURL(const char* URL)
367367
{
368368
this->SetUser(username.c_str());
369369
}
370+
if ( password.size() )
371+
{
372+
this->SetPassword(password.c_str());
373+
}
370374
if ( dataport.size() )
371375
{
372376
this->SetServerPort(atoi(dataport.c_str()));

IO/vtkPostgreSQLDatabase.cxx

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ vtkPostgreSQLDatabase::vtkPostgreSQLDatabase()
5353
this->ServerPort = -1;
5454
this->ConnectOptions = 0;
5555
this->LastErrorText = 0;
56+
this->Tables = vtkStringArray::New();
57+
this->Tables->Register(this);
58+
this->Tables->Delete();
5659
}
5760

5861
// ----------------------------------------------------------------------
@@ -69,6 +72,7 @@ vtkPostgreSQLDatabase::~vtkPostgreSQLDatabase()
6972
this->SetConnectOptions( 0 );
7073
this->SetDatabaseType( 0 );
7174
this->SetLastErrorText( 0 );
75+
this->Tables->UnRegister(this);
7276
}
7377

7478
// ----------------------------------------------------------------------
@@ -260,10 +264,18 @@ bool vtkPostgreSQLDatabase::Open( const char* password )
260264
options += " user=";
261265
options += this->User;
262266
}
263-
if ( password && strlen( password ) > 0 )
267+
if ( password && this->Password != password )
268+
{
269+
if ( this->Password )
270+
{
271+
delete [] this->Password;
272+
}
273+
this->Password = password ? vtksys::SystemTools::DuplicateString( password ) : 0;
274+
}
275+
if ( this->Password && strlen( this->Password ) > 0 )
264276
{
265277
options += " password=";
266-
options += password;
278+
options += this->Password;
267279
}
268280
if ( this->ConnectOptions && strlen( this->ConnectOptions ) > 0 )
269281
{
@@ -278,14 +290,6 @@ bool vtkPostgreSQLDatabase::Open( const char* password )
278290
if ( this->OpenInternal( options.c_str() ) )
279291
{
280292
this->SetLastErrorText( 0 );
281-
if ( this->Password != password )
282-
{
283-
if ( this->Password )
284-
{
285-
delete [] this->Password;
286-
}
287-
this->Password = password ? vtksys::SystemTools::DuplicateString( password ) : 0;
288-
}
289293
return true;
290294
}
291295
}
@@ -295,14 +299,6 @@ bool vtkPostgreSQLDatabase::Open( const char* password )
295299
if ( this->OpenInternal( options.c_str() ) )
296300
{
297301
this->SetLastErrorText( 0 );
298-
if ( this->Password != password )
299-
{
300-
if ( this->Password )
301-
{
302-
delete this->Password;
303-
}
304-
this->Password = password ? vtksys::SystemTools::DuplicateString( password ) : 0;
305-
}
306302
return true;
307303
}
308304

@@ -382,14 +378,14 @@ bool vtkPostgreSQLDatabase::ParseURL( const char* URL )
382378
vtkstd::string urlstr( URL ? URL : "" );
383379
vtkstd::string protocol;
384380
vtkstd::string username;
385-
vtkstd::string unused;
381+
vtkstd::string password;
386382
vtkstd::string hostname;
387383
vtkstd::string dataport;
388384
vtkstd::string database;
389385

390386
// Okay now for all the other database types get more detailed info
391387
if ( ! vtksys::SystemTools::ParseURL(
392-
urlstr, protocol, username, unused, hostname, dataport, database) )
388+
urlstr, protocol, username, password, hostname, dataport, database) )
393389
{
394390
vtkErrorMacro( "Invalid URL: \"" << urlstr.c_str() << "\"" );
395391
return false;
@@ -398,6 +394,7 @@ bool vtkPostgreSQLDatabase::ParseURL( const char* URL )
398394
if ( protocol == "psql" )
399395
{
400396
this->SetUser( username.empty() ? 0 : username.c_str() );
397+
this->SetPassword( password.empty() ? 0 : password.c_str() );
401398
this->SetHostName( hostname.empty() ? 0 : hostname.c_str() );
402399
this->SetServerPort( atoi( dataport.c_str() ) );
403400
this->SetDatabaseName( database.empty() ? 0 : database.c_str() );
@@ -410,10 +407,11 @@ bool vtkPostgreSQLDatabase::ParseURL( const char* URL )
410407
// ----------------------------------------------------------------------
411408
vtkStringArray* vtkPostgreSQLDatabase::GetTables()
412409
{
410+
this->Tables->Resize(0);
413411
if ( ! this->Connection )
414412
{
415413
vtkErrorMacro(<< this->GetLastErrorText());
416-
return 0;
414+
return this->Tables;
417415
}
418416

419417
// NB: Other columns of interest include table_catalog, table_schema, table_type,
@@ -431,17 +429,16 @@ vtkStringArray* vtkPostgreSQLDatabase::GetTables()
431429
vtkErrorMacro(<< "Database returned error: " << query->GetLastErrorText());
432430
this->SetLastErrorText(query->GetLastErrorText());
433431
query->Delete();
434-
return 0;
432+
return this->Tables;
435433
}
436434
vtkDebugMacro(<< "GetTables(): SQL query succeeded.");
437-
vtkStringArray* results = vtkStringArray::New();
438435
while ( query->NextRow() )
439436
{
440-
results->InsertNextValue( query->DataValue( 0 ).ToString() );
437+
this->Tables->InsertNextValue( query->DataValue( 0 ).ToString() );
441438
}
442439
query->Delete();
443440
this->SetLastErrorText(NULL);
444-
return results;
441+
return this->Tables;
445442
}
446443

447444
// ----------------------------------------------------------------------

IO/vtkPostgreSQLDatabase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ class VTK_IO_EXPORT vtkPostgreSQLDatabase : public vtkSQLDatabase
203203
vtkTimeStamp URLMTime;
204204
vtkPostgreSQLDatabasePrivate *Connection;
205205
vtkTimeStamp ConnectionMTime;
206+
vtkStringArray *Tables;
206207
char* DatabaseType;
207208
char* HostName;
208209
char* User;

0 commit comments

Comments
 (0)