<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          sqlpp11C++ 安全 SQL 模版庫

          聯(lián)合創(chuàng)作 · 2023-09-30 20:38

          sqlpp11 是 C++ 的類型安全 SQL 模版庫。

          sqlpp11 是一個(gè)嵌入式領(lǐng)域特定語言(EDSL)的代表模版庫:

          • 為表和列定義類型

          • 在編譯的時(shí)候檢查結(jié)構(gòu)類型安全查詢(語法錯(cuò)誤,類型錯(cuò)誤,命名錯(cuò)誤,甚至是一些語義錯(cuò)誤)

          • 通過迭代 query-specific 結(jié)構(gòu)得到解析結(jié)果

          示例

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

          假設(shè)有個(gè)數(shù)據(jù)庫連接對象:

          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));
          瀏覽 14
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷国产精品秘 免 | 亚洲AV永久无码国产精品国产 | 亚洲精品视频区 | 天天日天天舔天天操 | 国产免费资源 |