| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

C++类型安全SQL模版库:sqlpp11

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 results  for (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 table  for (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 insert  db(insert_into(foo).set(foo.id = 17, foo.name = "bar", foo.hasFun = true));  // A sample update  db(update(foo).set(foo.hasFun = not foo.hasFun).where(foo.name != "nobody"));  // A sample delete  db(remove_from(foo).where(not foo.hasFun));

项目主页:http://www.open-open.com/lib/view/home/1418699118902

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1418699118902.html
sqlpp11 C/C++开发