package DBIx::dbMan::Extension::CountPre;
use strict;
use base 'DBIx::dbMan::Extension';
use DBI ':sql_types';
our $VERSION = '0.02';
1;
sub IDENTIFICATION { return "000001-000079-000002"; }
sub preference { return 300; }
sub known_actions { return [ qw/COUNT/ ]; }
sub handle_action {
my ($obj,%action) = @_;
$action{processed} = 1;
if ($action{action} eq 'COUNT' and $obj->{-dbi}->current) {
if ($action{count_re}) {
my $sth = $obj->{-dbi}->table_info();
my $ret = $sth->fetchall_arrayref();
study $action{count_re};
my @tab = ();
if (defined $ret) {
for (@$ret) {
push @tab,$_->[2] if lc $_->[3] eq 'table' and
$_->[2] =~ /$action{count_re}/i;
}
}
$action{count_tables} = \@tab;
delete $action{count_re};
}
unless (@{$action{count_tables}}) {
$action{output_info} = $action{error_output};
$action{action} = 'SQL_RESULT';
$action{result} = [];
for my $table (sort keys %{$action{count_result}}) {
push @{$action{result}}, [ $table,
$action{count_result}->{$table}{rows},
$action{count_result}->{$table}{cols} ];
}
$action{fieldnames} = [ 'TABLE', 'LINES', 'FIELDS' ];
$action{fieldtypes} = [ SQL_VARCHAR, SQL_INTEGER, SQL_INTEGER ];
$action{output} = '';
unless (@{$action{result}}) {
$action{action} = 'OUTPUT';
$action{fieldnames} = [];
$action{fieldtypes} = [];
$action{sql} = '';
$action{type} = '';
}
} else {
my $table = shift @{$action{count_tables}};
$action{action} = 'SQL';
$action{count_process} = 1;
$action{sql} = 'SELECT COUNT(*) pocet FROM '.$table;
$action{type} = 'select';
delete $action{processed};
}
}
return %action;
}