use Encode;
use DateTime;
use DateTime::Format::ISO8601;
-use List::MoreUtils qw/uniq/;
+use List::MoreUtils qw/uniq natatime/;
use Digest::MD5 qw(md5_hex);
# ---------------------------------------------------------------------------
my( $self, $orgid, $names ) = @_;
my %result = map { $_ => undef } @$names;
- my $query = {from => ['actor.org_unit_ancestor_setting_batch', $orgid, @$names]};
my $e = OpenILS::Utils::CStoreEditor->new();
- my $settings = $e->json_query($query);
- foreach my $setting (@$settings) {
- $result{$setting->{name}} = {
- org => $setting->{org_unit},
- value => OpenSRF::Utils::JSON->JSON2perl($setting->{value})
- };
+
+ # LP#1568195: retrieve settings 90 at a time; the value 90 comes
+ # from the default maximum number of arguments that PostgreSQL
+ # allows # for variadic functions (100), less one for the OU
+ # parameter and less nine for a fudge factor.
+ my $iter = natatime 90, @$names;
+ while (my @names_chunk = $iter->()) {
+ my $query = {from => ['actor.org_unit_ancestor_setting_batch', $orgid, @names_chunk]};
+ my $settings = $e->json_query($query);
+ foreach my $setting (@$settings) {
+ $result{$setting->{name}} = {
+ org => $setting->{org_unit},
+ value => OpenSRF::Utils::JSON->JSON2perl($setting->{value})
+ };
+ }
}
return %result;
}