DBICx::DataDictionary - Define a data dictionary to use with your DBIx::Class Schema
version 0.002
## 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, }; # SHORT_NAME is based on NAME add_type SHORT_NAME => NAME(size => 40); 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;
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:
@ISA
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.
You can even create another type extending a previous one like this:
add_type SHORT_NAME => NAME(size => 40);
This creates the SHORT_NAME type, using NAME as a base and changing the size to 40.
SHORT_NAME
NAME
To use these types in your sources, do:
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.
id
PK
You can override the type definition passing as arguments the override values:
__PACKAGE__->add_columns( id => PK(data_type => 'bigint'), );
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.
$type_name
\%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.
%hash
Returns nothing.
Inspired by MooseX::Types
Pedro Melo, <melo@simplicidade.org>
<melo@simplicidade.org>
API design by Matt S Trout
Copyright 2010 Pedro Melo
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install DBICx::DataDictionary, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DBICx::DataDictionary
CPAN shell
perl -MCPAN -e shell install DBICx::DataDictionary
For more information on module installation, please visit the detailed CPAN module installation guide.