Commit | Line | Data |
b8657f04 |
1 | package SQL::Translator::Parser::DBI; |
2 | use Class::MOP; |
3 | use Moose; |
4 | use MooseX::Types::Moose qw(Str); |
b8657f04 |
5 | use DBI::Const::GetInfoType; |
c4ec1b63 |
6 | use DBI::Const::GetInfo::ANSI; |
7 | use DBI::Const::GetInfoReturn; |
8 | use SQL::Translator::Types qw(DBIHandle Schema); |
9 | use Data::Dumper; |
b8657f04 |
10 | extends 'SQL::Translator::Parser'; |
11 | |
12 | has 'dbh' => ( |
13 | is => 'rw', |
14 | isa => DBIHandle, |
15 | required => 1 |
16 | ); |
17 | |
18 | has 'translator' => ( |
19 | is => 'rw', |
20 | does => 'SQL::Translator::Parser::DBI::Dialect', |
21 | handles => { |
c4ec1b63 |
22 | _tables_list => '_tables_list', |
23 | _table_columns => '_table_columns', |
24 | _table_pk_info => '_table_pk_info', |
25 | _table_uniq_info => '_table_uniq_info', |
26 | _table_fk_info => '_table_fk_info', |
27 | _columns_info_for => '_columns_info_for', |
28 | _extra_column_info => '_extra_column_info', |
b8657f04 |
29 | } |
30 | ); |
31 | |
c4ec1b63 |
32 | has 'schema' => ( |
b8657f04 |
33 | is => 'rw', |
c4ec1b63 |
34 | isa => Schema, |
b8657f04 |
35 | lazy => 1, |
36 | required => 1, |
c4ec1b63 |
37 | default => sub { shift->translator->schema } |
b8657f04 |
38 | ); |
39 | |
40 | sub BUILD { |
41 | my $self = shift; |
42 | |
43 | local $self->dbh->{RaiseError} = 1; |
44 | local $self->dbh->{PrintError} = 0; |
45 | |
46 | my $dbtypename = $self->dbh->get_info( $GetInfoType{SQL_DBMS_NAME} ) || $self->dbh->{Driver}{Name}; |
47 | |
48 | my $class = 'SQL::Translator::Parser::DBI::' . $dbtypename; |
49 | Class::MOP::load_class( $class ); |
50 | my $translator = $class->new( dbh => $self->dbh ); |
51 | $self->translator($translator); |
52 | |
c4ec1b63 |
53 | my $tables = $self->_tables_list; |
b8657f04 |
54 | |
c4ec1b63 |
55 | $self->schema->tables($self->_tables_list); |
56 | $self->schema->get_table($_)->columns($self->_columns_info_for($_)) for keys %$tables; |
b8657f04 |
57 | |
c4ec1b63 |
58 | # foreach my $table (keys %$tables) { |
59 | # my $columns = $self->_columns_info_for($table); |
60 | # my $table = $self->schema->get_table($key); |
61 | # $table->columns($columns); |
62 | # $self->schema->get_table($key)->columns($columns); |
63 | # } |
b8657f04 |
64 | |
c4ec1b63 |
65 | print Dumper($self->schema); |
b8657f04 |
66 | } |
67 | |
68 | 1; |