summaryrefslogtreecommitdiff
path: root/libpqpp/unittests/testpq.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libpqpp/unittests/testpq.cpp')
-rw-r--r--libpqpp/unittests/testpq.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp
index 9fb5f98..476c3a2 100644
--- a/libpqpp/unittests/testpq.cpp
+++ b/libpqpp/unittests/testpq.cpp
@@ -13,6 +13,7 @@
#include <pq-connection.h>
#include <pq-command.h>
#include <selectcommandUtil.impl.h>
+#include <fileUtils.h>
class StandardMockDatabase : public PQ::Mock {
public:
@@ -451,6 +452,27 @@ BOOST_AUTO_TEST_CASE( fetchAsBinary )
}
}
+BOOST_AUTO_TEST_CASE( largeBlob )
+{
+ auto ro = DB::ConnectionPtr(DB::MockDatabase::openConnectionTo("PQmock"));
+ ro->execute("TRUNCATE TABLE blobtest");
+ AdHoc::FileUtils::MemMap f("/proc/self/exe");
+ DB::Blob blob(f.data, f.getStat().st_size);
+ BOOST_REQUIRE(blob.len > 200000); // Just assert the mapped file is actually "large"
+ auto ins = ro->modify("INSERT INTO blobtest(data) VALUES(?)");
+ ins->bindParamBLOB(0, blob);
+ ins->execute();
+
+ PQ::CommandOptions opts(0);
+ opts.fetchBinary = true;
+ opts.useCursor = false;
+ auto sel = ro->select("SELECT data, length(data) FROM blobtest", &opts);
+ for (const auto & r : sel->as<DB::Blob, int64_t>()) {
+ BOOST_REQUIRE_EQUAL(r.value<1>(), f.getStat().st_size);
+ BOOST_REQUIRE_EQUAL(r.value<0>(), blob);
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END();
BOOST_AUTO_TEST_CASE( connfail )