NAME
Teng::Schema::Declare - DSL For Declaring Teng Schema
NORMAL USE
package MyDB::Schema;
use strict;
use warnings;
use Teng::Schema::Declare;
table {
name "your_table_name";
pk "primary_key";
columns qw( col1 col2 col3 );
inflate 'col1' => sub {
my ($col_value) = @_;
return MyDB::Class->new(name => $col_value);
};
deflate 'col1' => sub {
my ($col_value) = @_;
return ref $col_value ? $col_value->name : $col_value;
};
row_class 'MyDB::Row'; # optional
};
INLINE DECLARATION
use Teng::Schema::Declare;
my $schema = schema {
table {
name "your_table_name";
columns qw( col1 col2 col3 );
};
} "MyDB::Schema";
METHODS
schema-
schema data creation wrapper.
table-
set table name
pk-
set primary key
columns-
set columns
inflate_rule-
set inflate rule
row_namespace-
create Row class namespace
base_row_class-
Specify the default base row class with Teng::Schema::Declare.
Default value is Teng::Row.
This option is useful when you adds features for My::DB::Row class.
default_row_class_prefix-
Specify the default prefix of row class.
row_classof each table definition has priority overdefault_row_class_prefix.e.g.:
use Teng::Schema::Declare; my $schema = schema { default_row_class_prefix 'My::Entity'; table { name 'user'; column qw(name); }; }; $schema->get_row_class('user'); # => My::Entity::UserDefault value is determined by the schema class.
e.g.:
package My::DB::Schema; use Teng::Schema::Declare; table { name 'user'; column qw(name); }; __PACKAGE__->instance->get_row_class('user'); # => My::DB::Row::User 1;