X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser%2FDBI.pm;h=094944f1a062c81e648f0e0ad810adea8bd10e10;hb=e24e4ca062aef1dfbf1248eafbf6e4b82a9dc30e;hp=f81aebcf6df14697c287e5da5c4fe630a7b9f9e8;hpb=abb2c32785d707559ca34b277e70d8f9536ecd48;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Parser/DBI.pm b/lib/SQL/Translator/Parser/DBI.pm index f81aebc..094944f 100644 --- a/lib/SQL/Translator/Parser/DBI.pm +++ b/lib/SQL/Translator/Parser/DBI.pm @@ -5,41 +5,37 @@ use MooseX::Types::Moose qw(Maybe Str); use DBI::Const::GetInfoType; use DBI::Const::GetInfo::ANSI; use DBI::Const::GetInfoReturn; -use SQL::Translator::Object::Column; -use SQL::Translator::Object::Index; -use SQL::Translator::Object::Table; -use SQL::Translator::Object::View; +use aliased 'SQL::Translator::Object::Column'; +use aliased 'SQL::Translator::Object::Index'; +use aliased 'SQL::Translator::Object::Table'; +use aliased 'SQL::Translator::Object::View'; has 'quoter' => ( - is => 'rw', - isa => Str, - requried => 1, - lazy => 1, - default => sub { shift->dbh->get_info(29) || q{"} } + is => 'rw', + isa => Str, + lazy => 1, + default => sub { shift->dbh->get_info(29) || q{"} } ); has 'namesep' => ( - is => 'rw', - isa => Str, - required => 1, - lazy => 1, - default => sub { shift->dbh->get_info(41) || '.' } + is => 'rw', + isa => Str, + lazy => 1, + default => sub { shift->dbh->get_info(41) || '.' } ); has 'schema_name' => ( - is => 'rw', - isa => Maybe[Str], - required => 0, - lazy => 1, - default => undef + is => 'rw', + isa => Maybe[Str], + lazy => 1, + default => undef ); has 'catalog_name' => ( - is => 'rw', - isa => Maybe[Str], - required => 0, - lazy => 1, - default => undef + is => 'rw', + isa => Maybe[Str], + lazy => 1, + default => undef ); sub _subclass { @@ -52,6 +48,15 @@ sub _subclass { $class->meta->apply($self); } +sub _is_auto_increment { 0 } + +sub _column_default_value { + my $self = shift; + my $column_info = shift; + + return $column_info->{COLUMN_DEF}; +} + sub _add_tables { my $self = shift; my $schema = shift; @@ -59,14 +64,16 @@ sub _add_tables { my $sth = $self->dbh->table_info($self->catalog_name, $self->schema_name, '%', 'TABLE,VIEW'); while (my $table_info = $sth->fetchrow_hashref) { if ($table_info->{TABLE_TYPE} eq 'TABLE') { - my $table = SQL::Translator::Object::Table->new({ name => $table_info->{TABLE_NAME} }); + my $table = Table->new({ name => $table_info->{TABLE_NAME} }); $schema->add_table($table); $self->_add_columns($table); $self->_add_primary_key($table); } elsif ($table_info->{TABLE_TYPE} eq 'VIEW') { my $sql = $self->_get_view_sql($table_info->{TABLE_NAME}); - $schema->add_view(SQL::Translator::Object::View->new({ name => $table_info->{TABLE_NAME}, sql => $sql })); + my $view = View->new({ name => $table_info->{TABLE_NAME}, sql => $sql }); + $schema->add_view($view); + $self->_add_columns($view); } } } @@ -76,12 +83,14 @@ sub _add_columns { my $table = shift; my $sth = $self->dbh->column_info($self->catalog_name, $self->schema_name, $table->name, '%'); - while (my $col_info = $sth->fetchrow_hashref) { - my $column = SQL::Translator::Object::Column->new({ name => $col_info->{COLUMN_NAME}, - data_type => $col_info->{TYPE_NAME}, - size => $col_info->{COLUMN_SIZE}, - default_value => $col_info->{COLUMN_DEF}, - is_nullable => $col_info->{NULLABLE}, }); + while (my $column_info = $sth->fetchrow_hashref) { + my $column = Column->new({ name => $column_info->{COLUMN_NAME}, + data_type => $column_info->{DATA_TYPE}, + size => $column_info->{COLUMN_SIZE}, + default_value => $self->_column_default_value($column_info), + is_auto_increment => $self->_is_auto_increment($column_info), + is_nullable => $column_info->{NULLABLE}, + }); $table->add_column($column); } } @@ -96,7 +105,7 @@ sub _add_primary_key { $pk_name = $pk_col->{PK_NAME}; push @pk_cols, $pk_col->{COLUMN_NAME}; } - my $index = SQL::Translator::Object::Index->new({ name => $pk_name, type => 'PRIMARY_KEY' }); + my $index = Index->new({ name => $pk_name, type => 'PRIMARY_KEY' }); $index->add_column($table->get_column($_)) for @pk_cols; $table->add_index($index); }