missed some cruft
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser / DBI.pm
1 package SQL::Translator::Parser::DBI;
2 use Class::MOP;
3 use Moose;
4 use MooseX::Types::Moose qw(Str);
5 use DBI::Const::GetInfoType;
6 use DBI::Const::GetInfo::ANSI;
7 use DBI::Const::GetInfoReturn;
8 use SQL::Translator::Types qw(DBIHandle Schema);
9 use Data::Dumper; 
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 => {
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',
29   }
30 );
31
32 has 'schema' => (
33   is => 'rw',
34   isa => Schema,
35   lazy => 1,
36   required => 1,
37   default => sub { shift->translator->schema }
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
53     my $tables = $self->_tables_list;
54
55     $self->schema->tables($self->_tables_list);
56     $self->schema->get_table($_)->columns($self->_columns_info_for($_)) for keys %$tables;
57
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 #    }
64
65     print Dumper($self->schema);
66 }
67
68 1;