Geoffrey-Converter-Pg

 view release on metacpan or  search on metacpan

lib/Geoffrey/Converter/Pg.pm  view on Meta::CPAN

}

sub can_create_empty_table { return 1 }

sub colums_information {
    my ( $self, $ar_raw_data ) = @_;
    return [] if scalar @{$ar_raw_data} == 0;
    my $table_row = shift @{$ar_raw_data};
    $table_row->{sql} =~ s/^.*(CREATE|create) .*\(//g;
    my $columns = [];
    for ( split m/,/, $table_row->{sql} ) {
        s/^\s*(.*)\s*$/$1/g;
        my $rx_not_null      = 'NOT NULL';
        my $rx_primary_key   = 'PRIMARY KEY';
        my $rx_default       = 'SERIAL|DEFAULT';
        my $rx_column_values = qr/($rx_not_null)*\s($rx_primary_key)*.*($rx_default \w{1,})*/;
        my @column           = m/^(\w+)\s([[:upper:]]+)(\(\d*\))*\s$rx_column_values$/;
        next                                            if scalar @column == 0;
        $column[$I_CONST_LENGTH_VALUE] =~ s/([\(\)])//g if $column[$I_CONST_LENGTH_VALUE];
        push @{$columns},
            {
            name => $column[0],
            type => $column[1],
            ( $column[$I_CONST_LENGTH_VALUE]      ? ( length      => $column[$I_CONST_LENGTH_VALUE] )      : () ),
            ( $column[$I_CONST_NOT_NULL_VALUE]    ? ( not_null    => $column[$I_CONST_NOT_NULL_VALUE] )    : () ),
            ( $column[$I_CONST_PRIMARY_KEY_VALUE] ? ( primary_key => $column[$I_CONST_PRIMARY_KEY_VALUE] ) : () ),
            ( $column[$I_CONST_DEFAULT_VALUE]     ? ( default     => $column[$I_CONST_DEFAULT_VALUE] )     : () ),
            };
    } ## end for ( split m/,/, $table_row...)
    return $columns;
} ## end sub colums_information

sub index_information {
    my ( $self, $ar_raw_data ) = @_;
    my @mapped = ();
    for ( @{$ar_raw_data} ) {
        next if !$_->{sql};
        my ($s_columns) = $_->{sql} =~ m/\((.*)\)$/;
        my @columns     = split m/,/, $s_columns;
        s/^\s+|\s+$//g for @columns;
        push @mapped, { name => $_->{name}, table => $_->{tbl_name}, columns => \@columns };
    } ## end for ( @{$ar_raw_data} )
    return \@mapped;
} ## end sub index_information

sub view_information {
    my ( $self, $ar_raw_data ) = @_;
    return [] unless $ar_raw_data;
    return [ map { { name => $_->{name}, sql => $_->{sql} } } @{$ar_raw_data} ];



( run in 1.329 second using v1.01-cache-2.11-cpan-71847e10f99 )