X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FTypes.pm;h=6e66ee22bf71c61121b3e52bc164b464a7440478;hb=4bbb37bba17d5c9e9f336e5f03386b165b4833d7;hp=1693303af7b55d40ae9241a8583a259e0bd2aa76;hpb=d78b115148f3e6782372cf39bcb9c463af349988;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Types.pm b/lib/SQL/Translator/Types.pm index 1693303..6e66ee2 100644 --- a/lib/SQL/Translator/Types.pm +++ b/lib/SQL/Translator/Types.pm @@ -1,30 +1,59 @@ -package SQL::Translator::Types; -use MooseX::Types::Moose qw(ArrayRef CodeRef Str); -use MooseX::Types -declare, [qw(Column Constraint Index Procedure Schema Sequence Table Trigger View DBIHandle)]; +use MooseX::Declare; +class SQL::Translator::Types { + use MooseX::Types::Moose qw(ArrayRef CodeRef HashRef Int Maybe Str Undef); + use MooseX::Types -declare, [qw(Column Constraint ForeignKey Index PrimaryKey Procedure Schema Sequence Table Trigger View + Bit DBIHandle MatchType Parser Producer Translator)]; + + class_type Column, { class => 'SQL::Translator::Object::Column' }; + class_type Constraint, { class => 'SQL::Translator::Object::Constraint' }; + class_type ForeignKey, { class => 'SQL::Translator::Object::ForeignKey' }; + class_type Index, { class => 'SQL::Translator::Object::Index' }; + class_type PrimaryKey, { class => 'SQL::Translator::Object::PrimaryKey' }; + class_type Procedure, { class => 'SQL::Translator::Object::Procedure' }; + class_type Schema, { class => 'SQL::Translator::Object::Schema' }; + class_type Sequence, { class=> 'SQL::Translator::Object::Sequence' }; + class_type Table, { class => 'SQL::Translator::Object::Table' }; + class_type Trigger, { class => 'SQL::Translator::Object::Trigger' }; + class_type View, { class => 'SQL::Translator::Object::View' }; + + class_type Parser, { class => 'SQL::Translator::Parser' }; + class_type Producer, { class => 'SQL::Translator::Producer' }; + class_type Translator, { class => 'SQL::Translator' }; -class_type Column, { class => 'SQL::Translator::Object::Column' }; -class_type Constraint, { class => 'SQL::Translator::Object::Constraint' }; -class_type Index, { class => 'SQL::Translator::Object::Index' }; -class_type Procedure, { class => 'SQL::Translator::Object::Procedure' }; -class_type Schema, { class => 'SQL::Translator::Object::Schema' }; -class_type Sequence, { class=> 'SQL::Translator::Object::Sequence' }; -class_type Table, { class => 'SQL::Translator::Object::Table' }; -class_type Trigger, { class => 'SQL::Translator::Object::Trigger' }; -class_type View, { class => 'SQL::Translator::Object::View' }; + coerce Column, from HashRef, via { SQL::Translator::Object::Column->new($_) }; + coerce Constraint, from HashRef, via { SQL::Translator::Object::Constraint->new($_) }; + coerce ForeignKey, from HashRef, via { SQL::Translator::Object::ForeignKey->new($_) }; + coerce Index, from HashRef, via { SQL::Translator::Object::Index->new($_) }; + coerce PrimaryKey, from HashRef, via { SQL::Translator::Object::PrimaryKey->new($_) }; + coerce Procedure, from HashRef, via { SQL::Translator::Object::Procedure->new($_) }; + coerce Schema, from HashRef, via { SQL::Translator::Object::Schema->new($_) }; + coerce Sequence, from HashRef, via { SQL::Translator::Object::Sequence->new($_) }; + coerce Table, from HashRef, via { SQL::Translator::Object::Table->new($_) }; + coerce Trigger, from HashRef, via { SQL::Translator::Object::Trigger->new($_) }; + coerce View, from HashRef, via { SQL::Translator::Object::View->new($_) }; -subtype DBIHandle, as 'DBI::db'; + coerce ArrayRef, from Str, via { [ $_ ] }; -coerce DBIHandle, - from Str, - via(\&_coerce_dbihandle_from_str), - from ArrayRef, - via(\&_coerce_dbihandle_from_arrayref); - from CodeRef, - via(\&_coerce_dbihandle_from_coderef); + subtype MatchType, as Str, where { /^(full|partial|simple)$/ || $_ eq '' }; + coerce MatchType, from Str, via { lc $_ }; + subtype Bit, as Int, where { $_ == 1 || $_ == 0 }; + coerce Bit, + from Undef, via { 0 }, + from Str, via { $_ eq '1' ? 1 : 0 }; -sub coerce_dbihandle_from_str { } -sub coerce_dbihandle_from_arrayref { } -sub coerce_dbihandle_from_coderef { } - -1; + subtype DBIHandle, as 'DBI::db'; + + coerce DBIHandle, + from Str, + via(\&_coerce_dbihandle_from_str), + from ArrayRef, + via(\&_coerce_dbihandle_from_arrayref); + from CodeRef, + via(\&_coerce_dbihandle_from_coderef); + + sub coerce_dbihandle_from_str { } + sub coerce_dbihandle_from_arrayref { } + sub coerce_dbihandle_from_coderef { } + +}