X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FTypes.pm;h=4727b4b31cf71fc0d356650e22e3cc358f4e7677;hb=c3653d166bc2442af935b493f853c3fe6db794fa;hp=41da8bb8a832b5be200b378b7b78ac1287c6fbad;hpb=1e0243f38578e76c16673ed8b5e23c7a35efcdd8;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Types.pm b/lib/SQL/Translator/Types.pm index 41da8bb..4727b4b 100644 --- a/lib/SQL/Translator/Types.pm +++ b/lib/SQL/Translator/Types.pm @@ -1,13 +1,61 @@ -package SQL::Translator::Types; -use MooseX::Types -declare => [qw(Column Constraint Index Procedure Schema Table Trigger View)]; - -subtype Column => as 'SQL::Translator::Object::Column'; -subtype Constraint => as 'SQL::Translator:Object::Constraint'; -subtype Index => as 'SQL::Translator:Object::Index'; -subtype Procedure => as 'SQL::Translator:Object::Procedure'; -subtype Schema => as 'SQL::Translator:Object::Schema'; -subtype Table => as 'SQL::Translator::Object::Table'; -subtype Trigger => as 'SQL::Translator:Object::Trigger'; -subtype View => as 'SQL::Translator:Object::View'; - -1; +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 DBICSchema)]; + + class_type DBICSchema, { class => 'DBIx::Class::Schema' };; + + 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' }; + + 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($_) }; + + coerce ArrayRef, from Str, via { [ $_ ] }; + + 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 }; + + 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 { } + +}