From: miker Date: Wed, 29 Aug 2007 20:29:43 +0000 (+0000) Subject: adding storage method open-ils.storage.asset.merge_record_assets to call stored proc... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=7ea3b01d4f5e3ad1276912040f6e9e69bbd3719b;p=Evergreen.git adding storage method open-ils.storage.asset.merge_record_assets to call stored proc version of the record merging logic git-svn-id: svn://svn.open-ils.org/ILS/trunk@7742 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm index 04c71ba772..09006625e0 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/asset.pm @@ -794,5 +794,31 @@ __PACKAGE__->register_method( api_level => 1, ); +sub merge_record_assets { + my $self = shift; + my $client = shift; + my $target = shift; + my @sources = @_; + + my $count = 0; + for my $source ( @sources ) { + $count += asset::call_number + ->db_Main + ->selectcol_arrayref( + "SELECT asset.merge_record_assets(?,?);", + {}, + $target, + $source + )->[0]; + } + + return $count; +} +__PACKAGE__->register_method( + api_name => 'open-ils.storage.asset.merge_record_assets', + method => 'merge_record_assets', + argc => 2, + api_level => 1, +) 1; diff --git a/Open-ILS/src/sql/Pg/020.schema.functions.sql b/Open-ILS/src/sql/Pg/020.schema.functions.sql index 04368ab82d..9a17029a92 100644 --- a/Open-ILS/src/sql/Pg/020.schema.functions.sql +++ b/Open-ILS/src/sql/Pg/020.schema.functions.sql @@ -171,3 +171,4 @@ CREATE AGGREGATE array_accum ( stype = anyarray, initcond = '{}' ); + diff --git a/Open-ILS/src/sql/Pg/040.schema.asset.sql b/Open-ILS/src/sql/Pg/040.schema.asset.sql index 23cdf67188..ecc93cd8e6 100644 --- a/Open-ILS/src/sql/Pg/040.schema.asset.sql +++ b/Open-ILS/src/sql/Pg/040.schema.asset.sql @@ -174,5 +174,36 @@ CREATE VIEW stats.fleshed_call_number AS FROM asset.call_number cn JOIN metabib.rec_descriptor rd ON (rd.record = cn.record); +CREATE OR REPLACE FUNCTION asset.merge_record_assets( target_record BIGINT, source_record BIGINT ) RETURNS INT AS $func$ +DECLARE + moved_cns INT := 0; + source_cn asset.call_number%ROWTYPE; + target_cn asset.call_number%ROWTYPE; +BEGIN + FOR source_cn IN SELECT * FROM asset.call_number WHERE record = source_record LOOP + + SELECT INTO target_cn * + FROM asset.call_number + WHERE label = source_cn.label + AND owning_lib = source_cn.owning_lib + AND record = source_cn.record; + + IF FOUND THEN + UPDATE asset.copy + SET call_number = target_cn.id + WHERE call_number = source_cn.id; + ELSE + UPDATE asset.call_number + SET record = target_record + WHERE id = source_cn.id; + END IF; + + moved_cns := moved_cns + 1; + END LOOP; + + RETURN moved_cns; +END; +$func$ LANGUAGE plpgsql; COMMIT; +