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

Data::HandyGen::mysql::TableDef - Manages table definition in mysql

VERSION

This documentation refers to Data::HandyGen::mysql::TableDef version 0.0.5

SYNOPSIS

    use Data::HandyGen::mysql::TableDef;
    use DBI;

    my $dbh = DBI->connect('dbi:mysql:dbname=testdb', 'username', 'password');
    my $table_def = Data::HandyGen::mysql::TableDef->new( dbh => $dbh, table_name => 'table1');

CAUTION

This module is not intended for use outside Data::HandyGen. Its interface may be changed in the future.

DESCRIPTION

This module manages a table definition in one table in Mysql.

METHODS

new(%params)

Constructor.

dbh($dbh)

Setter/getter for database handle generated by DBI.

table_name($name)

Setter/getter for table name.

colnames()

Returns all columns in this table. If you have a table such as

    mysql> desc table1;
    +-------------+-------------+------+-----+---------+----------------+
    | Field       | Type        | Null | Key | Default | Extra          |
    +-------------+-------------+------+-----+---------+----------------+
    | id          | int(11)     | NO   | PRI | NULL    | auto_increment |
    | category_id | int(11)     | YES  | MUL | NULL    |                |
    | name        | varchar(20) | NO   |     | NULL    |                |
    | price       | int(11)     | NO   |     | NULL    |                |
    +-------------+-------------+------+-----+---------+----------------+

colnames() returns an arrayref containing 'id', 'category_id', 'name' and 'price'. Order won't be guaranteed.

def()

Returns a table definition. It is a hashref which information is originally retrieved from information_schema.columns, which contains fields such as:

    +--------------------------+---------------------+------+-----+---------+-------+
    | Field                    | Type                | Null | Key | Default | Extra |
    +--------------------------+---------------------+------+-----+---------+-------+
    | TABLE_CATALOG            | varchar(512)        | NO   |     |         |       |
    | TABLE_SCHEMA             | varchar(64)         | NO   |     |         |       |
    | TABLE_NAME               | varchar(64)         | NO   |     |         |       |
    | COLUMN_NAME              | varchar(64)         | NO   |     |         |       |
    | ORDINAL_POSITION         | bigint(21) unsigned | NO   |     | 0       |       |
    | COLUMN_DEFAULT           | longtext            | YES  |     | NULL    |       |
    | IS_NULLABLE              | varchar(3)          | NO   |     |         |       |
    | DATA_TYPE                | varchar(64)         | NO   |     |         |       |
    | CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
    | CHARACTER_OCTET_LENGTH   | bigint(21) unsigned | YES  |     | NULL    |       |
    | NUMERIC_PRECISION        | bigint(21) unsigned | YES  |     | NULL    |       |
    | NUMERIC_SCALE            | bigint(21) unsigned | YES  |     | NULL    |       |
    | CHARACTER_SET_NAME       | varchar(32)         | YES  |     | NULL    |       |
    | COLLATION_NAME           | varchar(32)         | YES  |     | NULL    |       |
    | COLUMN_TYPE              | longtext            | NO   |     | NULL    |       |
    | COLUMN_KEY               | varchar(3)          | NO   |     |         |       |
    | EXTRA                    | varchar(27)         | NO   |     |         |       |
    | PRIVILEGES               | varchar(80)         | NO   |     |         |       |
    | COLUMN_COMMENT           | varchar(1024)       | NO   |     |         |       |
    +--------------------------+---------------------+------+-----+---------+-------+

Table definition returned by def() is like the following:

    $ret = {
        'column_1'  => {
            TABLE_CATALOG   => 'def',
            TABLE_SCHEMA    => 'test',
            ...
        },
        'column_2'  => {
            TABLE_CATALOG   => 'def',
            TABLE_SCHEMA    => 'test',
            ...
        },
        ....
    }

Field names in the hashref are all converted to uppercase.

is_pk($colname)

Returns 1 if $colname is one of primary key columns. Otherwise returns 0.

is_fk($colname)

If $colname is a foreign key, returns referenced table/column name like this:

    #  In case only one foreign key found
    $ret = {
        table   => 'table name',
        column  => 'column name'
    }

    #  In case multiple foreign keys found
    $ret = [
        { table => 'table1', column => 'column1' },
        { table => 'table2', column => 'column2' },
        { table => 'table3', column => 'column3' },
    ]

Otherwise, returns undef.

pk_columns()

Returns arrayref of column names of primary keys.

column_def($column_name)

Returns column definition (ColumnDef object)

get_auto_increment_value()

Returns a value which auto_increment will generate next time.

AUTHOR

Takashi Egawa

LICENCE AND COPYRIGHT

Copyright (c)2013-2014 Takashi Egawa. All rights reserved.

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

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.