package LIMS::Model::Test; use Moose; extends 'LIMS::Model::Base'; use namespace::clean -except => 'meta'; __PACKAGE__->meta->make_immutable; use Data::Dumper; #------------------------------------------------------------------------------- sub get_all_diagnoses { my $self = shift; my %args = ( sort_by => 'name', require_objects => 'diagnostic_category', limit => 5, ); my $data = LIMS::DB::Diagnosis::Manager->get_diagnoses(%args); # DEBUG $data; return $data; } # experimental method using DBIx::Simple - too slow with CONCAT in sql sub get_request_and_patient_data_from_labno { my ($self, $labnos) = @_; # warn Dumper $labnos; my $dbix = $self->lims_dbix; my $sql = q! select r.id, p.last_name from requests r join patient_case pc on r.patient_case_id = pc.id join patients p on pc.patient_id = p.id where concat('H', r.request_number, '/', r.year - 2000) in (??)!; my $data = $dbix->query( $sql, @$labnos)->hashes; # warn Dumper $data; return $data; } sub db_read_timer { my $self = shift; my $cycles = shift || ''; # optional my $dbix = $self->lims_dbix; my $query = $dbix->query('select * from referrers'); my $i = 0; ROW: while ( my $row = $query->hash ) { $i++; last ROW if $cycles && $i == $cycles; } return $i; } sub db_write_timer { my ($self, $cycles) = @_; $ENV{RDBO_DEBUG} = 0; # switch off or will get 10_000 entries in console! my $dbix = $self->lims_dbix; $dbix->dbh->do('drop table if exists lims_test.timer'); # creates an InnoDB table - write performance slow on SuSE: $dbix->dbh->do('create table lims_test.timer like referrers'); my $i = 0; for ( 1 .. $cycles ) { my %data = ( name => 'Other AN', # doesn't need to be unique national_code => ( sprintf 'C%06d', ++$i ), # must be unique referral_type_id => 1, active => 'yes', ); $dbix->insert( 'lims_test.timer', \%data ); } $dbix->dbh->do('drop table lims_test.timer'); return $i; } sub db_read_write_timer { my ($self, $cycles) = @_; $ENV{RDBO_DEBUG} = 0; # switch off or will get 10_000 entries in console! my $dbix = $self->lims_dbix; # $dbix->keep_statements = 200; # reduces performance as n increases !! $dbix->dbh->do('drop table if exists lims_test.timer'); $dbix->dbh->do('create table lims_test.timer like referrers'); my $sql = 'select * from referrers'; $sql .= qq! limit $cycles! if $cycles; my $i = 0; # my $all = $dbix->query($sql)->hashes; # all in one go ~ 1000 rows/sec my $result = $dbix->query($sql); # one at a time ~ 750 rows/sec # for my $ref ( @$all ) { # warn Dumper $ref; while ( my $ref = $result->hash ) { my %data = map +( $_ => $ref->{$_} ), grep $_ ne 'id', keys %$ref; $dbix->insert( 'lims_test.timer', \%data ); $i++; } $dbix->dbh->do('drop table lims_test.timer'); return $i; } sub db_status { my $self = shift; my $dbix = $self->lims_dbix; my $list = $dbix->query( 'SHOW PROCESSLIST' )->arrays; return $list; } 1;