Mercurial > hg > orthanc-databases
comparison PostgreSQL/UnitTests/PostgreSQLTests.cpp @ 248:7a4f9bcb0bc2
PostgreSQL: Support of range reads from the storage area
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 14 Apr 2021 09:46:44 +0200 |
parents | 483af3f35a4b |
children | d663d9e44f8d |
comparison
equal
deleted
inserted
replaced
247:e57a5313ffe5 | 248:7a4f9bcb0bc2 |
---|---|
303 s.BindString(0, "Index " + boost::lexical_cast<std::string>(i)); | 303 s.BindString(0, "Index " + boost::lexical_cast<std::string>(i)); |
304 s.BindLargeObject(1, obj); | 304 s.BindLargeObject(1, obj); |
305 s.Run(); | 305 s.Run(); |
306 | 306 |
307 std::string tmp; | 307 std::string tmp; |
308 PostgreSQLLargeObject::Read(tmp, *pg, obj.GetOid()); | 308 PostgreSQLLargeObject::ReadWhole(tmp, *pg, obj.GetOid()); |
309 ASSERT_EQ(value, tmp); | 309 ASSERT_EQ(value, tmp); |
310 | 310 |
311 t.Commit(); | 311 t.Commit(); |
312 } | 312 } |
313 } | 313 } |
408 ASSERT_EQ(0, CountLargeObjects(*database)); | 408 ASSERT_EQ(0, CountLargeObjects(*database)); |
409 } | 409 } |
410 } | 410 } |
411 | 411 |
412 | 412 |
413 TEST(PostgreSQL, StorageReadRange) | |
414 { | |
415 std::unique_ptr<OrthancDatabases::PostgreSQLDatabase> database( | |
416 OrthancDatabases::PostgreSQLDatabase::OpenDatabaseConnection(globalParameters_)); | |
417 | |
418 OrthancDatabases::PostgreSQLStorageArea storageArea(globalParameters_, true /* clear database */); | |
419 | |
420 { | |
421 std::unique_ptr<OrthancDatabases::StorageBackend::IAccessor> accessor(storageArea.CreateAccessor()); | |
422 ASSERT_EQ(0, CountLargeObjects(*database)); | |
423 accessor->Create("uuid", "abcd\0\1\2\3\4\5", 10, OrthancPluginContentType_Unknown); | |
424 ASSERT_EQ(1u, CountLargeObjects(*database)); | |
425 } | |
426 | |
427 { | |
428 std::unique_ptr<OrthancDatabases::StorageBackend::IAccessor> accessor(storageArea.CreateAccessor()); | |
429 ASSERT_EQ(1u, CountLargeObjects(*database)); | |
430 | |
431 std::string s; | |
432 OrthancDatabases::StorageBackend::ReadWholeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown); | |
433 ASSERT_EQ(10u, s.size()); | |
434 ASSERT_EQ('a', s[0]); | |
435 ASSERT_EQ('d', s[3]); | |
436 ASSERT_EQ('\0', s[4]); | |
437 ASSERT_EQ('\5', s[9]); | |
438 | |
439 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 0); | |
440 ASSERT_TRUE(s.empty()); | |
441 | |
442 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 1); | |
443 ASSERT_EQ(1u, s.size()); | |
444 ASSERT_EQ('a', s[0]); | |
445 | |
446 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 1); | |
447 ASSERT_EQ(1u, s.size()); | |
448 ASSERT_EQ('\0', s[0]); | |
449 | |
450 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 9, 1); | |
451 ASSERT_EQ(1u, s.size()); | |
452 ASSERT_EQ('\5', s[0]); | |
453 | |
454 // Cannot read non-empty range after the end of the string. NB: | |
455 // The behavior on range (10, 0) is different than in MySQL! | |
456 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadRangeToString( | |
457 s, *accessor, "uuid", OrthancPluginContentType_Unknown, 10, 0), Orthanc::OrthancException); | |
458 | |
459 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadRangeToString( | |
460 s, *accessor, "uuid", OrthancPluginContentType_Unknown, 10, 1), Orthanc::OrthancException); | |
461 | |
462 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 4); | |
463 ASSERT_EQ(4u, s.size()); | |
464 ASSERT_EQ('a', s[0]); | |
465 ASSERT_EQ('b', s[1]); | |
466 ASSERT_EQ('c', s[2]); | |
467 ASSERT_EQ('d', s[3]); | |
468 | |
469 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 6); | |
470 ASSERT_EQ(6u, s.size()); | |
471 ASSERT_EQ('\0', s[0]); | |
472 ASSERT_EQ('\1', s[1]); | |
473 ASSERT_EQ('\2', s[2]); | |
474 ASSERT_EQ('\3', s[3]); | |
475 ASSERT_EQ('\4', s[4]); | |
476 ASSERT_EQ('\5', s[5]); | |
477 | |
478 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadRangeToString( | |
479 s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 7), Orthanc::OrthancException); | |
480 } | |
481 } | |
482 | |
483 | |
413 TEST(PostgreSQL, ImplicitTransaction) | 484 TEST(PostgreSQL, ImplicitTransaction) |
414 { | 485 { |
415 std::unique_ptr<PostgreSQLDatabase> db(CreateTestDatabase()); | 486 std::unique_ptr<PostgreSQLDatabase> db(CreateTestDatabase()); |
416 | 487 |
417 ASSERT_FALSE(db->DoesTableExist("test")); | 488 ASSERT_FALSE(db->DoesTableExist("test")); |