now works with strict/warnings enabled
[Pqsl-Perl.git] / PSQL-Query / bin / psql-plus
blob1a7a29af5e12ade6708104d638f93caf12a07204
1 #!/usr/bin/perl -l
2 use strict;
3 use warnings;
5 use PSQL::Query::Handle;
6 use IO::Handle;
7 use Getopt::Long;
9 our ( $fmt_oppr, $fmt_info );
10 my $result = GetOptions (
11 'printf=s' => \$fmt_oppr
12 , 'printf-info=s' => \$fmt_info
15 $fmt_oppr = '%s' unless $fmt_oppr or $fmt_info;
17 foreach ( $fmt_oppr, $fmt_info ) {
18 next unless defined;
19 s/ \\n / \n /gxo;
20 s/ \\t / \t /gxo;
23 my $io = IO::Handle->new_from_fd( 'STDIN', "r" );
24 my $query = PSQL::Query::Handle->new({ handle => $io });
26 while ( my $row = $query->shift_row ) {
28 if ( $fmt_oppr ) {
29 my $fmt_oppr = $fmt_oppr;
31 ## Source/Name
32 ## Estimate Startup/Total/Rows/Width
33 ## Actual Startup/Total/Rows/Width
34 $fmt_oppr =~ s/
35 %( [snd] | e[strw] | a[strl] )
36 / _lookup_oppr( $row, $1 )
37 /gex
40 ## You might not always have something
41 ## Case: user requests ANALYZE and does only EXPLAIN
42 print $fmt_oppr if $fmt_oppr;
46 if ( $fmt_info ) {
47 while ( my $row = $row->shift_info ) {
48 my $fmt_info = $fmt_info;
50 ## Info Name/Verbose/Src
51 $fmt_info =~ s/
52 %( [nsv] )
53 / _lookup_opprInfo( $row, $1 )
54 /gex
57 print $fmt_info;
64 sub _lookup_oppr {
65 my ( $row, $lookup ) = @_;
67 my ( $obj, $modifier ) = split '', $lookup;
69 my $return = {
72 ## Row
74 n => sub { $row->name }
75 , s => sub { $row->src }
76 , d => sub { $row->dom_level }
78 , e => sub {
79 my $t = $row->cost;
80 return sub {
82 s => sub { $t->startup }
83 , t => sub { $t->total }
84 , r => sub { $t->rows }
85 , w => sub { $t->width }
90 , a => sub {
91 my $t = $row->time;
92 return sub {
94 s => sub { $t->startup }
95 , t => sub { $t->total }
96 , r => sub { $t->rows }
97 , l => sub { $t->loops }
104 ## returns form func if the user request analyze info
105 ## and has only explain info
106 return if $obj eq 'a' and not $row->has_time;
108 $modifier ?
109 $return->{$obj}->()->()->{$modifier}->()
110 : $return->{$obj}->()
115 sub _lookup_opprInfo {
116 my ( $row, $obj ) = @_;
118 my $return = {
119 n => sub { $row->name }
120 , v => sub { $row->verbose }
121 , s => sub { $row->src }
124 $return->{$obj}->();