EPrints Technical Mailing List Archive

Message: #07351


< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First

Re: [EP-tech] Searching for null/unset values


I concur – having tried this in a script against some test data:

 

my $ds = $session->dataset("buffer");

my $searchexp = $ds->prepare_search();

$searchexp->add_field( $ds->get_field("date"), undef, "EX" );

my $list = $searchexp->perform_search();

print STDERR $list->count;

 

Gives me the same number as running the SQL statement

SELECT eprintid, date_year FROM eprint WHERE eprint_status = "buffer" AND date_year IS NULL;

 

And replacing the undef with a number (e.g. 2018) gives the same results as ending the SQL with

 

       … AND date_year = 2018;

 

Good spot and definitely something that could be clearer in the wiki.

 

Cheers,

Alan

 

From: eprints-tech-bounces@ecs.soton.ac.uk [mailto:eprints-tech-bounces@ecs.soton.ac.uk] On Behalf Of John Salter
Sent: 04 July 2018 14:49
To: 'eprints-tech@ecs.soton.ac.uk' <eprints-tech@ecs.soton.ac.uk>
Subject: [EP-tech] Searching for null/unset values

 

Hi All,

Can anyone validate this for me?

 

On this page: https://wiki.eprints.org/w/API:EPrints/Search#add_field  (generated from perldoc in EPrints::Search), the following statement is made for the value:

"value - value to match against (for EX matches, NULL = is_null!)"

 

This has always seemed very cryptic/unhelpful to me - but I've never needed to get a null search working - until now.

 

Experimentation has led to the following which seems to work (example: searching buffer for items with no date):

 

my $ds = $session->dataset( "buffer" );

my $searchexp = $ds->prepare_search();

$searchexp->add_field(

    fields => [

      $ds->field( 'date' ),

    ],

    value => undef,

    match => "EX",

);

 

-the 'value => undef,' being the critical piece.

Before I add this to the Wiki, can anyone else confirm this is correct?

 

Cheers,

John

 

-- The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). The Open University is authorised and regulated by the Financial Conduct Authority in relation to its secondary activity of credit broking.