From 02349cafced289943d547a5711de17fcba92cee0 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 19 Oct 2011 13:42:16 -0400 Subject: [PATCH] CStoreEditor batch_retrieve repairs 1. If the caller provides additional cstore params, like flesh, flesh_fields, etc. make sure we only use the first component of the search (the list of identifier values) for the cstore search. 2. Determine the identifier field from the class being retrieved instead of hard-coding it to be "id" Signed-off-by: Bill Erickson Signed-off-by: Lebbeous Fogle-Weekley --- Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm index 03237caf3a..c1378297a9 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/CStoreEditor.pm @@ -694,9 +694,20 @@ sub runmethod { } elsif( $action eq 'batch_retrieve' ) { $action = 'search'; - @arg = ( { id => $arg } ); $method =~ s/batch_retrieve/search/o; $method .= '.atomic'; + my $tt = $type; + $tt =~ s/\./::/og; + my $fmobj = "Fieldmapper::$tt"; + my $ident_field = $fmobj->Identity; + + if (ref $arg[0] eq 'ARRAY') { + # $arg looks like: ([1, 2, 3], {search_args}) + @arg = ( { $ident_field => $arg[0] }, @arg[1 .. $#arg] ); + } else { + # $arg looks like: [1, 2, 3] + @arg = ( { $ident_field => $arg } ); + } } elsif( $action eq 'retrieve_all' ) { $action = 'search'; -- 2.11.0