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.

67 lines
1.8 KiB

2 years ago
  1. #include <sqlite_orm/sqlite_orm.h>
  2. #include <string>
  3. #include <iostream>
  4. using std::cout;
  5. using std::endl;
  6. struct Contract {
  7. std::string firstName;
  8. std::string lastName;
  9. std::string email;
  10. };
  11. using namespace sqlite_orm;
  12. // beware - put `make_index` before `make_table` cause `sync_schema` is called in reverse order
  13. // otherwise you'll receive an exception
  14. auto storage = make_storage(
  15. "index.sqlite",
  16. make_index("idx_contacts_name", &Contract::firstName, &Contract::lastName, where(length(&Contract::firstName) > 2)),
  17. make_unique_index("idx_contacts_email", indexed_column(&Contract::email).collate("BINARY").desc()),
  18. make_table("contacts",
  19. make_column("first_name", &Contract::firstName),
  20. make_column("last_name", &Contract::lastName),
  21. make_column("email", &Contract::email)));
  22. int main(int, char**) {
  23. storage.sync_schema();
  24. storage.remove_all<Contract>();
  25. storage.insert(Contract{
  26. "John",
  27. "Doe",
  28. "john.doe@sqlitetutorial.net",
  29. });
  30. try {
  31. storage.insert(Contract{
  32. "Johny",
  33. "Doe",
  34. "john.doe@sqlitetutorial.net",
  35. });
  36. } catch(const std::system_error& e) {
  37. cout << e.what() << endl;
  38. }
  39. std::vector<Contract> moreContracts = {
  40. Contract{
  41. "David",
  42. "Brown",
  43. "david.brown@sqlitetutorial.net",
  44. },
  45. Contract{
  46. "Lisa",
  47. "Smith",
  48. "lisa.smith@sqlitetutorial.net",
  49. },
  50. };
  51. storage.insert_range(moreContracts.begin(), moreContracts.end());
  52. auto lisas = storage.get_all<Contract>(where(c(&Contract::email) == "lisa.smith@sqlitetutorial.net"));
  53. storage.drop_index("idx_contacts_name");
  54. storage.drop_index("idx_contacts_email");
  55. return 0;
  56. }