diff --git a/README.md b/README.md index d92e54e..f9a048d 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,36 @@ A fluent sql query_context builder Object definition ```cpp +enum class Color { + Red, Green, Blue, Yellow, Pink, Black, White +}; + +struct Coordinate +{ + int x; + int y; + int z; +}; + +// special handling for custom type Coordinate +namespace matador::utils::access { + +template +void attribute(Operator &op, const char *id, Coordinate &value, const field_attributes &attr = null_attributes) { + attribute(op, (std::string(id) + "_x").c_str(), value.x, attr); + attribute(op, (std::string(id) + "_y").c_str(), value.y, attr); + attribute(op, (std::string(id) + "_z").c_str(), value.z, attr); +} + +} + struct airplane { unsigned long id; std::string brand; std::string model; + Color color; + Coordinate position; template void process(Operator &op) { @@ -16,6 +41,8 @@ struct airplane field::primary_key(op, "id", id); field::attribute(op, "brand", brand, 255); field::attribute(op, "model", model, 255); + field::attribute(op, "color", color); + field::attribute(op, "position", position); } }; ``` @@ -23,20 +50,35 @@ struct airplane connection_pool pool("sqlite://sqlite.db", 4); session s(pool); -// register entity -s.attach("airplane") - // create all tables -s.create(); +s.create().table().execute(); + +std::vector> planes { + make_entity(1, "Airbus", "A380"), + make_entity(2, "Boeing", "707"), + make_entity(3, "Boeing", "747") +}; + +auto stmt = s.insert() + .into("airplane") + .values().prepare(); + // insert -s.insert(1, "Airbus", "A380"); -s.insert(2, "Boeing", "748"); -s.insert(3, "Boeing", "707"); +for (const auto &plane: planes) { + auto res = stmt.bind(*plane).execute(); + stmt.reset(); +} -s.update().set({"model", "747"}).where("id"_col == 2); +s.update("airplane") + .set({"model", "737"}) + .where("id"_col == 2) + .execute(); -auto result = s.select().where("brand"_col == "Boeing"); +auto result = s.select() + .from("airplane") + .where("brand"_col == "Boeing") + .execute(); for (const auto &plane : result) { std::cout << "airplane: " << plane->brand << " - " << plane->model << "\n";