sqlpp11 C++ 安全 SQL 模版库开源项目

我要开发同款
匿名用户2014年12月16日
102阅读
开发技术C/C++
所属分类数据库相关、数据库调整和优化
授权协议BSD

作品详情

sqlpp11是C++的类型安全SQL模版库。

sqlpp11是一个嵌入式领域特定语言(EDSL)的代表模版库:

为表和列定义类型

在编译的时候检查结构类型安全查询(语法错误,类型错误,命名错误,甚至是一些语义错误)

通过迭代query-specific结构得到解析结果

示例

CREATE TABLE foo (    id bigint,    name varchar(50),    hasFun bool);

假设有个数据库连接对象:

TabFoo foo;Db db(/* some arguments*/);// selecting zero or more results, iterating over the resultsfor (const auto& row : db(select(foo.name, foo.hasFun).from(foo).where(foo.id > 17 and foo.name.like("%bar%")))){    if (row.name.is_null())        std::cerr << "name is null, will convert to empty string" << std::endl;    std::string name = row.name;   // string-like fields are implicitly convertible to string    bool hasFun = row.hasFun;          // bool fields are implicitly convertible to bool}// selecting ALL columns of a tablefor (const auto& row : db(select(all_of(foo)).from(foo).where(foo.hasFun or foo.name == "joker"))){    int64_t id = row.id; // numeric fields are implicitly convertible to numeric c++ types}// selecting zero or one row, showing off with an alias:SQLPP_ALIAS_PROVIDER(cheese);if (const auto& row = db(select(foo.name.as(cheese)).from(foo).where(foo.id == 17))){    std::cerr << "found: " << row.cheese << std::endl;}// selecting a single row with a single result:return db(select(count(foo.id)).from(foo).where(true)).front().count;Of course there are joins and subqueries, more functions, order_by, group_by etc.These will be documented soon.// A sample insertdb(insert_into(foo).set(foo.id = 17, foo.name = "bar", foo.hasFun = true));// A sample updatedb(update(foo).set(foo.hasFun = not foo.hasFun).where(foo.name != "nobody"));// A sample deletedb(remove_from(foo).where(not foo.hasFun));
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论