69 lines
2.6 KiB
C++
69 lines
2.6 KiB
C++
|
|
#include <sqlite_orm/sqlite_orm.h>
|
|
#include <iostream>
|
|
#include <algorithm>
|
|
|
|
using std::cout;
|
|
using std::endl;
|
|
|
|
struct MarvelHero {
|
|
int id;
|
|
std::string name;
|
|
std::string abilities;
|
|
};
|
|
|
|
int main(int, char**) {
|
|
using namespace sqlite_orm;
|
|
auto storage = make_storage("iteration.sqlite",
|
|
make_table("marvel",
|
|
make_column("id", &MarvelHero::id, primary_key()),
|
|
make_column("name", &MarvelHero::name),
|
|
make_column("abilities", &MarvelHero::abilities)));
|
|
storage.sync_schema();
|
|
|
|
storage.remove_all<MarvelHero>();
|
|
|
|
// insert values..
|
|
storage.insert(MarvelHero{-1, "Tony Stark", "Iron man, playboy, billionaire, philanthropist"});
|
|
storage.insert(MarvelHero{-1, "Thor", "Storm god"});
|
|
storage.insert(MarvelHero{-1, "Vision", "Min Stone"});
|
|
storage.insert(MarvelHero{-1, "Captain America", "Vibranium shield"});
|
|
storage.insert(MarvelHero{-1, "Hulk", "Strength"});
|
|
storage.insert(MarvelHero{-1, "Star Lord", "Humor"});
|
|
storage.insert(MarvelHero{-1, "Peter Parker", "Spiderman"});
|
|
storage.insert(MarvelHero{-1, "Clint Barton", "Hawkeye"});
|
|
storage.insert(MarvelHero{-1, "Natasha Romanoff", "Black widow"});
|
|
storage.insert(MarvelHero{-1, "Groot", "I am Groot!"});
|
|
|
|
cout << "Heros count = " << storage.count<MarvelHero>() << endl;
|
|
|
|
// iterate through heros - iteration takes less memory than `get_all` because
|
|
// iteration fetches row by row once it is needed. If you break at any iteration
|
|
// statement will be cleared without fetching remaining rows.
|
|
for(auto& hero: storage.iterate<MarvelHero>()) {
|
|
cout << "hero = " << storage.dump(hero) << endl;
|
|
}
|
|
|
|
cout << "====" << endl;
|
|
|
|
// one can iterate with custom WHERE conditions..
|
|
for(auto& hero: storage.iterate<MarvelHero>(where(c(&MarvelHero::name) == "Thor"))) {
|
|
cout << "hero = " << storage.dump(hero) << endl;
|
|
}
|
|
|
|
cout << "Heros with LENGTH(name) < 6 :" << endl;
|
|
for(auto& hero: storage.iterate<MarvelHero>(where(length(&MarvelHero::name) < 6))) {
|
|
cout << "hero = " << storage.dump(hero) << endl;
|
|
}
|
|
|
|
std::vector<MarvelHero> heroesByAlgorithm;
|
|
heroesByAlgorithm.reserve(static_cast<size_t>(storage.count<MarvelHero>()));
|
|
{
|
|
auto view = storage.iterate<MarvelHero>();
|
|
std::copy(view.begin(), view.end(), std::back_inserter(heroesByAlgorithm));
|
|
}
|
|
cout << "heroesByAlgorithm.size = " << heroesByAlgorithm.size() << endl;
|
|
|
|
return 0;
|
|
}
|