App-DBBrowser

 view release on metacpan or  search on metacpan

lib/App/DBBrowser/Auxil.pm  view on Meta::CPAN

        if ( ! /^[$iqc']/ ) { s/\s+/ /g; s|\(\s|(|; s|\s\)|)| };
        $_
    } split $split_rx, $stmt;
    return $stmt;
}


sub major_server_version {
    my ( $sf ) = @_;
    my $dbms = $sf->{i}{dbms};
    my $dbh = $sf->{d}{dbh};
    my $major_server_version;
    if ( $dbms eq 'Firebird' ) {
        eval {
            my ( $firebird_version ) = $dbh->selectrow_array( "SELECT RDB\$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') FROM RDB\$DATABASE" );
            ( $major_server_version  ) = $firebird_version =~ /^(\d+)\./;
        };
        return $major_server_version // 3;
    }
    else {
        my $database_version  = $dbh->get_info( $GetInfoType{SQL_DBMS_VER} );
        ( $major_server_version ) = $database_version =~ /^v?(\d+)\D/i;
        if ( $dbms eq 'Pg' ) {
            return $major_server_version // 10;
        }
        elsif ( $dbms eq 'Oracle' ) {
            return $major_server_version // 12;
        }
        elsif ( $dbms eq 'MSSQL' ) {
            return $major_server_version // 16;
        }
    }
}


sub clone_data {
    my ( $sf, $data ) = @_;
    require Storable;
    return Storable::dclone( $data );
}


sub format_list {
    my ( $sf, $list ) = @_;
    return    if ! defined $list;
    return '' if ! @$list;
    my $sep = ', ';
    my $formated_list = join( $sep, @$list );
    $formated_list =~ s/$sep(?=$list->[-1]\z)/ or /;
    return $formated_list;
}


sub print_error_message {
    my ( $sf, $message, $info ) = @_;
    utf8::decode( $message );
    chomp( $message );
    my $tc = Term::Choose->new( $sf->{i}{tc_default} );
    $tc->choose(
        [ 'Press ENTER to continue' ],
        { prompt => $message, info => $info }
    );
}


sub write_json {
    my ( $sf, $file_fs, $ref ) = @_;
    if ( ! defined $ref ) { ##
        #open my $fh, '>', $file_fs or die "$file_fs: $!";
        #print $fh;
        #close $fh;
        return;
    }
    my $json = JSON::MaybeXS->new->utf8->pretty->canonical->encode( $ref );
    open my $fh, '>', $file_fs or die "$file_fs: $!";
    print $fh $json;
    close $fh;
}


sub read_json {
    my ( $sf, $file_fs ) = @_;
    if ( ! defined $file_fs || ! -f $file_fs ) {
        return;
    }
    open my $fh, '<', $file_fs or die "$file_fs: $!";
    my $json = do { local $/; <$fh> };
    close $fh;
    my $ref;
    if ( ! eval {
        $ref = decode_json( $json ) if $json;
        1 }
    ) {
        die "In '$file_fs':\n$@";
    }
    return $ref;
}





1;

__END__



( run in 0.908 second using v1.01-cache-2.11-cpan-6aa56a78535 )