NAME
DBIx::Schema::DSL - DSL for Database schema declaration
VERSION
This document describes DBIx::Schema::DSL version 1.0000.
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::Schema::Table
default_unsigned()
Automatically set unsigned when declaring integer columns. If you want to declare singed columns, using `singed` sugar.
default_not_null()
Automatically set not null. If you want to declare null columns, using `null` 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('integer', $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
float
real
enum
set
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::Schema::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}},
on_update => {extra => {'on update' => 'hoge'}},
precision => '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
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
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.