diff options
Diffstat (limited to 'libpqpp')
-rw-r--r-- | libpqpp/pq-column.cpp | 5 | ||||
-rw-r--r-- | libpqpp/unittests/testpq.cpp | 34 |
2 files changed, 35 insertions, 4 deletions
diff --git a/libpqpp/pq-column.cpp b/libpqpp/pq-column.cpp index a073f26..bb09c45 100644 --- a/libpqpp/pq-column.cpp +++ b/libpqpp/pq-column.cpp @@ -50,10 +50,7 @@ PQ::Column::apply(DB::HandleField & h) const { int days = 0, hours = 0, minutes = 0, seconds = 0, fractions = 0, flen1 = 0, flen2 = 0; const char * val = PQgetvalue(sc->execRes, sc->tuple, colNo); - if (sscanf(val, "%d days %d:%d:%d.%n%d%n", &days, &hours, &minutes, &seconds, &flen1, &fractions, &flen2) >= 4) { - h.interval(boost::posix_time::time_duration((24 * days) + hours, minutes, seconds, fractions * pow(10, boost::posix_time::time_res_traits::num_fractional_digits() + flen1 - flen2))); - } - else if (sscanf(val, "%d day %d:%d:%d.%n%d%n", &days, &hours, &minutes, &seconds, &flen1, &fractions, &flen2) >= 4) { + if (sscanf(val, "%d %*[days] %d:%d:%d.%n%d%n", &days, &hours, &minutes, &seconds, &flen1, &fractions, &flen2) >= 4) { h.interval(boost::posix_time::time_duration((24 * days) + hours, minutes, seconds, fractions * pow(10, boost::posix_time::time_res_traits::num_fractional_digits() + flen1 - flen2))); } else { diff --git a/libpqpp/unittests/testpq.cpp b/libpqpp/unittests/testpq.cpp index fcf01e3..2944676 100644 --- a/libpqpp/unittests/testpq.cpp +++ b/libpqpp/unittests/testpq.cpp @@ -308,6 +308,34 @@ BOOST_AUTO_TEST_CASE( bulkSelect ) delete ro; } +BOOST_AUTO_TEST_CASE( selectWithSmallPages ) +{ + auto ro = DB::MockDatabase::openConnectionTo("PQmock"); + PQ::CommandOptions co(0, 1, true); + auto sel = ro->newSelectCommand("SELECT * FROM test WHERE id > ?", &co); + sel->bindParamI(0, 1); + int totalInt = 0, count = 0; + sel->forEachRow<int64_t>([&totalInt, &count](auto i) { + totalInt += i; + count += 1; + }); + delete sel; + BOOST_REQUIRE_EQUAL(20, totalInt); + BOOST_REQUIRE_EQUAL(8, count); + delete ro; +} + +BOOST_AUTO_TEST_CASE( dateoid ) +{ + auto ro = DB::MockDatabase::openConnectionTo("PQmock"); + PQ::CommandOptions co(0, 1, false); + auto sel = ro->newSelectCommand("SELECT '2017-01-08'::date", &co); + for (const auto & r : sel->as<boost::posix_time::ptime>()) { + BOOST_REQUIRE_EQUAL(boost::posix_time::ptime(boost::gregorian::date(2017, 1, 8)), r.value<0>()); + } + delete ro; +} + BOOST_AUTO_TEST_CASE( insertReturning ) { auto ro = DB::MockDatabase::openConnectionTo("PQmock"); @@ -360,6 +388,12 @@ BOOST_AUTO_TEST_SUITE_END(); BOOST_AUTO_TEST_CASE( connfail ) { BOOST_REQUIRE_THROW(DB::ConnectionFactory::createNew("postgresql", "host=localhost user=no"), DB::ConnectionError); + try { + DB::ConnectionFactory::createNew("postgresql", "host=localhost user=no"); + } + catch (const DB::ConnectionError & e) { + BOOST_REQUIRE_EQUAL(e.what(), "FATAL: role \"no\" does not exist\n"); + } } BOOST_AUTO_TEST_CASE( ssl ) |