Improved error checking in Value + more to array conversion control.

This commit is contained in:
eelke 2017-12-17 09:06:18 +01:00
parent 1fe7d3c56d
commit d9854d81fa
3 changed files with 153 additions and 18 deletions

View file

@ -87,3 +87,62 @@ TEST(Pgsql_Value, getAsArray_QDateTime)
ASSERT_EQ(r.size(), 2);
}
TEST(Pgsql_Value, getAsArray_throws_on_NULL)
{
Pgsql::Value v("{1,NULL,2}", TEXTARRAYOID);
std::vector<int> r;
try {
v.getAsArray<int>(std::back_inserter(r));
FAIL();
} catch (std::runtime_error &) {
SUCCEED();
} catch (...) {
FAIL();
}
}
TEST(Pgsql_Value, getAsArray_default_on_NULL)
{
Pgsql::Value v("{1,NULL,2}", TEXTARRAYOID);
std::vector<int> r;
try {
v.getAsArray<int>(std::back_inserter(r), -1);
ASSERT_EQ(r.size(), 3);
ASSERT_EQ(r[0], 1);
ASSERT_EQ(r[1], -1);
ASSERT_EQ(r[2], 2);
} catch (...) {
FAIL();
}
}
TEST(Pgsql_Value, getAsArray_ignore_NULL)
{
Pgsql::Value v("{1,NULL,2}", TEXTARRAYOID);
std::vector<int> r;
try {
v.getAsArray<int>(std::back_inserter(r), Value::NullHandling::Ignore);
ASSERT_EQ(r.size(), 2);
ASSERT_EQ(r[0], 1);
ASSERT_EQ(r[1], 2);
} catch (...) {
FAIL();
}
}
TEST(Pgsql_Value, getAsArrayOptional)
{
Pgsql::Value v("{1,NULL,2}", TEXTARRAYOID);
std::vector<std::optional<int>> r;
try {
v.getAsArrayOfOptional<int>(std::back_inserter(r));
ASSERT_EQ(r.size(), 3);
ASSERT_EQ(r[0], 1);
ASSERT_EQ(r[1], std::nullopt);
ASSERT_EQ(r[2], 2);
} catch (...) {
FAIL();
}
}