当前位置: 首页 > news >正文

C++ SQL ORM

 测试代码 

//
// 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;}{// NOTauto q = !("t"_c == "hello");auto p = q.as_partial();std::cout << p.query << std::endl;}{// is NULLauto q = "t"_c == nullptr;auto p = q.as_partial();std::cout << p.query << std::endl;}{// is NOT NULLauto q = "t"_c != nullptr;auto p = q.as_partial();std::cout << p.query << std::endl;}{// ANDauto q = "t"_c == "hello" && "t2"_c == "test";auto p = q.as_partial();std::cout << p.query << std::endl;}{// ORauto q = "t"_c == "hello" || "t2"_c == "test";auto p = q.as_partial();std::cout << p.query << std::endl;}{ // BETWEENauto 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 BETWEENauto 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;}{// LIKEauto q = "t"_c.like("test%");auto p = q.as_partial();std::cout << p.query << std::endl;}{// GLOBauto 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() {{  // ReadWriteEnumdatabase 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;}{ // ReadWriteOptionaldatabase 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;}{ // IsModifieddatabase 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

我去年买了个表/sqlite3


创作不易,小小的支持一下吧!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 苹果离线打包机配置和打包
  • Typora v1.9.5解锁版下载、安装教程 (轻便简洁的Markdown编辑器)
  • android手动绘制矩形框
  • Spring Boot实战:拦截器
  • Python获取本机ip
  • 多久没有清理你的电脑磁盘了?轻松解锁免费轻量磁盘清理工具
  • 计网:http/1.1、http/2和http/3的改变和优化
  • 制造知识普及(八)--企业内部物料编码(IPN)与制造商物料编码(MPN)
  • WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一
  • liunx装了torch-cuda,运行的却是cpu版的torch
  • Golang——逃逸分析
  • MindSearch:AI 时代的“思考型”搜索引擎
  • EasyExcel 自定义转换器、自定义导出字典映射替换、满足条件内容增加样式
  • Python 之Scikit-learn(三) -- 使用Scikit-learn进行数据归一化
  • 八股(1)
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android 架构优化~MVP 架构改造
  • Elasticsearch 参考指南(升级前重新索引)
  • fetch 从初识到应用
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java读取Properties文件的六种方法
  • JAVA之继承和多态
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • mac修复ab及siege安装
  • uni-app项目数字滚动
  • Vue.js 移动端适配之 vw 解决方案
  • vue的全局变量和全局拦截请求器
  • 闭包--闭包作用之保存(一)
  • 分布式熔断降级平台aegis
  • 高度不固定时垂直居中
  • 如何实现 font-size 的响应式
  • 软件开发学习的5大技巧,你知道吗?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma once与条件编译
  • #每天一道面试题# 什么是MySQL的回表查询
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (译)2019年前端性能优化清单 — 下篇
  • .NET Core 2.1路线图
  • .Net Core 笔试1
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 使窗口永不获得焦点