You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.6 KiB

2 years ago
  1. #include <sqlite_orm/sqlite_orm.h>
  2. #include <iostream>
  3. #include <algorithm>
  4. using std::cout;
  5. using std::endl;
  6. struct MarvelHero {
  7. int id;
  8. std::string name;
  9. std::string abilities;
  10. };
  11. int main(int, char**) {
  12. using namespace sqlite_orm;
  13. auto storage = make_storage("iteration.sqlite",
  14. make_table("marvel",
  15. make_column("id", &MarvelHero::id, primary_key()),
  16. make_column("name", &MarvelHero::name),
  17. make_column("abilities", &MarvelHero::abilities)));
  18. storage.sync_schema();
  19. storage.remove_all<MarvelHero>();
  20. // insert values..
  21. storage.insert(MarvelHero{-1, "Tony Stark", "Iron man, playboy, billionaire, philanthropist"});
  22. storage.insert(MarvelHero{-1, "Thor", "Storm god"});
  23. storage.insert(MarvelHero{-1, "Vision", "Min Stone"});
  24. storage.insert(MarvelHero{-1, "Captain America", "Vibranium shield"});
  25. storage.insert(MarvelHero{-1, "Hulk", "Strength"});
  26. storage.insert(MarvelHero{-1, "Star Lord", "Humor"});
  27. storage.insert(MarvelHero{-1, "Peter Parker", "Spiderman"});
  28. storage.insert(MarvelHero{-1, "Clint Barton", "Hawkeye"});
  29. storage.insert(MarvelHero{-1, "Natasha Romanoff", "Black widow"});
  30. storage.insert(MarvelHero{-1, "Groot", "I am Groot!"});
  31. cout << "Heros count = " << storage.count<MarvelHero>() << endl;
  32. // iterate through heros - iteration takes less memory than `get_all` because
  33. // iteration fetches row by row once it is needed. If you break at any iteration
  34. // statement will be cleared without fetching remaining rows.
  35. for(auto& hero: storage.iterate<MarvelHero>()) {
  36. cout << "hero = " << storage.dump(hero) << endl;
  37. }
  38. cout << "====" << endl;
  39. // one can iterate with custom WHERE conditions..
  40. for(auto& hero: storage.iterate<MarvelHero>(where(c(&MarvelHero::name) == "Thor"))) {
  41. cout << "hero = " << storage.dump(hero) << endl;
  42. }
  43. cout << "Heros with LENGTH(name) < 6 :" << endl;
  44. for(auto& hero: storage.iterate<MarvelHero>(where(length(&MarvelHero::name) < 6))) {
  45. cout << "hero = " << storage.dump(hero) << endl;
  46. }
  47. std::vector<MarvelHero> heroesByAlgorithm;
  48. heroesByAlgorithm.reserve(static_cast<size_t>(storage.count<MarvelHero>()));
  49. {
  50. auto view = storage.iterate<MarvelHero>();
  51. std::copy(view.begin(), view.end(), std::back_inserter(heroesByAlgorithm));
  52. }
  53. cout << "heroesByAlgorithm.size = " << heroesByAlgorithm.size() << endl;
  54. return 0;
  55. }