---
name: "DR::Tarantool::LLClient"
section: "3pm"
platform: "linux"
package: "libdr-tarantool-perl"
version: "0.45-2+b2"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/DR::Tarantool::LLClient"
---

# DR::Tarantool::LLClient(3pm)

a low level async client for Tarantool \<http://tarantool.org\>

## NAME

DR::Tarantool::LLClient - a low level async client for Tarantool \<http://tarantool.org\>

## SYNOPSIS

```
    DR::Tarantool::LLClient->connect(
        host => '127.0.0.1',
        port => '33033',
        cb   => {
            my ($tnt) = @_;
            ...
        }
    );
    $tnt->ping( sub { .. } );
    $tnt->insert(0, [ 1, 2, 3 ], sub { ... });
    $tnt->select(1, 0, [ [ 1, 2 ], [ 3, 4 ] ], sub { ... });
    $tnt->update(0, [ 1 ], [ [ 1 => add pack 'L<', 1 ] ], sub { ... });
    $tnt->call_lua( 'box.select', [ 0, 1, 2 ], sub { ... });
```

## DESCRIPTION

This module provides a low-level interface to Tarantool \<http://tarantool.org\>.

## METHODS

All methods receive **callback** as the last argument. The callback receives **HASHREF** value with the following fields:

- status

  Done status:

  - fatal

    A fatal error occurred. The server closed the connection or returned a broken package.

  - buffer

    An internal driver error.

  - error

    The request wasn't executed: the server returned an error.

  - ok

    Request was executed OK.

- errstr

  If an error occurred, contains error description.

- code

  Contains reply code.

- req\_id

  Contains request id. (see protocol documentation \<https://github.com/mailru/tarantool/blob/master/doc/box-protocol.txt\>)

- type

  Contains request type (see protocol documentation \<https://github.com/mailru/tarantool/blob/master/doc/box-protocol.txt\>)

- count

  Contains the count of returned tuples.

- tuples

  Returned tuples (**ARRAYREF** of **ARRAYREF**).

If you use **NUM** or **NUM64** field types, values for these fields need to be packed before they are sent to the server, and unpacked when received in a response. This is a low-level driver :)

### connect

Creates a connection to Tarantool

```
    DR::Tarantool::LLClient->connect(
        host => '127.0.0.1',
        port => '33033',
        cb   => {
            my ($tnt) = @_;
            ...
        }
    );
```

*Arguments*

- host & port

  Host and port to connect to.

- reconnect\_period

  An interval to wait before trying to reconnect after a fatal error or unsuccessful connect. If the field is defined and is greater than 0, the driver tries to reconnect to the server after this interval.

  **Important**: the driver does not reconnect after **the first** unsuccessful connection. It calls **callback** instead.

- reconnect\_always

  Try to reconnect even after the first unsuccessful connection.

- cb

  Done callback. The callback receives a connection handle connected to the server or an error string.

### is\_connected

**True** if this connection is established.

### connection\_status

Contains a string with the status of connection. Return value can be:

- ok

  Connection is established.

- not\_connected

  Connection isn't established yet, or was lost.

- connecting

  The driver is connecting to the server.

- fatal

  An attempt to connect was made, but ended up with an error.  If the event loop is running, and **reconnect\_period** option is set, the driver continues to try to reconnect and update its status.

### ping

Ping the server.

```
    $tnt->ping( sub { .. } );
```

*Arguments*

- a callback

  ### insert

Insert a tuple.

```
    $tnt->insert(0, [ 1, 2, 3 ], sub { ... });
    $tnt->insert(0, [ 4, 5, 6 ], $flags, sub { .. });
```

*Arguments*

- space

  - tuple

  - flags (optional)

  - callback

  ### select

Select a tuple or tuples.

```
    $tnt->select(1, 0, [ [ 1, 2 ], [ 3, 4 ] ], sub { ... });
    $tnt->select(1, 0, [ [ 1, 2 ], [ 3, 4 ] ], 1, sub { ... });
    $tnt->select(1, 0, [ [ 1, 2 ], [ 3, 4 ] ], 1, 2, sub { ... });
```

*Arguments*

- space

  - index

  - tuple\_keys

  - limit (optional)

  If the limit isn't set or is zero, select extracts all records without a limit.

- offset (optional)

  Default value is **0**.

- callback for results

  ### update

Update a tuple.

```
    $tnt->update(0, [ 1 ], [ [ 1 => add 1 ] ], sub { ... });
    $tnt->update(
        0,                                      # space
        [ 1 ],                                  # key
        [ [ 1 => add 1 ], [ 2 => add => 1 ],    # operations
        $flags,                                 # flags
        sub { ... }                             # callback
    );
    $tnt->update(0, [ 1 ], [ [ 1 => add 1 ] ], $flags, sub { ... });
```

*Arguments*

- space

  - tuple\_key

  - operations list

  - flags (optional)

  - callback for results

  ### delete

Delete a tuple.

```
    $tnt->delete( 0, [ 1 ], sub { ... });
    $tnt->delete( 0, [ 1 ], $flags, sub { ... });
```

*Arguments*

- space

  - tuple\_key

  - flags (optional)

  - callback for results

  ### call\_lua

Calls a lua procedure.

```
    $tnt->call_lua( 'box.select', [ 0, 1, 2 ], sub { ... });
    $tnt->call_lua( 'box.select', [ 0, 1, 2 ], $flags, sub { ... });
```

*Arguments*

- name of the procedure

  - tuple\_key

  - flags (optional)

  - callback to call when the request is ready

  ### last\_code

Return code of the last request or **undef** if there was no request.

### last\_error\_string

An error string if the last request ended up with an  error, or **undef** otherwise.

## Logging

The module can log requests/responses. Logging can be turned ON by  setting these environment variables:

- TNT\_LOG\_DIR

  Instructs LLClient to record all requests/responses into this directory.

- TNT\_LOG\_ERRDIR

  Instructs LLClient to record all requests/responses which ended up with an error into this directory.

## COPYRIGHT AND LICENSE

```
 Copyright (C) 2011 Dmitry E. Oboukhov <unera@debian.org>
 Copyright (C) 2011 Roman V. Nikolaev <rshadow@rambler.ru>
 This program is free software, you can redistribute it and/or
 modify it under the terms of the Artistic License.
```

## VCS

The project is placed git repo on github: \<https://github.com/dr-co/dr-tarantool/\>.
