home *** CD-ROM | disk | FTP | other *** search
- #
- # Package meta, adds meta database commands to dbish
- #
- package DBI::Shell::Timing;
-
- use strict;
- use vars qw(@ISA $VERSION);
- use Benchmark qw(timeit timestr);
-
- $VERSION = sprintf( "%d.%02d", q$Revision: 11.91 $ =~ /(\d+)\.(\d+)/ );
-
- sub init {
- my ($self, $sh, @arg) = @_;
-
-
- $sh->install_options(
- [
- [ 'timing_style' => qq{auto} ],
- [ 'timing_timing' => 1 ], # Set the default to on
- [ 'timing_format' => '5.2f' ],
- [ 'timing_prefix' => 'Elapsed: ' ],
- ]);
- my $com_ref = $sh->{commands};
- $com_ref->{timing} = {
- hint =>
- "timing: on/off (1/0) display execute time upon completion of command",
- };
-
- return $self;
- }
-
- sub do_timing {
- my $self = shift;
- if (@_) {
- my $t = shift;
- # $self->log( qq{timing called with $t} );
- $t = 0 if ($t =~ m/off|stop|end/i);
- $t = 1 if ($t =~ m/on|start|begin/i);
- $self->{timing_timing} = ($t?1:0);
- }
- $self->print_buffer(qq{timing: } . ($self->{timing_timing}? 'on': 'off'));
- return $self->{timing_timing};
- }
-
-
- #
- # Subclass the do_go command to include the timing options. I'm not
- # sure which is better, to subclass this command or completely
- # override it.
- #
- sub do_go {
- my $self = shift;
- my $rv = timeit( 1, sub { $self->DBI::Shell::Base::do_go( @_ ) } );
- if ($self->{timing_timing}) {
- my $str = $self->{timing_prefix} .
- timestr( $rv, $self->{timing_style}, $self->{timing_format} );
- $self->log( $str );
- }
- return;
- }
-
- my $_unimp = qq{timing: not implemented yet};
-
- 1;
-