From 03ecbd104e0db0d277be4f9ce6df2c467fdfcc12 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 20 Sep 2016 11:40:13 +0100 Subject: [PATCH] Bug 17323: Column search_history.time cannot be null When doing a search, with SearchHistory pref switched on: DBD::mysql::st execute failed: Column 'time' cannot be null [for Statement " INSERT INTO search_history( userid, sessionid, query_desc, query_cgi, type, total, time ) VALUES( ?, ?, ?, ?, ?, ?, ? ) " with ParamValues: 0="7874", 1='12338a0bd8da63e32c79ee84f8493a07', 2="kw,wrdl: d", 3='q=d', 4='biblio', 5=6104, 6=undef] at C4/Search/History.pm line 34. Since MySLQ 5.7, undef does not mean "the default value". To let the DBMS set the default value (CURRENT_TIMESTAMP), the parameter should not be passed Test plan: OPAC+Intranet, swith the 2 SearchHistory syspref on Do a search => Without this patch, you will get an error in the log and the row will not be inserted in the table. => With this patch, everything must go fine --- C4/Search/History.pm | 6 +++--- t/db_dependent/Search/History.t | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/C4/Search/History.pm b/C4/Search/History.pm index 53a3758..8406f30 100644 --- a/C4/Search/History.pm +++ b/C4/Search/History.pm @@ -25,14 +25,14 @@ sub add { # Add the request the user just made my $query = q{ INSERT INTO search_history( - userid, sessionid, query_desc, query_cgi, type, total, time + userid, sessionid, query_desc, query_cgi, type, total} . ( $time ? ', time' : '' ) . q{ ) VALUES( - ?, ?, ?, ?, ?, ?, ? + ?, ?, ?, ?, ?, ?} . ( $time ? ', ?' : '' ) . q{ ) }; my $sth = $dbh->prepare($query); $sth->execute( $userid, $sessionid, $query_desc, $query_cgi, $type, - $total, $time ); + $total, ( $time ? $time : () ) ); } sub add_to_session { diff --git a/t/db_dependent/Search/History.t b/t/db_dependent/Search/History.t index 9bf14ad..27a7a73 100644 --- a/t/db_dependent/Search/History.t +++ b/t/db_dependent/Search/History.t @@ -2,12 +2,13 @@ use Modern::Perl; -use Test::More tests => 25; +use Test::More tests => 26; use Test::Warn; use URI::Escape; use List::Util qw( shuffle ); use C4::Context; +use Koha::DateUtils; my $dbh = C4::Context->dbh; $dbh->{AutoCommit} = 0; $dbh->{RaiseError} = 1; @@ -197,6 +198,21 @@ C4::Search::History::delete({ $all = C4::Search::History::get({userid => $userid}); is( scalar(@$all), 0, 'There is no search after calling delete with an interval = -1 days' ); +# If time is null, it must be set to NOW() +my $query_desc_b1_p = q{first previous biblio search}; +C4::Search::History::add( { + userid => $userid, + sessionid => $previous_sessionid, + query_desc => $query_desc_b1_p, + query_cgi => $query_cgi_b, + total => $total, + type => 'biblio', +}); +my $search_history_id = $dbh->last_insert_id( undef, undef, 'search_history', undef ); +my $search_history = C4::Search::History::get({ id => $search_history_id }); +is( output_pref({ dt => dt_from_string($search_history->[0]->{time}), dateonly => 1 }), output_pref({ dt => dt_from_string, dateonly => 1 }), "Inserting a new search history should handle undefined time" ); + + delete_all( $userid ); sub add { -- 2.8.1