Database table exists, and has three columns worth mentioning:
- run_id - the key to the table
- date_time - timestamp created on row creation
- ack_error - a boolean set to determine if errors are silenced.
This is my test code. It includes some functions I import.
- db_do - Given SQL statements, does them. Used for INSERT, UPDATE, REPLACE, DELETE.
- db_arrayref - Given SQL statements, does then and returns the result. Used for SELECT.
- confirm_error_run - Given a run_id, gives current state of ack_error.
- ack_run_error - Given a run_id, sets ack_error to true.
- clear_run_error - Given a run_id, sets ack_error to false.
sub check_date {
my $run_id = shift ;
my $check_date = q{
SELECT date_time date
FROM sequence_run
WHERE run_id = ?
} ;
my $date = db_arrayref( $check_date, $run_id ) ;
return $date->[ 0 ]->[ 0 ] ;
}
my $SQL = 'UPDATE sequence_run SET ack_error = ? where run_id = ? ' ;
$DB::Database = 'genomicsdb' ;
my $run_id = 318 ;
my $date ;
my $error ;
say $run_id ;
$date = check_date( $run_id ) ; say $date ;
$error = confirm_error_run( $run_id ) ; say $error ;
my $do = db_do( $SQL , '1' , $run_id ) ;
say $do ;
say '-' x 40 ;
$date = check_date( $run_id ) ; say $date ;
$error = confirm_error_run( $run_id ) ; say $error ;
ack_run_error( $run_id ) ;
say '-' x 40 ;
$date = check_date( $run_id ) ; say $date ;
$error = confirm_error_run( $run_id ) ; say $error ;
clear_run_error( $run_id ) ;
say '-' x 40 ;
$date = check_date( $run_id ) ; say $date ;
$error = confirm_error_run( $run_id ) ; say $error ;
Changes to ack_error should be immaterial to date_time, right? Yet...
djacoby@genomics 12:00:44 ~ $ ./test.pl
318
2014-07-31 14:36:43
1
1
----------------------------------------
2014-07-31 14:36:43
1
----------------------------------------
2014-07-31 14:36:43
1
----------------------------------------
2014-08-04 12:22:09
0
I just don't get it. ack_run_error() and clear_run_error() are essentially like the db_do( $SQL , ... ), and it's somewhat nondeterministic whether my db_do() and ack_run_error() reset the time. Confusing.