[Groonga-commit] groonga/grnxx at f3ce403 [master] Add ExpressionBuilder and scores.

Back to archive index

susumu.yata null+****@clear*****
Tue Jun 3 13:35:25 JST 2014


susumu.yata	2014-06-03 13:35:25 +0900 (Tue, 03 Jun 2014)

  New Revision: f3ce403019c340903c074d9c7c4e7ee641116e6c
  https://github.com/groonga/grnxx/commit/f3ce403019c340903c074d9c7c4e7ee641116e6c

  Message:
    Add ExpressionBuilder and scores.

  Copied files:
    new-interface/expression-builder.hpp
      (from new-interface/expression.hpp)
  Modified files:
    new-interface/expression.hpp

  Copied: new-interface/expression-builder.hpp (+13 -48) 50%
===================================================================
--- new-interface/expression.hpp    2014-06-02 10:57:43 +0900 (b19c0be)
+++ new-interface/expression-builder.hpp    2014-06-03 13:35:25 +0900 (07b095c)
@@ -1,16 +1,14 @@
-#ifndef GRNXX_EXPRESSION_HPP
-#define GRNXX_EXPRESSION_HPP
+#ifndef GRNXX_EXPRESSION_BUILDER_HPP
+#define GRNXX_EXPRESSION_BUILDER_HPP
 
 #include "grnxx/types.hpp"
 
 namespace grnxx {
 
-class ExpressionNode;
-
-class Expression {
+class ExpressionBuilder {
  public:
-  Expression();
-  virtual ~Expression();
+  ExpressionBuilder();
+  virtual ~ExpressionBuilder();
 
   // 所属するテーブルを取得する.
   virtual Table *table() const = 0;
@@ -50,50 +48,17 @@ class Expression {
                                                ExpressionNode **args,
                                                Error *error) = 0;
 
-  // 行の一覧をフィルタにかける.
-  // 成功すればフィルタにかけて残った行数を返す.
-  // 失敗したときは *error にその内容を格納し, -1 を返す.
-  //
-  // 評価結果が真になる行のみを残し,前方に詰めて隙間をなくす.
-  // フィルタにかける前後で順序関係は維持される.
-  //
-  // 有効でない行 ID を渡したときの動作は未定義である.
-  //
-  // 失敗する状況としては,以下のようなものが挙げられる.
-  // - 評価結果の型が真偽値でない.
-  // - 演算において例外が発生する.
-  //  - オーバーフローやアンダーフローが発生する.
-  //  - ゼロによる除算が発生する.
-  //  - NaN が発生する.
-  //   - TODO: これらの取り扱いについては検討の余地がある.
-  virtual int64_t filter(int64_t num_row_ids,
-                         RowID *row_ids,
-                         Error *error) = 0;
-
-  // 行の一覧に対する評価結果を取得する.
-  // 成功すれば true を返す.
-  // 失敗したときは *error にその内容を格納し, false を返す.
-  //
-  // TODO: 汎用型を配列にするのは効率が悪いため,ほかの方法が望ましい.
-  //       専用の型を用意することも含めて検討したい.
-  //
-  // TODO: 整列などにも使うことを考えれば,ネイティブな型を返すインタフェースが欲しい.
-  //       少なくとも内部インタフェースとして用意する必要がある.
-  //
-  // 有効でない行 ID を渡したときの動作は未定義である.
+  // 最後に作成したノードを根とする構文木に対応する式を作成する.
+  // 成功すれば有効なオブジェクトへのポインタを返す.
+  // 失敗したときは *error にその内容を格納し, nullptr を返す.
   //
   // 失敗する状況としては,以下のようなものが挙げられる.
-  // - 演算において例外が発生する.
-  //  - オーバーフローやアンダーフローが発生する.
-  //  - ゼロによる除算が発生する.
-  //  - NaN が発生する.
-  //   - TODO: これらの取り扱いについては検討の余地がある.
-  virtual bool evaluate(int64_t num_row_ids,
-                        const RowID *row_ids,
-                        Datum *values,
-                        Error *error) = 0;
+  // - 演算子と引数が対応していない.
+  //  - 演算子が求める引数の型・数と実際の引数の型・数が異なる.
+  // - リソースを確保できない.
+  virtual std::unique_ptr<Expression> create_expression(Error *error) const;
 };
 
 }  // namespace grnxx
 
-#endif  // GRNXX_EXPRESSION_HPP
+#endif  // GRNXX_EXPRESSION_BUILDER_HPP

  Modified: new-interface/expression.hpp (+24 -32)
===================================================================
--- new-interface/expression.hpp    2014-06-02 10:57:43 +0900 (b19c0be)
+++ new-interface/expression.hpp    2014-06-03 13:35:25 +0900 (1a8e903)
@@ -17,38 +17,7 @@ class Expression {
   // 評価結果の型を取得する.
   virtual DataType data_type() const = 0;
 
-  // 定数に対応するノードを作成する.
-  // 成功すれば有効なオブジェクトへのポインタを返す.
-  // 失敗したときは *error にその内容を格納し, nullptr を返す.
-  //
-  // 失敗する状況としては,以下のようなものが挙げられる.
-  // - 指定された定数が異常値である.
-  // - リソースを確保できない.
-  virtual ExpressionNode *create_datum_node(const Datum &datum,
-                                            Error *error) = 0;
-
-  // カラムに対応するノードを作成する.
-  // 成功すれば有効なオブジェクトへのポインタを返す.
-  // 失敗したときは *error にその内容を格納し, nullptr を返す.
-  //
-  // 失敗する状況としては,以下のようなものが挙げられる.
-  // - 指定されたカラムが存在しない.
-  // - リソースを確保できない.
-  virtual ExpressionNode *create_column_node(const char *column_name,
-                                             Error *error) = 0;
-
-  // 演算子に対応するノードを作成する.
-  // 成功すれば有効なオブジェクトへのポインタを返す.
-  // 失敗したときは *error にその内容を格納し, nullptr を返す.
-  //
-  // 失敗する状況としては,以下のようなものが挙げられる.
-  // - 演算子と引数が対応していない.
-  //  - 演算子が求める引数の型・数と実際の引数の型・数が異なる.
-  // - リソースを確保できない.
-  virtual ExpressionNode *create_operator_node(OperatorType operator_type,
-                                               int64_t num_args,
-                                               ExpressionNode **args,
-                                               Error *error) = 0;
+  // TODO: 行の一覧とスコアの受け渡し方を決める.
 
   // 行の一覧をフィルタにかける.
   // 成功すればフィルタにかけて残った行数を返す.
@@ -68,8 +37,30 @@ class Expression {
   //   - TODO: これらの取り扱いについては検討の余地がある.
   virtual int64_t filter(int64_t num_row_ids,
                          RowID *row_ids,
+                         double *scores,
                          Error *error) = 0;
 
+  // スコアを調整する.
+  // 成功すれば true を返す.
+  // 失敗したときは *error にその内容を格納し, false を返す.
+  //
+  // 評価結果を *scores に格納する.
+  // 式において _score を指定することにより, scores を入力として使うこともできる.
+  //
+  // 有効でない行 ID を渡したときの動作は未定義である.
+  //
+  // 失敗する状況としては,以下のようなものが挙げられる.
+  // - 評価結果をスコアに変換できない.
+  // - 演算において例外が発生する.
+  //  - オーバーフローやアンダーフローが発生する.
+  //  - ゼロによる除算が発生する.
+  //  - NaN が発生する.
+  //   - TODO: これらの取り扱いについては検討の余地がある.
+  virtual bool adjust(int64_t num_row_ids,
+                      RowID *row_ids,
+                      double *scores,
+                      Error *error) = 0;
+
   // 行の一覧に対する評価結果を取得する.
   // 成功すれば true を返す.
   // 失敗したときは *error にその内容を格納し, false を返す.
@@ -90,6 +81,7 @@ class Expression {
   //   - TODO: これらの取り扱いについては検討の余地がある.
   virtual bool evaluate(int64_t num_row_ids,
                         const RowID *row_ids,
+                        const double *scores,
                         Datum *values,
                         Error *error) = 0;
 };
-------------- next part --------------
HTML����������������������������...
下载 



More information about the Groonga-commit mailing list
Back to archive index