Skip to content
No description, website, or topics provided.
Perl
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
author
lib/DBIx/Schema
t
xt
.gitignore
.travis.yml
Build.PL
Changes
LICENSE
META.json
README.md
cpanfile
minil.toml

README.md

Build Status Coverage Status

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

  • 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.

You can’t perform that action at this time.