The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

MySQL::Partition - Utility for MySQL partitioning

SYNOPSIS

    use MySQL::Partition;
    my $dbh = DBI->connect(@connect_info);
    my $list_partition = MySQL::Partition->new(
        dbh        => $dbh,
        type       => 'list',
        table      => 'test',
        expression => 'event_id',
    );
    $list_partition->is_partitioned;
    $list_partition->create_partitions('p1' => 1); # ALTER TABLE test PARTITION BY LIST ...
    $list_partition->has_partition('p1'); # true
    
    $list_partition->add_partitions('p2_3' => '2, 3');
    
    # handle interface
    my $handle = $list_partition->prepare_add_partitions('p4' => 4);
    print $handle->statement;
    $handle->execute;
    
    $list_partition->truncate_partitions('p1');
    $handle = $list_partition->prepare_truncate_partitions('p2_3');
    $handle->execute;
    
    $list_partition->drop_partitions('p1');
    $handle = $list_partition->prepare_drop_partitions('p2_3');
    $handle->execute;

DESCRIPTION

MySQL::Partition is utility module for MySQL partitions.

This module creates a object for manipulating MySQL partitions. This is very useful that we no longer write complicated and MySQL specific SQL syntax any more.

INTERFACE

Constructor

my $mysql_partition:MySQL::Partition = MySQL::Partition->new(%args)

Create a new object which is subclass of MySQL::Partition. (MySQL::Partition::Type::Range or MySQL::Partition::Type::List.

Following keys are required in %args.

dbh => DBI::db
table => Str
type => Str

partitioning method. list(?: columns)? or range(?: columns)?.

If list is specified, new method returns MySQL::Partition::Type::List object.

expression => Str

partitioning expression. e.g. event_id, created_at, TO_DAYS(created_at), etc.

Methods

my @partition_names = $mysql_partition->retrieve_partitions

Returns partition names in the table.

my $bool = $mysql_partition->is_partitioned

Returns the table is partitioned or not.

my $bool = $mysql_partition->has_partitione($partition_name)

Returns the table has a specified partition name or not.

Methods for manipulating partition

$mysql_partition->create_partitions($partition_name => $partition_description, [$name => $description, ...])

$mysql_partition->add_partitions($partition_name => $partition_description, [$name => $description], ...)

$mysql_partition->drop_partitions(@partition_names)

$mysql_partition->truncate_partitions(@partition_names)

Methods for MySQL::Partition::Handle

Each method for manipulating partition has prepare_* method which returns MySQL::Partition::Handle object.

prepare_create_partitions
prepare_add_partitions
prepare_drop_partitions
prepare_truncate_partitions

Actually, $mysql_partition->create_partitions(...); is a shortcut of following.

    my $handle = $mysql_partition->prepare_create_partitions(...);
    $handle->execute;

LICENSE

Copyright (C) Songmu.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Songmu <y.songmu@gmail.com>