# 7.3.50. `reference_release`

## 7.3.50.1. Summary

New in version 10.0.4.

`reference_release` releases a reference of target objects acquired by reference_acquire.

This command is meaningless unless you use the reference count mode. You can enable the reference count mode by the `GRN_ENABLE_REFERENCE_COUNT=yes` environment variable.

You must call a corresponding `reference_release` for a reference_acquire call. If you forget to call `reference_release`, target objects by reference_acquire are never closed automatically.

## 7.3.50.2. Syntax

This command takes two parameters.

All parameters are optional:

    reference_release [target_name=null]
                      [recursive=yes]

## 7.3.50.3. Usage

Here is a schema definition to show usage:

Execution example:

    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]

You must call `reference_release` with the same arguments as corresponding reference_acquire.

If you call reference_acquire with `--target_name Users --recursive dependent`, you must call `reference_release` with `--target_name Users --recursive dependent`:

Execution example:

    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.50.4. Parameters

This section describes all parameters.

### 7.3.50.4.1. Required parameters

There is no required parameter.

### 7.3.50.4.2. Optional parameters

There are optional parameters.

#### 7.3.50.4.2.1. `target_name`

Specifies a target object name. Target object is one of database, table or column.

If you omit this parameter, database is the target object:

Execution example:

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

If you specify a table name, the table is the target object:

Execution example:

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

If you specify a column name, the column is the target object:

Execution example:

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

#### 7.3.50.4.2.2. `recursive`

Specifies whether child objects of the target object are also target objects.

See recursive for details.

## 7.3.50.5. Return value

The command returns `true` as body on success such as:

    [HEADER, true]

If the command fails, error details are in `HEADER`.

See Output format for `HEADER`.

previous

7.3.49. `reference_acquire`

next

7.3.51. `register`