本文へスキップ
`Ctrl`+`K`

# 7.3.52. `reference_release`

## 7.3.52.1. 概要

Added in version 10.0.4.

`reference_release` は対象オブジェクトに対して reference_acquire で増やした参照を1つ減らします。

このコマンドはリファレンスカウントモードのとき以外は意味がありません。リファレンスカウントモードを有効にするには `GRN_ENABLE_REFERENCE_COUNT=yes` 環境変数を使います。

reference_acquire を実行したら対応する `reference_release` を実行しないといけません。もし、 `reference_release` を実行することを忘れると reference_acquire で参照したオブジェクトは決して自動でクローズされません。

## 7.3.52.2. 構文

このコマンドには2つの引数があります。

すべての引数は省略可能です:

    reference_release [target_name=null]
                      [recursive=yes]

## 7.3.52.3. 使い方

使い方を示すために使うスキーマ定義は以下の通りです。

実行例:

    table_create Users TABLE_HASH_KEY ShortText
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Users age COLUMN_SCALAR UInt8
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Users introduction COLUMN_SCALAR ShortText
    # [[0,1337566253.89858,0.000355720520019531],true]
    table_create Ages TABLE_PAT_KEY UInt8
    # [[0,1337566253.89858,0.000355720520019531],true]
    column_create Ages user_age COLUMN_INDEX Users age
    # [[0,1337566253.89858,0.000355720520019531],true]

対応する reference_acquire と同じ引数の `reference_release` を実行しないといけません。

もし、 `--target_name Users --recursive dependent` で reference_acquire を実行したら、 `--target_name Users --recursive dependent` で `reference_release` を実行しないといけません。

実行例:

    reference_release --target_name Users --recursive dependent
    # [[0,1337566253.89858,0.000355720520019531],true]
    # select Users ...
    # load --table Users ...
    reference_release --target_name Users --recursive dependent
    # [[0,1337566253.89858,0.000355720520019531],true]

## 7.3.52.4. 引数

このセクションではすべての引数について説明します。

### 7.3.52.4.1. 必須引数

必須の引数はありません。

### 7.3.52.4.2. 省略可能引数

いくつか省略可能な引数があります。

#### 7.3.52.4.2.1. `target_name`

対象オブジェクトの名前を指定します。対象オブジェクトはデータベース、テーブル、カラムのどれかです。

このパラメーターを省略すると、データベースが対象オブジェクトになります。

実行例:

    reference_release
    # [[0,1337566253.89858,0.000355720520019531],true]

テーブル名を指定すると、そのテーブルが対象オブジェクトになります。

実行例:

    reference_release --target_name Users
    # [[0,1337566253.89858,0.000355720520019531],true]

カラム名を指定すると、そのカラムが対象オブジェクトになります。

実行例:

    reference_release --target_name Users.age
    # [[0,1337566253.89858,0.000355720520019531],true]

#### 7.3.52.4.2.2. `recursive`

書き出し対象オブジェクトの子オブジェクトも対象にするかどうかを指定します。

詳細は recursive を見てください。

## 7.3.52.5. 戻り値

このコマンドが成功したときは以下のようにボディは `true` になります:

    [HEADER, true]

このコマンドが失敗すると、 `HEADER` にエラーの詳細が含まれます。

`HEADER` については 出力形式 を参照してください。