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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397427.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

掌握这项技能,用Python爬虫定制你的私人电影推荐库

思路&#xff1a; 1、先选取你要获取的视频 2、用vip解析工具解析&#xff0c;获取地址 3、复制粘贴&#xff0c;获取视频 以下是效果图 需要的python模块&#xff1a; ##第一个模块不要安装&#xff0c;第二个模块需要安装 1、from multiprocessing import Pool 2、imp…

守护网站心脏:HAProxy负载均衡技术详解(全网最详细)

守护网站心脏&#xff1a;HAProxy负载均衡技术详解 文章目录 **守护网站心脏&#xff1a;HAProxy负载均衡技术详解**haproxy介绍特点功能配置结论 haproxy负载均衡测试haproxy主机操作日志重定向操作 webserver1主机操作webserver2主机操作 haporxy相关配置测试backup参数测速h…

【Redis】Redis 数据类型

文章目录 前言1 通用知识1.1 基本全局命令1.2 数据结构和内部编码 2 String2.1 类型介绍2.2 相关命令2.2.1 SET/GET 系列命令2.2.2 INCR/DECR 计数系列命令2.2.3 其他命令2.2.4 命令小结 2.3 内部编码2.4 应用场景2.4.1 缓存功能2.4.2 计数功能2.4.3 共享会话2.4.4 验证码功能 …

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…

Java设计模式-享元设计模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. 享元设计模式介绍1.1 定义1.2 原理1.3 使用场景1.4 注意事项 2. 享元设计模式角色2.1 抽象享元角色&#xff08;‌AbstractFlyWeight&#xff09;‌2.2 具体享元…

【MySQL】视图——视图、视图的概念、为什么要使用视图、视图的基本使用、视图规则和限制

文章目录 MySQL1. 视图1.1 视图的概念1.2 为什么要使用视图1.3 视图的基本使用1.4 视图规则和限制 MySQL 1. 视图 1.1 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表…

【动态规划】1、不同路径II+2、三角形最小路径和

1、不同路径II&#xff08;难度中等&#xff09; 该题对应力扣网址 AC代码 只会写简单的if-else class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//1、定义子问题//2、子问题递推关系//3、确定dp数组的计算顺序…

uniapp获取swiper中子组件的内容高度

swiper有默认高度,如果不单独设置一个具体高度&#xff0c;swiper后面的内容将不会展示 这里展示的例子是: swiper中放有一个子组件,想要完整展示子组件的内容&#xff0c;swiper就需要获取到子组件的内容高度并设置 <!-- 注意: 这里的单位是 px,不是rpx --><swiper…

Element UI导航菜单刷新就复原问题解决方法~

1、首先要知道为什么一刷新就复原了&#xff0c;是因为default-active属性设置的是默认值&#xff0c;是一个死值&#xff0c;一旦刷新就会复原&#xff0c;造成高亮不能保持&#xff0c;那么怎么解决呢&#xff1f; 2、很简单&#xff0c;无需像一些博主一样绑定path。思路&a…

linux中信号的相关概念

信号 内核层和用户层通信的一种方式 信号类型 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18…

【限流与Sentinel超详细分析】

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。 1 Sentinel 基本概念 资源…

MySQL —— 聚合查询,分组查询 与 联合查询

聚合函数 常见的统计总数、计算平局值等操作&#xff0c;可以使用聚合函数来实现&#xff0c;常见的聚合函数有&#xff1a; 函数说明count()统计数据总数sum()求和avg()求平均值max()求最大值min()求最小值 注意凡是涉及运算的&#xff0c;数据库会自动掉 NULL 值 注意NULL …

本地安Stable Diffusion全记录

这里写自定义目录标题 资料 资料 AI绘图软件Stable Diffusion 之本地安装 手把手教你在本机安装Stable Diffusion秋叶整合包 让 stable diffusion 局域网访问&#xff1a;详细解析配置步骤【Stable Diffusion 实战教程】 局域网多设备访问stable diffusion Stable Diffusion 老…

Lua语言基础学习:安装Lua和Lua库管理工具

Lua语言简介 Lua是一种轻量、高效、可嵌入的脚本语言&#xff0c;由巴西里约热内卢天主教大学的研究小组于1993年开发&#xff0c;Lua的解释器非常小巧&#xff0c;编译后的体积很小&#xff08;如完整解释器不过200KB&#xff09;&#xff0c;这使得它非常适合嵌入到其他应用程…

谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存

文章目录 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存1&#xff0c;在Elasticsearch的配置类中增加通用设置2&#xff0c;索引数据3&#xff0c;验证 一&#xff0c;谷粒商城实战笔记-126-全文检索-ElasticSearch-整合-测试保存 1&#xff0c;在…

汇编语言基础及常见汇编指令

一、实验原理 x64dbg 是一款开源且免费的 Ring 3 级动态调试器&#xff0c;采用 QT 编写&#xff0c;支持 32 / 64 位程序。其反汇编引擎 BeaEngine 和 Capstone 功能极其强大&#xff0c;也有丰富的插件和脚本功能&#xff0c;且并保持更新&#xff0c;目前已经基本替代了 Ol…

数字医学影像系统PACS源码,三甲以下医院都能满足,C#语言开发,C/S架构系统成熟稳定,支持二次开发项目使用。

数字医学影像系统&#xff08;RIS/PACS&#xff09;源码&#xff0c;三甲以下的医院都能满足。开发技术&#xff1a;C/S架构&#xff0c;C#开发语言&#xff0c;数据库服务器采用Oracle数据库。 PACS系统模块组成 &#xff1a; 工作站&#xff1a; 分诊工作站、超声工作站、放…

学习鸿蒙-应用市场申请签名

1.需要的文件概念 .cer / .p7b / .p12 / .csr HarmonyOS应用/服务通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;来保证应用/服务的完整性。在申请数字证书和Profile文件前&#xff0c;首先需要通过DevEco Studio来生成密钥&am…

为具有公网IPV6地址的服务器安装nextcloudAIO并使用NginxProxyManager配置反向代理

软件和硬件环境 ubuntu server 24.04&#xff0c;并已配置好ipv6公网地址&#xff0c;已安装好docker和docker-compose。一块单独的硬盘&#xff0c;用于单独存储nextcloud数据。&#xff08;非必需&#xff09;有一个能够正常解析的域名&#xff0c;并已配置好AAAA记录解析。…

【Linux学习】动静态库从原理到制作

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;动静态库&#x1f41f;动静态库的制作与使用&#x1f680;生成静态库&#x1f512;生成动态库 &#x1f98c;动态库的查…