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.

65 lines
1.9 KiB

2 years ago
  1. #include <ctime>
  2. #include <string>
  3. #include <iostream>
  4. #include <sqlite_orm/sqlite_orm.h>
  5. using std::cout;
  6. using std::endl;
  7. struct User {
  8. int id;
  9. std::string name;
  10. time_t createdAt;
  11. };
  12. struct Foo {
  13. std::string text;
  14. int baz;
  15. };
  16. int main(int, char**) {
  17. using namespace sqlite_orm;
  18. auto storage = make_storage(
  19. "collate.sqlite",
  20. make_table("users",
  21. make_column("id", &User::id, primary_key()),
  22. make_column("name", &User::name),
  23. make_column("created_at", &User::createdAt)),
  24. make_table("foo", make_column("text", &Foo::text, collate_nocase()), make_column("baz", &Foo::baz)));
  25. storage.sync_schema();
  26. storage.remove_all<User>();
  27. storage.remove_all<Foo>();
  28. storage.insert(User{0, "Lil Kim", std::time(nullptr)});
  29. storage.insert(User{0, "lil kim", std::time(nullptr)});
  30. storage.insert(User{0, "Nicki Minaj", std::time(nullptr)});
  31. // SELECT COUNT(*)
  32. // FROM users
  33. // WHERE name = 'lil kim'
  34. auto preciseLilKimsCount = storage.count<User>(where(is_equal(&User::name, "lil kim")));
  35. cout << "preciseLilKimsCount = " << preciseLilKimsCount << endl;
  36. // SELECT COUNT(*) FROM users WHERE name = 'lil kim' COLLATE NOCASE
  37. auto nocaseCount = storage.count<User>(where(is_equal(&User::name, "lil kim").collate_nocase()));
  38. cout << "nocaseCount = " << nocaseCount << endl;
  39. // SELECT COUNT(*) FROM users
  40. cout << "total users count = " << storage.count<User>() << endl;
  41. storage.insert(Foo{"Touch", 10});
  42. storage.insert(Foo{"touch", 20});
  43. cout << "foo count = " << storage.count<Foo>(where(c(&Foo::text) == "touch")) << endl;
  44. // SELECT id
  45. // FROM users
  46. // ORDER BY name COLLATE RTRIM ASC
  47. auto rows = storage.select(&User::id, order_by(&User::name).collate_rtrim().asc());
  48. cout << "rows count = " << rows.size() << endl;
  49. return 0;
  50. }