Amazon-DynamoDB
view release on metacpan or search on metacpan
lib/Amazon/DynamoDB/20120810.pm view on Meta::CPAN
sub secret_key { shift->{secret_key} }
sub debug_failures { shift->{debug} }
sub max_retries { shift->{max_retries} }
method create_table(TableNameType :$TableName!,
Int :$ReadCapacityUnits = 2,
Int :$WriteCapacityUnits = 2,
AttributeDefinitionsType :$AttributeDefinitions,
KeySchemaType :$KeySchema!,
ArrayRef[GlobalSecondaryIndexType] :$GlobalSecondaryIndexes where { scalar(@$_) <= 5 },
ArrayRef[LocalSecondaryIndexType] :$LocalSecondaryIndexes
) {
my %payload = (
TableName => $TableName,
ProvisionedThroughput => {
ReadCapacityUnits => int($ReadCapacityUnits),
WriteCapacityUnits => int($WriteCapacityUnits),
}
);
if (defined($AttributeDefinitions)) {
foreach my $field_name (keys %$AttributeDefinitions) {
my $type = $AttributeDefinitions->{$field_name};
push @{$payload{AttributeDefinitions}}, {
AttributeName => $field_name,
AttributeType => $type // 'S',
}
}
}
$payload{KeySchema} = _create_key_schema($KeySchema, $AttributeDefinitions);
foreach my $index_record (['GlobalSecondaryIndexes', $GlobalSecondaryIndexes],
['LocalSecondaryIndexes', $LocalSecondaryIndexes]) {
my $index_type = $index_record->[0];
my $index = $index_record->[1];
if (defined($index)) {
foreach my $i (@$index) {
my $r = {
IndexName => $i->{IndexName},
(($index_type eq 'GlobalSecondaryIndexes') ?
(ProvisionedThroughput => {
ReadCapacityUnits => int($i->{ProvisionedThroughput}->{ReadCapacityUnits} // 1),
WriteCapacityUnits => int($i->{ProvisionedThroughput}->{WriteCapacityUnits} // 1),
}) : ()),
KeySchema => _create_key_schema($i->{KeySchema}, $AttributeDefinitions),
};
my $type = $i->{Projection}->{ProjectionType};
$r->{Projection}->{ProjectionType} = $type;
if (defined($i->{Projection}->{NonKeyAttributes})) {
my $attrs = $i->{Projection}->{NonKeyAttributes};
# Can't validate these attribute names since they aren't part of the key.
$r->{Projection}->{NonKeyAttributes} = $attrs;
}
push @{$payload{$index_type}}, $r;
}
}
}
my $req = $self->make_request(
target => 'CreateTable',
payload => \%payload,
);
$self->_process_request($req)
}
method describe_table(TableNameType :$TableName!) {
my $req = $self->make_request(
target => 'DescribeTable',
payload => _make_payload({
TableName => $TableName
}));
$self->_process_request($req,
sub {
my $content = shift;
decode_json($content)->{Table};
});
}
method delete_table(TableNameType :$TableName!) {
my $req = $self->make_request(
target => 'DeleteTable',
payload => _make_payload({ TableName => $TableName }));
$self->_process_request($req,
sub {
my $content = shift;
decode_json($content)->{TableDescription}
});
}
method wait_for_table_status(TableNameType :$TableName!,
Int :$WaitInterval = 2,
TableStatusType :$DesiredStatus = "ACTIVE") {
repeat {
my $retry = shift;
$self->{implementation}->delay($retry ? $WaitInterval : 0)
->then(sub {
$self->describe_table(TableName => $TableName)
});
} until => sub {
my $f = shift;
my $status = $f->get->{TableStatus};
$status eq $DesiredStatus
};
}
method each_table(CodeRef $code,
( run in 0.896 second using v1.01-cache-2.11-cpan-140bd7fdf52 )