susumu.yata
null+****@clear*****
Thu Jun 19 13:11:17 JST 2014
susumu.yata 2014-06-19 13:11:17 +0900 (Thu, 19 Jun 2014) New Revision: bfe2533861f3363568c8be1aee23627021a934aa https://github.com/groonga/grnxx/commit/bfe2533861f3363568c8be1aee23627021a934aa Message: Update grnxx::Merger. Modified files: new-interface/merger.hpp Modified: new-interface/merger.hpp (+49 -25) =================================================================== --- new-interface/merger.hpp 2014-06-19 10:43:28 +0900 (92fb896) +++ new-interface/merger.hpp 2014-06-19 13:11:17 +0900 (6cfaf66) @@ -5,42 +5,66 @@ namespace grnxx { -enum MergeStatus { - MERGE_CONTINUE, - MERGE_FINISH -}; - class Merger { public: Merger(); virtual ~Merger(); - // 所属するテーブルを取得する. - virtual Table *table() const = 0; + // 合成の入出力となるレコードの一覧を設定する. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 合成の途中で呼び出したときは,途中経過を破棄して新たな合成を開始する. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - 不正なレコードの一覧が指定された. + virtual bool reset(Error *error, + RecordSet *lhs_record_set, + RecordSet *rhs_record_set, + RecordSet *result_record_set); - // 行の一覧を合成する. - // 成功すれば出力された行数を返す. - // 失敗したときは *error にその内容を格納し, -1 を返す. + // 合成を進める. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. // - // 入力がまだ残っているときは MERGE_CONTINUE, - // 入力がもう残っていないときは MERGE_FINISH を指定する. + // 入力が行 ID 順でないなど,入力がすべて揃ってからでなければ + // 合成に取り掛かれないときは何もせずに成功する. // - // lhs_record_set, rhs_record_set を入力として, - // 合成した結果を result_record_set に出力する. - // 合成に使用された行は lhs_record_set, rhs_record_set から取り除かれる. - // そのため,空になった方の入力に行を補充することで合成を継続できる. + // 失敗する状況としては,以下のようなものが挙げられる. + // - 入出力が設定されていない. + // - 合成が既に完了している. + // - 演算で例外が発生する. + // - 不正なレコードの一覧が指定された. + virtual bool progress(Error *error) = 0; + + // 合成の仕上げをおこなう. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 入力がすべて揃ったものとして合成の仕上げをおこなう. + // offset, limit の指定があるときは,有効な範囲だけが残る. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - 入出力が設定されていない. + // - 合成が既に完了している. + // - 演算で例外が発生する. + // - リソースを確保できない. + virtual bool finish(Error *error) = 0; + + // レコードの一覧を合成する. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. // - // 入力は行 ID 昇順もしくは降順になっているものとする. - // また,入力はそれぞれ重複を含まないものとする. + // reset(), finish() を呼び出すことで合成をおこなう. // // 失敗する状況としては,以下のようなものが挙げられる. - // - スコアが合成によって不正な値になる. - // - リソースが確保できない. - virtual int64_t merge(Error *error, - RecordSet *lhs_record_set, - RecordSet *rhs_record_set, - RecordSet *result_record_set, - MergeStatus status) const = 0; + // - 不正なレコードの一覧が指定された. + // - 演算で例外が発生する. + // - リソースを確保できない. + virtual bool merge(Error *error, + RecordSet *lhs_record_set, + RecordSet *rhs_record_set, + RecordSet *result_record_set, }; } // namespace grnxx -------------- next part -------------- HTML����������������������������... Download