The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

DR::Tarantool::Spaces - spaces container

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 that You use. It supports the following field types:

NUM, NUM64, STR

- standard tarantool types.

UTF8STR

- the same as STR, but string will be utf8-decoded after extracting from database.

INT & INT64

- the same as NUM and NUM64, but contain signed values.

JSON

- the filed will be encoded by JSON::XS before inserting and decoded after extracting from database.

METHODS

new

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

space

Returns space object by number or name.

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

space_number

Returns space number by its name.

pack_field

packs one field before making database request

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

unpack_field

unpacks one field after extracting data from database

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

pack_tuple

packs tuple before making database request

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

unpack_tuple

unpacks tuple after extracting data from 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

Creates (or returns) class for storage tuples. The class will be child of DR::Tarantool::Tuple. Returns unique class (package) name. If package is already exists, the method won't recreate it.

name

returns space name

number

returns space number

field_number

Returns number of field by its name.

tail_index

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

pack_field

packs field before making database request

unpack_field

unpacks field after extracting data from database

pack_tuple

packs tuple before making database request

unpack_tuple

unpacks tuple after extracting data from database

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/unera/dr-tarantool/.