ca4b9a4fd6203406b9816025d72387b83f5ad7e8
[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     make_create_string => 'make_create_string',
23     make_update_string => 'make_update_string',
24     _tables_list => '_tables_list',
25     _table_columns => '_table_columns',
26     _table_pk_info => '_table_pk_info',
27     _table_uniq_info => '_table_uniq_info',
28     _table_fk_info => '_table_fk_info',
29     _columns_info_for => '_columns_info_for',
30     _extra_column_info => '_extra_column_info',
31   }
32 );
33
34 has 'schema' => (
35   is => 'rw',
36   isa => Schema,
37   lazy => 1,
38   required => 1,
39   default => sub { shift->translator->schema }
40 );
41
42 sub BUILD {
43     my $self = shift;
44
45     local $self->dbh->{RaiseError} = 1;
46     local $self->dbh->{PrintError} = 0;
47
48     my $dbtypename = $self->dbh->get_info( $GetInfoType{SQL_DBMS_NAME} ) || $self->dbh->{Driver}{Name};
49
50     my $class = 'SQL::Translator::Parser::DBI::' . $dbtypename;
51     Class::MOP::load_class( $class );    
52     my $translator = $class->new( dbh => $self->dbh );
53     $self->translator($translator);
54
55     my $tables = $self->_tables_list;
56
57     $self->schema->tables($self->_tables_list);
58     $self->schema->get_table($_)->columns($self->_columns_info_for($_)) for keys %$tables;
59
60 #    foreach my $table (keys %$tables) {
61 #        my $columns = $self->_columns_info_for($table);
62 #        my $table = $self->schema->get_table($key);
63 #        $table->columns($columns);
64 #         $self->schema->get_table($key)->columns($columns);
65 #    }
66
67     print Dumper($self->schema);
68 }
69
70 1;