赞
踩
测试代码
- //
- // Created by www on 2024/8/7.
- //
- #include "sqlitepp/database.h"
- #include "sqlitepp/condition.h"
-
- #include <iostream>
- using namespace sqlitepp;
- using namespace sqlitepp::literals;
-
- enum class test_enum {
- hello
- };
-
- void testCondition() {
-
- std::string s;
- {
- // ==
- auto q = "t"_c == test_enum::hello;
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- std::holds_alternative<orm::db_integer_type>(p.params[0]);
- }
-
- {
- // !=
- auto q = "t"_c != test_enum::hello;
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // NOT
- auto q = !("t"_c == "hello");
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // is NULL
- auto q = "t"_c == nullptr;
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // is NOT NULL
- auto q = "t"_c != nullptr;
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // AND
- auto q = "t"_c == "hello" && "t2"_c == "test";
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // OR
- auto q = "t"_c == "hello" || "t2"_c == "test";
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // BETWEEN
- auto q = "t"_c.between(static_cast<int64_t>(10),static_cast<int64_t>(20));
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // NOT BETWEEN
- auto q = "t"_c.not_between(static_cast<int64_t>(10),static_cast<int64_t>(20));
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // LIKE
- auto q = "t"_c.like("test%");
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- {
- // GLOB
- auto q = "t"_c.glob("test%");
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // >
- auto q = "t"_c > static_cast<int64_t>(10);
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // >
- auto q = "t"_c >= static_cast<int64_t>(10);
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // >
- auto q = "t"_c < static_cast<int64_t>(10);
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
-
- { // >
- auto q = "t"_c <= static_cast<int64_t>(10);
- auto p = q.as_partial();
- std::cout << p.query << std::endl;
- }
- }
-
-
-
- #include "include/sqlitepp/database.h"
- #include "include/sqlitepp/orm.h"
-
- using namespace sqlitepp;
- using namespace sqlitepp::orm;
-
- struct my_entity : orm::entity {
- enum class e_test {
- hello = 10,
- hello2 = 20
- };
- e_test t {e_test::hello};
- std::optional<int64_t> test_optional {};
-
- using entity::entity;
-
- static const orm::class_info _class_info;
- const orm::class_info& get_class_info() const noexcept override { return _class_info; }
- };
-
- const orm::class_info my_entity::_class_info = orm::builder<my_entity>("e")
- .field("t", &my_entity::t)
- .field("test_optional", &my_entity::test_optional)
- .build();
-
- void testORM() {
-
- { // ReadWriteEnum
- database db;
- my_entity e(db);
- auto& info = e.get_class_info();
- auto* field = info.get_field_by_name("t");
-
- auto val = field->getter(&e);
- std::cout << std::get<db_integer_type>(val) << std::endl;
- e.t = my_entity::e_test::hello2;
- val = field->getter(&e);
- std::cout << std::get<db_integer_type>(val) << std::endl;
- val = db_integer_type{10};
- field->setter(&e, val);
- std::cout << (int)e.t << std::endl;
- }
-
- { // ReadWriteOptional
- database db;
- my_entity e(db);
- auto& info = e.get_class_info();
- auto* field = info.get_field_by_name("test_optional");
-
- auto val = field->getter(&e);
- e.test_optional = 100;
- val = field->getter(&e);
- std::cout << std::get<db_integer_type>(val) << std::endl;
-
- val = db_integer_type{10};
- field->setter(&e, val);
- std::cout << e.test_optional.value() << std::endl;
-
- val = db_null_type{};
- field->setter(&e, val);
- std::cout << e.test_optional.has_value() << std::endl;
- }
-
- { // IsModified
- database db;
- my_entity e(db);
- auto& info = e.get_class_info();
- db.exec(generate_create_table(info));
-
- std::cout << (e.is_modified()) << std::endl;
- e.save();
- std::cout << (e.is_modified()) << std::endl;
- e.test_optional = 1337;
- std::cout << (e.is_modified()) << std::endl;
- e.save();
- std::cout << (e.is_modified()) << std::endl;
-
- e.test_optional.reset();
- std::cout << (e.is_modified()) << std::endl;
- e.reset();
- std::cout << (e.is_modified()) << std::endl;
- std::cout << e.test_optional.value() << std::endl;
- }
-
- }
-
- int main() {
- database db;
- testCondition();
- testORM();
- return 0;
- }

`t` = ? `t` <> ? NOT (`t` = ?) `t` IS NULL `t` IS NOT NULL (`t` = ?) AND (`t2` = ?) (`t` = ?) OR (`t2` = ?) `t` BETWEEN ? AND ? `t` NOT BETWEEN ? AND ? `t` LIKE ? `t` GLOB ? `t` > ? `t` >= ? `t` < ? `t` <= ? 10 20 10 100 10 0 1 0 1 0 1 0 1337
https://github.com/Thalhammer/sqlitepp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。