1 package OpenILS::Application::Storage::Publisher::biblio;
2 use base qw/OpenILS::Application::Storage/;
3 use OpenSRF::EX qw/:try/;
4 use OpenILS::Application::Storage::CDBI::biblio;
6 sub create_record_node {
12 my $n = biblio::record_node->create($node);
13 $client->respond( $n->id );
15 $client->respond( 0 );
20 __PACKAGE__->register_method(
21 method => 'create_record_node',
22 api_name => 'open-ils.storage.biblio.record_node.create',
27 sub update_record_node {
32 my $n = biblio::record_node->retrieve($$node{id});
33 return undef unless ($n);
35 for my $field ( keys %$node ) {
36 $n->$field( $$node{$field} );
41 $client->respond( $n->id );
43 $client->respond( 0 );
48 __PACKAGE__->register_method(
49 method => 'update_record_node',
50 api_name => 'open-ils.storage.biblio.record_node.update',
56 sub create_record_nodeset {
60 # COPY version... not working yet
63 my $dbh = biblio::record_node->db_Main;
64 my @cols = grep { $_ ne biblio::record_node->primary } biblio::record_node->columns('All');
66 $dbh->do('COPY '. biblio::record_node->table .' ('.join(',',@cols).')'.' FROM STDIN');
68 while ( my $node = shift(@_) ) {
72 if ($part = $node->{$col}) {
73 push @parts, $dbh->quote($part);
78 return 0 unless ($dbh->func(join("\t", map {s/^'(.*)'$/$1/o} @parts)."\n", 'putline'));
80 $dbh->func('\.', 'putline');
83 # INSERT version, works but slow
85 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
88 my $total = scalar(@ids);
91 while ( my $node = shift(@_) ) {
92 my ($res) = $method->run( $node );
93 push @success, $res if ($res);
96 if ($total == scalar(@success)) {
103 __PACKAGE__->register_method(
104 method => 'create_record_nodeset',
105 api_name => 'open-ils.storage.biblio.record_node.batch.create',
110 sub create_record_entry {
113 my $metadata = shift;
116 my $rec = biblio::record_entry->create($metadata);
117 $client->respond( $rec->id );
119 $client->respond( 0 );
124 __PACKAGE__->register_method(
125 method => 'create_record_entry',
126 api_name => 'open-ils.storage.biblio.record_entry.create',
131 Params should be passed as a hash ref!
137 Please at least try to fill in:
149 sub update_record_entry {
154 my $rec = biblio::record_entry->retrieve($$entry{id});
155 return undef unless ($rec);
157 for my $field ( keys %$node ) {
158 $rec->$field( $$node{$field} );
163 $client->respond( $rec->id );
164 } catech Error with {
165 $client->respond( 0 );
170 __PACKAGE__->register_method(
171 method => 'update_record_node',
172 api_name => 'open-ils.storage.biblio.record_node.update',
179 sub get_record_entry {
184 for my $id ( @ids ) {
187 my $rec = biblio::record_entry->retrieve($id);
188 $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec);
190 last if ($self->api_name !~ /list/o);
194 __PACKAGE__->register_method(
195 method => 'get_record_entry',
196 api_name => 'open-ils.storage.biblio.record_entry.retrieve',
200 __PACKAGE__->register_method(
201 method => 'get_record_entry',
202 api_name => 'open-ils.storage.biblio.record_entry.retrieve.list',
208 sub get_record_node {
213 for my $id ( @ids ) {
216 my $rec = biblio::record_node->retrieve($id);
217 $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec);
219 last if ($self->api_name !~ /list/o);
223 __PACKAGE__->register_method(
224 method => 'get_record_node',
225 api_name => 'open-ils.storage.biblio.record_node.retrieve',
229 __PACKAGE__->register_method(
230 method => 'get_record_node',
231 api_name => 'open-ils.storage.biblio.record_node.retrieve.list',
237 sub get_record_nodeset {
242 for my $id ( @ids ) {
246 $self->_cdbi_list2AoH(
247 biblio::record_node->search(
248 owner_doc => $id, { order_by => 'intra_doc_id' }
253 last if ($self->api_name !~ /list/o);
257 __PACKAGE__->register_method(
258 method => 'get_record_nodeset',
259 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
263 __PACKAGE__->register_method(
264 method => 'get_record_nodeset',
265 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',