susumu.yata
null+****@clear*****
Tue May 27 16:24:57 JST 2014
susumu.yata 2014-05-27 16:24:57 +0900 (Tue, 27 May 2014) New Revision: 65127aefebf3c55a8980795ea22921a20ddf7a57 https://github.com/groonga/grnxx/commit/65127aefebf3c55a8980795ea22921a20ddf7a57 Message: Add TODOs. Modified files: new-interface/column.hpp new-interface/expression.hpp new-interface/table.hpp Modified: new-interface/column.hpp (+2 -0) =================================================================== --- new-interface/column.hpp 2014-05-27 13:53:46 +0900 (2de98f7) +++ new-interface/column.hpp 2014-05-27 16:24:57 +0900 (8307cfc) @@ -109,6 +109,8 @@ class Column { // 入力はできなくなってしまう. // 何か良い解決法がないか検討する. // + // TODO: Datum が行 ID と整数を別の型として扱えないか検討する. + // // 失敗する状況としては,以下のようなものが挙げられる. // - 指定された行 ID が有効でない. // - 指定された値をカラムの型に変換できない. Modified: new-interface/expression.hpp (+4 -4) =================================================================== --- new-interface/expression.hpp 2014-05-27 13:53:46 +0900 (2392390) +++ new-interface/expression.hpp 2014-05-27 16:24:57 +0900 (65813b1) @@ -47,7 +47,7 @@ class Expression { // - リソースを確保できない. virtual ExpressionNode *create_operator_node(OperatorType operator_type, Int64 num_args, - ExpressionNode *args, + ExpressionNode **args, Error *error) = 0; // 行の一覧をフィルタにかける. @@ -66,9 +66,9 @@ class Expression { // - ゼロによる除算が発生する. // - NaN が発生する. // - TODO: これらの取り扱いについては検討の余地がある. - virtual Int64 filter(Int64 num_row_ids, - RowID *row_ids, - Error *error) = 0; + virtual int64_t filter(Int64 num_row_ids, + RowID *row_ids, + Error *error) = 0; // 行の一覧に対する評価結果を取得する. // 成功すれば true を返す. Modified: new-interface/table.hpp (+25 -2) =================================================================== --- new-interface/table.hpp 2014-05-27 13:53:46 +0900 (f293583) +++ new-interface/table.hpp 2014-05-27 16:24:57 +0900 (f57c1d6) @@ -136,6 +136,11 @@ class Table { // 行 ID を降順に取り出すだけで新しい行から順に走査することができる. // 時刻カラムに対する索引で対応するより,ずっと効率的である. // ただし,頻繁に削除すると隙間だらけになって効率が落ちる. + // オプションとしてはよさそう. + // + // TODO: 削除によって行 ID に空きができたとき,前方へと詰めるという案がある. + // ただし,参照されているテーブルについては参照元の修正が必要になる. + // また,行 ID に特別な意味を持たせている場合は問題になる. // // 失敗する状況としては,以下のようなものが挙げられる. // - 指定された ID が行 ID の最小値より小さいか最大値 + 1 より大きい. @@ -226,8 +231,6 @@ class Table { // 返り値は std::unique_ptr なので自動的に delete される. // 自動で delete されて困るときは release() で生のポインタを取り出す必要がある. // - // TODO: Expression のインタフェースを決める. - // // TODO: 簡易なものでかまわないので,クエリ文字列をパースして式を構築してくれる // インタフェースがあれば何かと便利かもしれない. // テスト用と考えれば,最適化などは一切せず, @@ -250,6 +253,26 @@ class Table { virtual std::unique_ptr<Sorter> create_sorter( const SorterOptions &options) const = 0; + // TODO: Grouper + // + // 時刻のカラムについて,月や曜日によるグループ化ができると便利である. + // 同様に値の範囲(たとえば 100 ずつ)でグループ化ができると便利である. + // + // グループ単位の集計操作は個別に実装を検討する. + + // TODO: 検索結果の型を決める. + // + // 行 ID の配列とスコアの配列に分けるのと, + // 行 ID とスコアをメンバとする構造体の配列にする案がある. + + // TODO: 検索結果のマージ方法を検討する. + // + // 全文検索や全走査を使えば行 ID 順となるが,ほかの索引を使ったときは + // 別の順序になるかもしれないため,そういうケースへの対策が必要である. + // 行 ID 順についても,昇順と降順があることに注意が必要である. + // + // スコアの合成方法(正規化や加算など)を検討する. + protected: Table(); virtual ~Table(); -------------- next part -------------- HTML����������������������������...下載