Skip to main content
`Ctrl`+`K`

# 7.25.17. `grn_inspect`

## 7.25.17.1. 概要

`grn_obj` を調べるには2種類の関数があります。1つは `grn_inspect` 関数で、もう1つは `grn_p` 関数です。

`grn_inspect` 系の関数のリストは次の通りです。調査したオブジェクトの内容を指定したオブジェクトに設定します。

- `grn_inspect()`

- `grn_inspect_indented()`

- `grn_inspect_limited()`

- `grn_inspect_name()`

- `grn_inspect_encoding()`

- `grn_inspect_type()`

- `grn_inspect_query_log_flags()`

`grn_p` 系の関数のリストは次の通りです。調査したオブジェクトの内容をコンソールに出力します。

- `grn_p()`

- `grn_p_geo_point()`

- `grn_p_ii_values()`

## 7.25.17.2. 例

以下はオブジェクトを調査する例です。

    grn_obj buffer;
    GRN_TEXT_INIT(&buffer, 0);
    grn_inspect(&context, &buffer, obj);
    /* equivalent to grn_p(ctx, obj); */
    printf("inspected: <%.*s>\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

## 7.25.17.3. リファレンス

grn_obj *grn_inspect(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)

  バージョン 4.0.8 で追加.

  指定した `obj` オブジェクトを調査します。

  注釈

  `TABLE_PAT_KEY` なテーブルが指定された場合、すべてのキーが表示されます。この挙動が望ましくない場合、 `grn_inspect_limited()` をかわりに使ってください。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- 調査した内容が保存されるオブジェクト

    - obj -- 対象のオブジェクト

  戻り値:

    調査した内容が設定される `buffer` オブジェクト

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect(&context, &buffer, obj);
      printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  もし `obj` が `TABLE_PAT_KEY` なテーブルであれば、次のように表示されます:

      #<table:pat Users key:ShortText value:(nil) size:7 columns:[] default_tokenizer:(nil) normalizer:(nil) keys:["a", "b", "c", "d", "e", "f", "g"] subrec:none nodes:{
      4{0,5,0}
        L:2{0,6,0}
          L:1{0,7,0}
            L:0{0,0,0}
            R:1{0,7,0}("a")[01100001]
      ...

grn_obj *grn_inspect_indented(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj, const char *indent)

  バージョン 4.0.8 で追加.

  指定した `obj` オブジェクトを調査します。

  注釈

  `indent` は調査した内容が改行を含む場合に追加されます。(調査した内容のテキストは複数行で構成されている必要があります)

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- 調査した内容が保存されるオブジェクト

    - obj -- 対象のオブジェクト

    - indent -- 先頭に挿入されるインデント

  戻り値:

    調査した内容がインデントとともに設定される `buffer` オブジェクト

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect_indented(&context, &buffer, obj, "***");
      printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  もし `obj` が `TABLE_PAT_KEY` なテーブルであれば、次のように表示されます:

      ***#<table:pat Users key:ShortText value:(nil) size:7 columns:[] default_tokenizer:(nil) normalizer:(nil) keys:["a", "b", "c", "d", "e", "f", "g"] subrec:none nodes:{
      ***4{0,5,0}
      ***  L:2{0,6,0}
      ***    L:1{0,7,0}
      ***      L:0{0,0,0}
      ***      R:1{0,7,0}("a")[01100001]
      ...

grn_obj *grn_inspect_limited(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)

  バージョン 7.0.0 で追加.

  指定した `obj` オブジェクトを調査します。

  注釈

  調査した内容が長い場合、切り詰められます。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- 調査した内容が(切り詰められて)設定されるオブジェクト

    - obj -- 対象のオブジェクト

  戻り値:

    オブジェクトの詳細が設定される `buffer` オブジェクト。調査した内容が64文字よりも長い場合には、その内容は切り詰められます。そうでない場合調査した内容がそのまま設定されます。

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect(&context, &buffer, obj);
      printf("#=> %.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  `TABLE_PAT_KEY` なテーブルであっても、切り詰められた内容は次のように表示されます:

      #<table:pat Users key:ShortText value:(nil) size:7 columns:[] de...(502)

grn_obj *grn_inspect_name(grn_ctx *ctx, grn_obj *buffer, grn_obj *obj)

  バージョン 4.0.8 で追加.

  指定した `obj` オブジェクトを調査します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- オブジェクト名が設定されるオブジェクト

    - obj -- 対象のオブジェクト

  戻り値:

    オブジェクトの名前が設定される `buffer` オブジェクト。指定したオブジェクトが無効な値であれば `(nil)` が設定され、内部で使用しているオブジェクトであれば `(anonymouse: ID)` が設定されます。

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect_name(&context, &buffer, obj);
      printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  調査対象のオブジェクト名は次のように表示されます:

      Users

grn_obj *grn_inspect_encoding(grn_ctx *ctx, grn_obj *buffer, grn_encoding encoding)

  バージョン 4.0.8 で追加.

  指定した `obj` オブジェクトを調査します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- エンコーディング名が設定されるオブジェクト

    - encoding -- 調査対象のエンコーディング。エンコーディングは `GRN_ENC_DEFAULT`、 `GRN_ENC_NONE`、 `GRN_ENC_EUC_JP`、 `GRN_ENC_UTF8`、 `GRN_ENC_SJIS`、 `GRN_ENC_LATIN1`、 `GRN_ENC_KOI8R` のいずれかでなければなりません。

  戻り値:

    エンコーディング名が設定される `buffer` オブジェクト。不正な `encoding` が渡された場合、 `(unknown: ENCODING)` が `buffer` に設定されます。

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect_encoding(&context, &buffer, GRN_ENC_UTF8);
      printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  指定したエンコーディング名が次のように表示されます:

      UTF-8

grn_obj *grn_inspect_type(grn_ctx *ctx, grn_obj *buffer, unsigned char type)

  バージョン 4.0.8 で追加.

  指定した `obj` オブジェクトを調査します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- 型の名前が設定されるオブジェクト

    - type -- 調査対象の型

  戻り値:

    型の名前が設定される `buffer` オブジェクト。正しくない `type` が渡された場合、 `(unknown: TYPE_IN_HEX)` が `buffer` に設定されます。

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      grn_inspect_type(&context, &buffer, obj->header.type);
      printf("#=> %.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  `obj` が組込の型の場合、型の名前は次のように表示されます:

      GRN_TYPE

grn_obj *grn_inspect_query_log_flags(grn_ctx *ctx, grn_obj *buffer, unsigned int flags)

  バージョン 7.0.4 で追加.

  指定した `flag` を調査します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - buffer -- フラグの名前が設定されるオブジェクト

    - flags -- 調査対象の型

  戻り値:

    フラグの名前が設定される `buffer` オブジェクト。不正な `flags` が与えられた場合、空の文字列が `buffer` に設定されます。

      grn_obj buffer;
      GRN_TEXT_INIT(&buffer, 0);
      int current_flags = grn_query_logger_get_flags(&context);
      grn_inspect_query_log_flags(&context, &buffer, current_flags);
      printf("%.*s\n", (int)GRN_TEXT_LEN(&buffer), GRN_TEXT_VALUE(&buffer));

  クエリーログのフラグは次のように表示されます:

      COMMAND|RESULT_CODE|DESTINATION|CACHE|SIZE|SCORE

void grn_p(grn_ctx *ctx, grn_obj *obj)

  バージョン 4.0.8 で追加.

  指定した `obj` を調査し、その内容を出力します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - obj -- 対象のオブジェクト

      grn_p(&context, &buffer, obj);

  オブジェクトが `ShortText` なら次のように表示されます:

      #<type ShortText size:4096 type:var_size>

void grn_p_geo_point(grn_ctx *ctx, grn_geo_point *point)

  バージョン 4.0.8 で追加.

  指定した `obj` を調査し、geo pointの内容を出力します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - point -- 対象のオブジェクト

      grn_obj point;
      int latitude = ((40 * 60 * 60) + (42 * 60) + 46) * 1000;
      int longitude = ((-74 * 60 * 60) + (0 * 60) + 22) * 1000;
      GRN_WGS84_GEO_POINT_INIT(&point, 0);
      GRN_GEO_POINT_SET(&context, &point, latitude, longitude);
      grn_p_geo_point(&context, (grn_geo_point*)&point);

  もし `point` がニューヨークを示す場合、次のように表示されます:

      [(524290,18) ((0, 8, 44, 290),(0, 0, 0, 18)) [00000000 00000000 00000000 10000000 00000000 00000000 00000001 00001100]]

void grn_p_ii_values(grn_ctx *ctx, grn_obj *obj)

  バージョン 4.0.8 で追加.

  指定した `obj` を調査し、インデックスの値を出力します。

  パラメータ:

    - ctx -- その時点のコンテキスト。

    - obj -- 対象のオブジェクト

      grn_p_ii_values(&context, obj);

  もし `obj` がインデックスカラムの場合、次のように表示されます:

      [
        #<"!"
          elements:[
            {status:available, rid:1, sid:1, pos:0, tf:1, weight:0, rest:1},
            {status:available, rid:2, sid:1, pos:0, tf:1, weight:0, rest:1}
          ]
        >,
        ...