package tests::helpers::TestDerivedAnalyzer;

use base qw/Lire::DlfAnalyser/;

use Lire::DlfSchema;

use Carp;

sub new {
    return bless {}, shift;
}

sub name {
    return 'derived';
}

sub title {
    return 'TestDerivedAnalyzer';
}

sub description {
    return '<para>A test analyser.</para>';
}

sub src_schema {
    return 'test';
}

sub dst_schema {
    return 'test-derived';
}

sub analyse {
    my ( $self, $process, $config ) = @_;

    my $schema = Lire::DlfSchema::load_schema( 'test' );
    my $query = $schema->dlf_query();
    $query->set_sort_spec( 'connection_id time_start' );

    my $filter = $process->source_filter();
    $query->set_filter_clause( $filter->sql_expr(), @{$filter->sql_params()} )
      if defined $filter;

    my $result = $query->execute( $process->dlf_store() );

    my $session_dlf = {};
    my $dlf_ids = [];
    while ( defined( my $dlf = $result->next_row() ) ) {
        no warnings 'uninitialized';
        if ( $session_dlf->{'connection_id'} ne $dlf->{'connection_id'} ) {
            $process->write_dlf( $session_dlf, $dlf_ids )
              if defined $session_dlf->{'connection_id'};
            $session_dlf->{'connection_id'} = $dlf->{'connection_id'};
            $session_dlf->{'session_start'} = $dlf->{'time_start'};
            $session_dlf->{'session_end'} = $dlf->{'time_end'};
            $dlf_ids = [];
        }
        $session_dlf->{'session_end'} = $dlf->{'time_end'}
          if $dlf->{'time_end'} > $sesion_dlf->{'session_end'};
        $session_dlf->{'session_length'} =
          $session_dlf->{'session_end'} - $session_dlf->{'session_start'};
        push @$dlf_ids, $dlf->{'dlf_id'};
    }
    $process->write_dlf( $session_dlf, $dlf_ids )
      if defined $session_dlf->{'connection_id'};

    return;
}

1;


syntax highlighted by Code2HTML, v. 0.9.1