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