5 use PSQL
::Query
::Handle
;
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 ) {
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 ) {
29 my $fmt_oppr = $fmt_oppr;
32 ## Estimate Startup/Total/Rows/Width
33 ## Actual Startup/Total/Rows/Width
35 %( [snd
] | e
[strw
] | a
[strl
] )
36 / _lookup_oppr
( $row, $1 )
40 ## You might not always have something
41 ## Case: user requests ANALYZE and does only EXPLAIN
42 print $fmt_oppr if $fmt_oppr;
47 while ( my $row = $row->shift_info ) {
48 my $fmt_info = $fmt_info;
50 ## Info Name/Verbose/Src
53 / _lookup_opprInfo
( $row, $1 )
65 my ( $row, $lookup ) = @_;
67 my ( $obj, $modifier ) = split '', $lookup;
74 n
=> sub { $row->name }
75 , s
=> sub { $row->src }
76 , d
=> sub { $row->dom_level }
82 s
=> sub { $t->startup }
83 , t
=> sub { $t->total }
84 , r
=> sub { $t->rows }
85 , w
=> sub { $t->width }
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;
109 $return->{$obj}->()->()->{$modifier}->()
110 : $return->{$obj}->()
115 sub _lookup_opprInfo
{
116 my ( $row, $obj ) = @_;
119 n
=> sub { $row->name }
120 , v
=> sub { $row->verbose }
121 , s
=> sub { $row->src }