susumu.yata
null+****@clear*****
Wed May 28 15:58:55 JST 2014
susumu.yata 2014-05-28 15:58:55 +0900 (Wed, 28 May 2014) New Revision: 11a71875c31566df07087a03f950b117d82987e4 https://github.com/groonga/grnxx/commit/11a71875c31566df07087a03f950b117d82987e4 Message: Add methods to set sort conditions. Modified files: new-interface/sorter.hpp Modified: new-interface/sorter.hpp (+35 -3) =================================================================== --- new-interface/sorter.hpp 2014-05-28 15:52:55 +0900 (dd3185d) +++ new-interface/sorter.hpp 2014-05-28 15:58:55 +0900 (28329e9) @@ -13,14 +13,46 @@ class Sorter { // 所属するテーブルを取得する. virtual Table *table() const = 0; + // TODO: 条件を一気に設定するようにした方が使いやすい可能性がある. + // その場合, Table::create_sorter() で指定することも考慮すべきである. + + // TODO: reverse_order を bool で受け取るよりは, + // enum で受け取る方がわかりやすい. + + // 前提条件を追加する. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 何らかの条件にしたがって整列済みのときに指定する. + // 新しい条件は末尾に追加される. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - 式の評価結果が大小関係を持たない型になる. + // - リソースを確保できない. + virtual bool add_precondition(const Expression *expression, + bool reverse_order, + Error *error) const = 0; + + // 整列条件を追加する. + // 成功すれば true を返す. + // 失敗したときは *error にその内容を格納し, false を返す. + // + // 新しい条件は末尾に追加されるため, + // 優先順位の高い整列条件から順に追加しなければならない. + // + // 失敗する状況としては,以下のようなものが挙げられる. + // - 式の評価結果が大小関係を持たない型になる. + // - リソースを確保できない. + virtual bool add_condition(const Expression *expression, + bool reverse_order, + Error *error) const = 0; + // 行の一覧を整列する. // 成功すれば true を返す. // 失敗したときは *error にその内容を格納し, false を返す. // // 整列の結果が保証されるのは [offset, offset + limit) の範囲である. - // - // TODO: offset, limit により与えられる境界をまたいで同値が並ぶ場合, - // 同値が続く範囲を適切に返すべきである. + // なお,行 ID を整列条件に加えれば安定な整列になる. // // 失敗する状況としては,以下のようなものが挙げられる. // - 演算において例外が発生する. -------------- next part -------------- HTML����������������������������... Télécharger