単文 SQL の並行実行

単文 SQL の並行実行

SQL 単文だけを実行したい場合に、QueryWork を書かずに済むユーティリティ関数を提供している。 基本的には QueryWork の登録関数 addWork() と同じで、QueryWork ではなく sql 文字列を受け取るようになっている:
      typedef void(*t_sql_callback)(ResultSet rs, void* cbdata);
      bool addQuery(const dbi_char* sql, t_sql_callback cb, void* cbdata);

      typedef Future< ResultSet > FutureResultSet;
      FutureResultSet addQuery(const dbi_char* sql);

コールバック関数と Future で QueryWork を受け取っていた部分が、ResultSet を受け取るようになっている。これは sql を実行した際の結果である。

コールバック方式のコードは次のようになる:
  void Callback(ResultSet rs, void* cbdata) {
     int32_t result;
     rs->next();
     rs->getInt32(1, &result);
     printf("%d\n", result);
  }
  void callback_sample() {
     QueryParallelizer para;
     para.start(...);
     para.addQuery("select * from tbl", NULL, &Callback, NULL);
  }
Future 方式のコードは次のようになる:
  void future_sample() {
     QueryParallelizer para;
     para.start(...);

     FutureResultSet f = para.addQuery("select * from tbl", NULL);
     ResultSet rs = f->get();
     int32_t result;
     rs->next();
     rs->getInt32(1, &result);
     printf("%d\n", result);
  }