#include #include #include #include using std::cout; using std::endl; struct User { int id; std::string name; time_t createdAt; }; struct Foo { std::string text; int baz; }; int main(int, char**) { using namespace sqlite_orm; auto storage = make_storage( "collate.sqlite", make_table("users", make_column("id", &User::id, primary_key()), make_column("name", &User::name), make_column("created_at", &User::createdAt)), make_table("foo", make_column("text", &Foo::text, collate_nocase()), make_column("baz", &Foo::baz))); storage.sync_schema(); storage.remove_all(); storage.remove_all(); storage.insert(User{0, "Lil Kim", std::time(nullptr)}); storage.insert(User{0, "lil kim", std::time(nullptr)}); storage.insert(User{0, "Nicki Minaj", std::time(nullptr)}); // SELECT COUNT(*) // FROM users // WHERE name = 'lil kim' auto preciseLilKimsCount = storage.count(where(is_equal(&User::name, "lil kim"))); cout << "preciseLilKimsCount = " << preciseLilKimsCount << endl; // SELECT COUNT(*) FROM users WHERE name = 'lil kim' COLLATE NOCASE auto nocaseCount = storage.count(where(is_equal(&User::name, "lil kim").collate_nocase())); cout << "nocaseCount = " << nocaseCount << endl; // SELECT COUNT(*) FROM users cout << "total users count = " << storage.count() << endl; storage.insert(Foo{"Touch", 10}); storage.insert(Foo{"touch", 20}); cout << "foo count = " << storage.count(where(c(&Foo::text) == "touch")) << endl; // SELECT id // FROM users // ORDER BY name COLLATE RTRIM ASC auto rows = storage.select(&User::id, order_by(&User::name).collate_rtrim().asc()); cout << "rows count = " << rows.size() << endl; return 0; }