# 7.25.17. `grn_inspect`

## 7.25.17.1. Summary

There are two kind of functions to inspect `grn_obj`. One is `grn_inspect` function, The other is `grn_p` function.

Here is the list of `grn_inspect` function series. It sets inspected text into specified object.

- `grn_inspect()`

- `grn_inspect_indented()`

- `grn_inspect_limited()`

- `grn_inspect_name()`

- `grn_inspect_encoding()`

- `grn_inspect_type()`

- `grn_inspect_query_log_flags()`

Here is the list of `grn_p` function series. It prints inspected text into console.

- `grn_p()`

- `grn_p_geo_point()`

- `grn_p_ii_values()`

## 7.25.17.2. Example

Here is an example which inspects specified target object.

    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. Reference

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

  New in version 4.0.8.

  Inspect specified target `obj` object.

  Note

  A table is specified and it’s table type is `TABLE_PAT_KEY`, all keys are shown. If you do not want to this behavior, use `grn_inspect_limited()` instead.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is inspected text will be stored.

    - obj – The inspect target object.

  Returns:

    `buffer` object which is inspected text is set.

      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));

  If obj is `TABLE_PAT_KEY` table, it prints like the following:

      #<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)

  New in version 4.0.8.

  Inspect specified target `obj` object.

  Note

  `indent` is only added if inspected text contains newline (inspected text must be multiple lines).

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is inspected text will be stored.

    - obj – The inspect target object.

    - indent – The pre-pended indentation text.

  Returns:

    `buffer` object which is inspected text is set with indent.

      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));

  If obj is `TABLE_PAT_KEY` table, it prints like the following:

      ***#<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)

  New in version 7.0.0.

  Inspect specified target `obj` object.

  Note

  If inspected text is too long, it will be truncated.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is inspected(truncated) text will be stored.

    - obj – The inspect target object.

  Returns:

    `buffer` object which is object detail is set. If inspected text is longer than 64 characters, inspected text is truncated to it. Otherwise, inspected text will not be truncated.

      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));

  Even though if obj is `TABLE_PAT_KEY` table, it prints truncated result like the following:

      #<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)

  New in version 4.0.8.

  Inspect specified target `obj` object.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is object name will be stored.

    - obj – The inspect target object.

  Returns:

    `buffer` object which is name of object is set. If target object is nil, `(nil)` is set to buffer, if target object is internally used object, `(anonymouse: ID)` is set to buffer.

      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));

  Specified object name is printed like this:

      Users

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

  New in version 4.0.8.

  Inspect specified target `obj` object.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is encoding name will be stored.

    - encoding – The inspect target encoding. encoding must be `GRN_ENC_DEFAULT`, `GRN_ENC_NONE`, `GRN_ENC_EUC_JP`, `GRN_ENC_UTF8`, `GRN_ENC_SJIS`, `GRN_ENC_LATIN1` or `GRN_ENC_KOI8R`

  Returns:

    `buffer` object which is encoding name is set. If invalid `encoding` is given, `(unknown: ENCODING)` is set to `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));

  Specified encoding name is printed like the following:

      UTF-8

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

  New in version 4.0.8.

  Inspect specified target `obj` object.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is type name will be stored.

    - type – The inspect target type.

  Returns:

    `buffer` object which is type name is set. If invalid `type` is given, `(unknown: TYPE_IN_HEX)` is set to `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));

  If obj is builtin type, type name is printed like the following:

      GRN_TYPE

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

  New in version 7.0.4.

  Inspect specified target `flag`.

  Parameters:

    - ctx – The context object

    - buffer – The buffer object which is flag name will be stored.

    - flags – The inspect target type.

  Returns:

    `buffer` object which is flag name is set. If invalid `flags` is given, empty string is set to `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));

  The query logger flags are printed like the following:

      COMMAND|RESULT_CODE|DESTINATION|CACHE|SIZE|SCORE

void grn_p(grn_ctx *ctx, grn_obj *obj)

  New in version 4.0.8.

  Inspect specified target `obj` object. It prints inspected text.

  Parameters:

    - ctx – The context object

    - obj – The inspect target object.

      grn_p(&context, &buffer, obj);

  If obj is `ShortText`, it prints like the following:

      #<type ShortText size:4096 type:var_size>

void grn_p_geo_point(grn_ctx *ctx, grn_geo_point *point)

  New in version 4.0.8.

  Inspect specified target `obj` object. It prints inspected geo point text.

  Parameters:

    - ctx – The context object

    - point – The inspect target object.

      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);

  If `point` indicates New York City, it prints like the following:

      [(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)

  New in version 4.0.8.

  Inspect specified target `obj` object. It prints inspected index values.

  Parameters:

    - ctx – The context object

    - obj – The inspect target object.

      grn_p_ii_values(&context, obj);

  If `obj` is an index column, it prints like the following:

      [
        #<"!"
          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}
          ]
        >,
        ...