# query_context 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) { namespace field = matador::utils::access; 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); } }; ``` ```cpp connection_pool pool("sqlite://sqlite.db", 4); session s(pool); // create all tables s.create().table().execute(); std::vector> planes { make_entity(1, "Airbus", "A380", Color::Green, {1, 2, 3}), make_entity(2, "Boeing", "707", Color::White, {4, 5, 6}), make_entity(3, "Boeing", "747", Color::Blue, {0, 0, 0}) }; auto stmt = s.insert() .into("airplane") .values().prepare(); // insert for (const auto &plane: planes) { auto res = stmt.bind(*plane).execute(); stmt.reset(); } s.update("airplane") .set({"model", "737"}) .where("id"_col == 2 && "color"_col == Color::White) .execute(); auto result = s.select() .from("airplane") .where("brand"_col == "Boeing") .execute(); for (const auto &plane : result) { std::cout << "airplane: " << plane->brand << " - " << plane->model << "\n"; } ```