query/README.md

87 lines
1.9 KiB
Markdown

# 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<class Operator>
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<class Operator>
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<connection> pool("sqlite://sqlite.db", 4);
session s(pool);
// create all tables
s.create().table<airplane>().execute();
std::vector<entity<airplane>> planes {
make_entity<airplane>(1, "Airbus", "A380"),
make_entity<airplane>(2, "Boeing", "707"),
make_entity<airplane>(3, "Boeing", "747")
};
auto stmt = s.insert()
.into<airplane>("airplane")
.values<airplane>().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)
.execute();
auto result = s.select<airplane>()
.from("airplane")
.where("brand"_col == "Boeing")
.execute();
for (const auto &plane : result) {
std::cout << "airplane: " << plane->brand << " - " << plane->model << "\n";
}
```