diff --git a/docs/README.md b/docs/README.md index ba70214..a719b86 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,9 +4,9 @@ [Defining tables](defining_tables.md) - How to define tables using C++ structs. -[Reading](reading.md) - How to read data from a database. +[sqlgen::read](reading.md) - How to read data from a database. -[Writing](writing.md) - How to write data to a database. +[sqlgen::write](writing.md) - How to write data to a database. [sqlgen::Result](result.md) - How sqlgen handles errors. diff --git a/include/sqlgen.hpp b/include/sqlgen.hpp index b656928..aadab46 100644 --- a/include/sqlgen.hpp +++ b/include/sqlgen.hpp @@ -2,6 +2,7 @@ #define SQLGEN_HPP_ #include "sqlgen/Connection.hpp" +#include "sqlgen/Flatten.hpp" #include "sqlgen/Iterator.hpp" #include "sqlgen/IteratorBase.hpp" #include "sqlgen/Literal.hpp" diff --git a/include/sqlgen/Flatten.hpp b/include/sqlgen/Flatten.hpp new file mode 100644 index 0000000..244a3eb --- /dev/null +++ b/include/sqlgen/Flatten.hpp @@ -0,0 +1,14 @@ +#ifndef SQLGEN_FLATTEN_HPP_ +#define SQLGEN_FLATTEN_HPP_ + +#include + +namespace sqlgen { + +template +using Flatten = rfl::Flatten; + +}; // namespace sqlgen + +#endif + diff --git a/tests/sqlite/test_flatten.cpp b/tests/sqlite/test_flatten.cpp new file mode 100644 index 0000000..a2ed9e5 --- /dev/null +++ b/tests/sqlite/test_flatten.cpp @@ -0,0 +1,45 @@ +#include + +#include +#include +#include +#include +#include + +namespace test_write_and_read { + +struct Person { + sqlgen::PrimaryKey id; + std::string first_name; + std::string last_name; + int age; +}; + +struct Employee { + static constexpr const char* tablename = "EMPLOYEES"; + + sqlgen::Flatten person; + float salary; +}; + +TEST(sqlite, test_flatten) { + const auto people1 = + std::vector({Employee{.person = Person{.id = 0, + .first_name = "Homer", + .last_name = "Simpson", + .age = 45}, + .salary = 60000.0}}); + + const auto conn = sqlgen::sqlite::connect(); + + sqlgen::write(conn, people1); + + const auto people2 = sqlgen::read>(conn).value(); + + const auto json1 = rfl::json::write(people1); + const auto json2 = rfl::json::write(people2); + + EXPECT_EQ(json1, json2); +} + +} // namespace test_write_and_read