---
name: "DR::Tarantool::Spaces"
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::Spaces"
---

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

Tarantool schema description

## NAME

DR::Tarantool::Spaces - Tarantool schema description

## SYNOPSIS

```
    use DR::Tarantool::Spaces;
    my $s = new DR::Tarantool::Spaces({
            1   => {
                name            => 'users',         # space name
                default_type    => 'STR',           # undescribed fields
                fields  => [
                    qw(login password role),
                    {
                        name    => 'counter',
                        type    => 'NUM'
                    },
                    {
                        name    => 'something',
                        type    => 'UTF8STR',
                    },
                    {
                        name    => 'opts',
                        type    => 'JSON',
                    }
                ],
                indexes => {
                    0   => 'login',
                    1   => [ qw(login password) ],
                    2   => {
                        name    => 'my_idx',
                        fields  => 'login',
                    },
                    3   => {
                        name    => 'my_idx2',
                        fields  => [ 'counter', 'something' ]
                    }
                }
            },
            0 => {
                ...
            }
    });
    my $f = $s->pack_field('users', 'counter', 10);
    my $f = $s->pack_field('users', 3, 10);             # the same
    my $f = $s->pack_field(1, 3, 10);                   # the same
    my $ts = $s->pack_keys([1,2,3] => 'my_idx');
    my $t = $s->pack_primary_key([1,2,3]);
```

## DESCRIPTION

The package describes all spaces used in an application. It supports the following field types:

- NUM, NUM64, STR

  The standard Tarantool \<http://tarantool.org\> types.

- UTF8STR

  The same as **STR**, but the string is utf8-decoded  after it's received from the server.

- INT & INT64

  The same as **NUM** and **NUM64**, but contain signed values.

- JSON

  The field is encoded with JSON::XS when putting into a database, and decoded after is received back  from the server.

## METHODS

### new

```
    my $spaces = DR::Tarantool::Spaces->new( $spaces );
```

### space

Return space object by number or name.

```
    my $space = $spaces->space('name');
    my $space = $spaces->space(0);
```

### space\_number

Return space number by its name.

### pack\_field

Packs one field into a format suitable for making a database request:

```
    my $field = $spaces->pack_field('space', 'field', $data);
```

### unpack\_field

Unpack one field after getting it from the server:

```
    my $field = $spaces->unpack_field('space', 'field', $data);
```

### pack\_tuple

Pack a tuple before making database request.

```
    my $t = $spaces->pack_tuple('space', [ 1, 2, 3 ]);
```

### unpack\_tuple

Unpack a tuple after getting it from the database:

```
    my $t = $spaces->unpack_tuple('space', \@fields);
```

## SPACES methods

### new

constructor

```
    use DR::Tarantool::Spaces;
    my $space = DR::Tarantool::Space->new($no, $space);
```

### tuple\_class

Create (or return) a class to hold tuple data. The class is a descendant of DR::Tarantool::Tuple. Returns a unique class (package) name. If a package with such name is already exists, the method doesn't recreate it.

### name

Get a space name.

### number

Get a space number.

### field\_number

Return field index by field name.

### tail\_index

Return index of the first element that is not described in the space.

### pack\_field

Pack a field before making a database request.

### unpack\_field

Unpack a single field in a server response.

### pack\_tuple

Pack a tuple to the binary protocol format:

### unpack\_tuple

Unpack a tuple in a server response.

### index\_number

returns index number by its name.

### index\_name

returns index name by its number.

## 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/\>.
