NAME
DBICx::DataDictionary - Define a data dictionary to use with your DBIx::Class Schema
VERSION
version 0.001
SYNOPSIS
## declare your data dictionary class
package My::DataDictionary;
use strict;
use warnings;
use DBICx::DataDictionary;
add_type PK => {
data_type => 'integer',
is_nullable => 0,
is_auto_increment => 1,
};
add_type NAME => {
data_type => 'varchar',
is_nullable => 0,
size => 100,
};
1;
## Use it on your own Sources
package My::Schema::Result::Table;
use strict;
use warnings;
use base 'DBIx::Class';
use My::Schema::DataDictionary qw( PK NAME );
__PACKAGE__->load_components(qw(Core));
__PACKAGE__->table('table');
__PACKAGE__->add_columns(
table_id => PK,
name => NAME(is_nullable => 1),
);
__PACKAGE__->set_primary_key('table_id');
1;
DESCRIPTION
As your DBIx::Class-based application starts to grown, you start to use the same definitions for some columns.
All your primary keys are probably alike, and some fields, like names, addresses and other elements are also similar.
The DBICx::DataDictionary module allows you to create your own libraries of column types, and reuse them in your sources.
First you create a class for you class library and use the DBICx::DataDictionary module. This will update your class @ISA
to subclass the Exporter:
package My::DataDictionary;
use DBICx::DataDictionary;
Then you declare your types using the add_type() function (imported by default) like this:
add_type PK => {
data_type => 'integer',
is_nullable => 0,
is_auto_increment => 1,
};
Each type declared is available as an optional exported symbol from your class library. To use them in your sources:
use My::DataDictionary qw( PK );
Alternatively you can import all your types with:
use My::DataDictionary qw( :all );
To use your types in a column definition:
__PACKAGE__->add_columns(
id => PK,
);
In this case the id
column will use the PK
type definition.
You can override the type definition passing as arguments the override values:
__PACKAGE__->add_columns(
id => PK(data_type => 'bigint'),
);
FUNCTIONS
add_type()
add_type($type_name, \%column_definition);
add_type NAME => { data_type => 'varchar', size => 150 };
Defines a new type named $type_name
. The default column specification is \%column_definition
.
Each type is defined as a exportable function inside you data dictionary class. This function accepts a %hash
with column definition options that will override the \%column_definition
.
Returns nothing.
SEE ALSO
Inspired by MooseX::Types
AUTHOR
Pedro Melo, <melo@simplicidade.org>
API design by Matt S Trout
COPYRIGHT & LICENSE
Copyright 2010 Pedro Melo
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.