X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FDDL.pm;h=91fb07bb677a98012aca27776810809dea3fd8f6;hb=8a8127589f36580ba226fcf3c2891d572c1ef692;hp=55e10e74f8a2aa9e611bb2d94736a868968d06d7;hpb=432eccda2c2b101d7154384c09fe9d643faada2c;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Parser/DDL.pm b/lib/SQL/Translator/Parser/DDL.pm index 55e10e7..91fb07b 100644 --- a/lib/SQL/Translator/Parser/DDL.pm +++ b/lib/SQL/Translator/Parser/DDL.pm @@ -1,6 +1,54 @@ -package SQL::Translator::Parser::DDL; -use Moose::Role; +use MooseX::Declare; +role SQL::Translator::Parser::DDL { + use MooseX::Types::Moose qw(HashRef Maybe Str); + use SQL::Translator::Types qw(Schema); + use SQL::Translator::Constants qw(:sqlt_types); + use MooseX::MultiMethods; + use Parse::RecDescent; -no Moose; + has 'data_type_mapping' => ( + isa => HashRef, + is => 'ro', + lazy_build => 1 + ); -1; + has 'schema_name' => ( + is => 'rw', + isa => Maybe[Str], + lazy => 1, + default => undef + ); + + has 'grammar' => ( + is => 'ro', + isa => Str, + lazy_build => 1 + ); + + method _subclass { + return unless $self->type; + + my $grammar = 'SQL::Translator::Grammar::' . $self->type; + Class::MOP::load_class($grammar); + $grammar->meta->apply($self); + + my $role = __PACKAGE__ . '::' . $self->type; + Class::MOP::load_class($role); + $role->meta->apply($self); + } + + method _build_data_type_mapping { + return { + 'text' => SQL_LONGVARCHAR(), + 'timestamp' => SQL_TIMESTAMP(), + 'timestamp without time zone' => SQL_TYPE_TIMESTAMP(), + 'timestamp' => SQL_TYPE_TIMESTAMP_WITH_TIMEZONE(), + 'int' => SQL_INTEGER(), + 'integer' => SQL_INTEGER(), + 'character' => SQL_CHAR(), + 'varchar' => SQL_VARCHAR(), + 'char' => SQL_CHAR(), + 'bigint' => SQL_BIGINT() + } + } +}