89 lines
2.0 KiB
Markdown
89 lines
2.0 KiB
Markdown
# query_context
|
|
|
|
A fluent sql query_context builder
|
|
|
|
```MATADOR_BACKENDS_PATH=/home/sascha/Develop/query/cmake-build-debug/backends```
|
|
|
|
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<airplane> planes {
|
|
{1, "Airbus", "A380", Color::Green, {1, 2, 3}},
|
|
{2, "Boeing", "707", Color::White, {4, 5, 6}},
|
|
{3, "Boeing", "747", Color::Blue, {0, 0, 0}}
|
|
};
|
|
|
|
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 && "color"_col == Color::White)
|
|
.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";
|
|
}
|
|
|
|
``` |