NAME
DBIx::Schema::DSL - DSL for Database schema declaration
VERSION
This document describes DBIx::Schema::DSL version 0.01.
SYNOPSIS
# declaration
package My::Schema;
use DBIx::Schema::DSL;
database 'MySQL'; # optional. default 'MySQL'
create_database 'my_database'; # optional
# Optional. Default values is same as follows if database is 'MySQL'.
add_table_options
'mysql_table_type' => 'InnoDB',
'mysql_charset' => 'utf8';
create_table 'book' => columns {
integer 'id', primary_key, auto_increment;
varchar 'name', null;
integer 'author_id';
decimal 'price', 'size' => [4,2];
add_index 'author_id_idx' => ['author_id'];
belongs_to 'author';
};
create_table 'author' => columns {
primary_key 'id';
varchar 'name';
decimal 'height', 'precision' => 4, 'scale' => 1;
add_index 'height_idx' => ['height'];
has_many 'book';
};
1;
# use your schema class like this
# use My::Schema;
# print My::Schema->output; # output DDL
DESCRIPTION
This module provides DSL for database schema declaration like ruby's
ActiveRecord::Schema.
THE SOFTWARE IS IT'S IN ALPHA QUALITY. IT MAY CHANGE THE API WITHOUT
NOTICE.
INTERFACE
Export Functions
"database($str :Str)"
Set database type like MySQL, Oracle and so on. (Optional default
'MySQL')
"create_database($str :Str)"
Set database name. (Optional)
"add_table_options(%opt :Hash)"
Set global setting of table->extra for SQL::Translator::Table
"default_unsigned()"
Automatically set unsigned when declaring integer columns. If you want
to declare singed columns, using `singed` sugar.
"create_table($table_name :Str, $columns :CodeRef)"
Declare table.
"columns { block } :CodeRef"
Declare columns settings of table in block. In fact "columns {...}" is
mostly same as "sub {...}", so just syntax sugar.
Export Functions for declaring column
"column($column_name :Str, $data_type :Str(DataType), (%option :Optional))"
Declare column. It can be called only in create_table block.
$data_type strings (ex. "integer" ) are can be used as a function.
"integer($column_name, (%option))" is same as "column($column_name,
(%option))"
DataType functions are as follows.
bigint
binary
bit
blob
char
date
datetime
dec
decimal
double
integer
number
numeric
smallint
string
text
timestamp
tinyblob
tinyint
varbinary
varchar
"primary_key($column_name :Str, (%option :Optional))"
Same as "column($column_name, 'integer', primary_key => 1,
auto_increment => 1, (%option))"
"pk($column_name :Str, (%option :Optional))"
Alias of "primary_key" .
%option arguments
Specify column using %option hash.
integer 'id', primary_key => 1, default => 0;
Each keyword has mapping to argument for SQL::Translator::Field.
mappings are:
null => 'is_nullable',
size => 'size',
limit => 'size',
default => 'default_value',
unique => 'is_unique',
primary_key => 'is_primary_key',
auto_increment => 'is_auto_increment',
unsigned => {extra => {unsigned => 1}},
precisition => 'size[0]',
scale => 'size[1]',
Syntax sugars for %option
There are syntax sugar functions for %option.
"primary_key()"
('primary_key' => 1)
"pk()"
Alias of primary_key.
"unique()"
('unique' => 1)
"auto_increment()"
('auto_increment' => 1)
"unsigned()"
('unsigned' => 1)
"signed()"
('unsigned' => 0)
"null()"
('null' => 1)
"not_null()"
('null' => 0)
Export Functions for declaring primary_key and indices
"set_primary_key(@columns)"
Set primary key. This is useful for multi column primary key. Do not
need to call this function when primary_key column already declared.
"add_index($index_name :Str, $colums :ArrayRef, ($index_type :Str(default 'NORMAL')) )"
Add index.
"add_unique_index($index_name :Str, $colums :ArrayRef)"
Same as "add_index($index_name, $columns, 'UNIQUE')"
Export Functions for declaring foreign keys
"foreign_key($columns :(Str|ArrayRef), $foreign_table :Str, $foreign_columns :(Str|ArrayRef) )"
Add foreign key.
"fk(@_)"
Alias of "foreign_key(@_)"
Foreign key sugar functions
"has_many($foreign_table)"
"has_one($foreign_table)"
"belongs_to($foreign_table)"
Export Class Methods
"output() :Str"
Output schema DDL.
"no_fk_output() :Str"
Output schema DDL without FOREIGN KEY constraints.
"translate_to($database_type :Str) :Any"
Output schema DDL of $database_type.
"translator() :SQL::Translator"
Returns SQL::Translator object.
"context() :DBIx::Schema::DSL::Context"
DEPENDENCIES
Perl 5.8.1 or later.
BUGS
All complex software has bugs lurking in it, and this module is no
exception. If you find a bug please either email me, or add the bug to
cpan-RT.
SEE ALSO
perl
AUTHOR
Masayuki Matsuki <y.songmu@gmail.com>
LICENSE AND COPYRIGHT
Copyright (c) 2013, Masayuki Matsuki. All rights reserved.
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.