diff --git a/pglablib/PgClassContainer.cpp b/pglablib/PgClassContainer.cpp index 701dc68..94d10b4 100644 --- a/pglablib/PgClassContainer.cpp +++ b/pglablib/PgClassContainer.cpp @@ -24,8 +24,8 @@ PgClass PgClassContainer::loadElem(const Pgsql::Row &row) >> v.tuples_est >> v.toastrelid >> v.isshared >> v.persistence >> v.kind >> v.hasoids >> v.ispopulated >> v.frozenxid >> v.minmxid; - col.getAsArray(std::back_inserter(v.acl), Pgsql::NullHandling::Ignore); - col.getAsArray(std::back_inserter(v.options), Pgsql::NullHandling::Ignore); + col.getAsArray(std::back_inserter(v.acl), QString()); + col.getAsArray(std::back_inserter(v.options), QString()); auto cat = m_catalogue.lock(); auto ns = cat->namespaces()->getByKey(v.relnamespace); diff --git a/pgsql/Pgsql_Col.h b/pgsql/Pgsql_Col.h index 8136eb7..0c0cd36 100644 --- a/pgsql/Pgsql_Col.h +++ b/pgsql/Pgsql_Col.h @@ -26,14 +26,14 @@ namespace Pgsql { } template - void getAsArray(I insert_iter, const E &value_for_nulls) const + Col& getAsArray(I insert_iter, const E &value_for_nulls) { nextValue().getAsArray(insert_iter, value_for_nulls); return *this; } template - void getAsArrayOfOptional(I insert_iter) const + Col& getAsArrayOfOptional(I insert_iter) { nextValue().getAsArrayOfOptional(insert_iter); return *this; @@ -50,6 +50,12 @@ namespace Pgsql { int col = -1; }; + template + Col& operator>>(Col &c, std::vector &s) + { + return c.getAsArray(std::back_inserter(s)); + } + template Col& operator>>(Col &c, T &s) { diff --git a/pgsql/Pgsql_Value.h b/pgsql/Pgsql_Value.h index 2c28e2b..b27f7ca 100644 --- a/pgsql/Pgsql_Value.h +++ b/pgsql/Pgsql_Value.h @@ -8,6 +8,7 @@ #include #include #include +#include namespace Pgsql { @@ -149,10 +150,24 @@ namespace Pgsql { Oid m_typ; }; + template + void operator<<(boost::optional &s, const Value &v) + { + if (v.null()) + s = boost::optional(); + else + *s << v; + } + + template + void operator<<(std::vector &s, const Value &v) + { + v.getAsArray(std::back_inserter(s)); + } + template void operator<<(T &s, const Value &v) { - //s = static_cast(v); s = v.operator T(); } diff --git a/tests/PgsqlTests/tst_Value.cpp b/tests/PgsqlTests/tst_Value.cpp index fa7b8ed..dd66495 100644 --- a/tests/PgsqlTests/tst_Value.cpp +++ b/tests/PgsqlTests/tst_Value.cpp @@ -92,6 +92,7 @@ TEST(Pgsql_Value, getAsArray_Ints) ASSERT_EQ(r[1], 2); } + TEST(Pgsql_Value, getAsArray_QDateTime) { Pgsql::Value v("{\"2017-12-11 10:11:22\",\"2017-12-13 12:00:11\"}", text_array_oid);