#!/usr/bin/env perl # updates 67 requests where test = DNA quantitation to RNA quantitation & histories # INSERT INTO `hilis4`.`lab_tests` # (`test_name`, `field_label`, `lab_section_id`, `test_type`, `has_results`) # VALUES ('rna_quantification', 'RNA quantification', 4, 'test', 'no'); # run as "export SQL_TRACE=1; perl ./xna-quantification-change.pl" for query output use FindBin; use lib '/home/raj/perl-lib'; use Local::DB; use Modern::Perl; use DBIx::Simple; use Data::Printer use_prototypes => 0; my @data = ; # say scalar @data; my $dbix = Local::DB->dbix({ dbname => 'hilis4' }); # $dbix->dbh->trace(2, './dbi_trace.log'); #warn $dbix->dbh->{AutoCommit}; # it's on $dbix->begin; # turns auto-commit off #warn $dbix->dbh->{AutoCommit}; # it's off $dbix->select('lab_tests', ['id'], { test_name => 'dna_quantification' }) ->into(my $dna_id); $dbix->select('lab_tests', ['id'], { test_name => 'rna_quantification' }) ->into(my $rna_id); # p [$dna_id, $rna_id]; my $rows = 0; foreach my $labno (@data) { # p $labno; next; chomp $labno; my ( $reqNum, $year ) = ( $labno =~ /H?(\d+)\/(\d{2})/ ); # p [$reqNum, $year]; $year += 2000; $dbix->select('requests', ['id'], { request_number => int $reqNum, year => $year }) ->into(my $request_id); # p [$labno, $request_id]; next; if ( $request_id ) { my %h = ( request_id => $request_id, lab_test_id => $dna_id ); $dbix->select('request_lab_test_status', 'count(*)', \%h)->into(my $n); # p [$labno, $n]; if ( $n == 1 ) { say "have 1 request_lab_test_status entry for $labno"; $dbix->select('request_lab_test_status', 'time', \%h)->into(my $time); my %set = ( lab_test_id => $rna_id, time => $time, ); my $r = $dbix->update('request_lab_test_status', \%set, \%h) or die $dbix->error; $rows += $r->rows; say $rows; { # history: 'requested DNA quantification' my %h = ( request_id => $request_id, user_id => 788, action => 'requested DNA quantification' ); $dbix->select('request_lab_test_history', 'count(*)', \%h ) ->into(my $i); # p $i; if ( $i == 1 ) { $dbix->select('request_lab_test_history', 'time', \%h) ->into(my $time); my %set = ( action => 'requested RNA quantification', time => $time, ); my $r = $dbix->update('request_lab_test_history', \%set, \%h); $rows += $r->rows; say $rows; } else { say "$labno has $i request_lab_test_history entries for " . "requested DNA quantification"; } } { # history: 'set DNA quantification status to complete' my %h = ( request_id => $request_id, user_id => 788, action => 'set DNA quantification status to complete' ); $dbix->select('request_lab_test_history', 'count(*)', \%h ) ->into(my $i); # p $i; if ( $i == 1 ) { $dbix->select('request_lab_test_history', 'time', \%h) ->into(my $time); my %set = ( action => 'set RNA quantification status to complete', time => $time, ); my $r = $dbix->update('request_lab_test_history', \%set, \%h); $rows += $r->rows; say $rows; } else { say "$labno has $i request_lab_test_history entries for " . "set DNA quantification status to complete"; } } } else { say "$labno has $n request_lab_test_status entries for dna_extraction"; } } else { say 'Request ID not found for ' . $labno; } } say "total db updates = $rows"; # $dbix->rollback; exit; $rows = ( scalar @data ) * 3 # 3 updates per labno ? $dbix->commit : $dbix->rollback; __DATA__ H9414/11 H10488/11 H11265/11 H12518/11 H12824/11 H13009/11 H13302/11 H14045/11 H14484/11 H15057/11 H15066/11 H15329/11 H15761/11 H15852/11 H16503/11 H16535/11 H16596/11 H16722/11 H16799/11 H17029/11 H17169/11 H17511/11 H17512/11 H17670/11 H17731/11 H18159/11 H18644/11 H18829/11 H19060/11 H19061/11 H19141/11 H19142/11 H19210/11 H19211/11 H19324/11 H19328/11 H19590/11 H19591/11 H19860/11 H19948/11 H19988/11 H20091/11 H20651/11 H21203/11 H21451/11 H21452/11 H21457/11 H21459/11 H21983/11 H22300/11 H22588/11 H22792/11 H22894/11 H23053/11 H23104/11 H23109/11 H23375/11 H23495/11 H23516/11 H23578/11 H23579/11 H23787/11 H23906/11 H24127/11 H00204/12 H00318/12 H00413/12