X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FDDL.pm;h=91fb07bb677a98012aca27776810809dea3fd8f6;hb=adc5d09b1e19ebb34bf08c627263593646d07a49;hp=426743b43861f9095e5e0293edb479094fdbda0c;hpb=d3a31f56fe7229b2edcec7b101b451aec50e07c8;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 426743b..91fb07b 100644 --- a/lib/SQL/Translator/Parser/DDL.pm +++ b/lib/SQL/Translator/Parser/DDL.pm @@ -1,5 +1,54 @@ -package SQL::Translator::Parser::DDL; -use Moose; -extends 'SQL::Translator::Parser'; +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; -1; + has 'data_type_mapping' => ( + isa => HashRef, + is => 'ro', + lazy_build => 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() + } + } +}