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;
5 use OpenILS::Utils::Fieldmapper;
7 sub create_record_node {
13 my $n = biblio::record_node->create($node);
14 $client->respond( $n->id );
16 $client->respond( 0 );
21 __PACKAGE__->register_method(
22 method => 'create_record_node',
23 api_name => 'open-ils.storage.biblio.record_node.create',
28 sub update_record_node {
33 my $n = biblio::record_node->retrieve("$$node{id}");
34 return undef unless ($n);
36 for my $field ( keys %$node ) {
37 $n->$field( $$node{$field} );
42 $client->respond( $n->id );
44 $client->respond( 0 );
49 __PACKAGE__->register_method(
50 method => 'update_record_node',
51 api_name => 'open-ils.storage.biblio.record_node.update',
57 sub create_record_nodeset {
61 # COPY version... not working yet
64 my $dbh = biblio::record_node->db_Main;
65 my @cols = grep { $_ ne biblio::record_node->primary } biblio::record_node->columns('All');
67 $dbh->do('COPY '. biblio::record_node->table .' ('.join(',',@cols).')'.' FROM STDIN');
69 while ( my $node = shift(@_) ) {
73 if ($part = $node->{$col}) {
74 push @parts, $dbh->quote($part);
79 return 0 unless ($dbh->func(join("\t", map {s/^'(.*)'$/$1/o} @parts)."\n", 'putline'));
81 $dbh->func('\.', 'putline');
84 # INSERT version, works but slow
86 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
89 my $total = scalar(@ids);
92 while ( my $node = shift(@_) ) {
93 my ($res) = $method->run( $node );
94 push @success, $res if ($res);
97 if ($total == scalar(@success)) {
104 __PACKAGE__->register_method(
105 method => 'create_record_nodeset',
106 api_name => 'open-ils.storage.biblio.record_node.batch.create',
111 sub create_record_entry {
114 my $metadata = shift;
117 my $rec = biblio::record_entry->create($metadata);
118 $client->respond( $rec->id );
120 $client->respond( 0 );
125 __PACKAGE__->register_method(
126 method => 'create_record_entry',
127 api_name => 'open-ils.storage.biblio.record_entry.create',
132 Params should be passed as a hash ref!
138 Please at least try to fill in:
150 sub update_record_entry {
155 my $rec = biblio::record_entry->retrieve("$$entry{id}");
156 return undef unless ($rec);
158 for my $field ( keys %$node ) {
159 $rec->$field( $$node{$field} );
164 $client->respond( $rec->id );
165 } catech Error with {
166 $client->respond( 0 );
171 __PACKAGE__->register_method(
172 method => 'update_record_node',
173 api_name => 'open-ils.storage.biblio.record_node.update',
180 sub get_record_entry {
185 for my $id ( @ids ) {
188 my $rec = biblio::record_entry->retrieve("$id");
189 $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec);
191 last if ($self->api_name !~ /list/o);
195 __PACKAGE__->register_method(
196 method => 'get_record_entry',
197 api_name => 'open-ils.storage.biblio.record_entry.retrieve',
201 __PACKAGE__->register_method(
202 method => 'get_record_entry',
203 api_name => 'open-ils.storage.biblio.record_entry.retrieve.list',
209 sub get_record_node {
214 for my $id ( @ids ) {
217 my $rec = biblio::record_node->retrieve("$id");
218 $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec);
220 last if ($self->api_name !~ /list/o);
224 __PACKAGE__->register_method(
225 method => 'get_record_node',
226 api_name => 'open-ils.storage.biblio.record_node.retrieve',
230 __PACKAGE__->register_method(
231 method => 'get_record_node',
232 api_name => 'open-ils.storage.biblio.record_node.retrieve.list',
238 sub get_record_nodeset {
243 my $table = biblio::record_node->table;
244 my @fields = Fieldmapper::biblio::record_node->real_fields;
245 my $field_list = join ',', @fields;
247 my $sth = biblio::record_node->db_Main->prepare_cached(<<" SQL");
251 ORDER BY intra_doc_id;
255 for my $id ( @ids ) {
258 $sth->execute("$id");
262 while (my $data = $sth->fetchrow_arrayref) {
263 my $n = new Fieldmapper::biblio::record_node;
265 for my $f ( @fields ) {
266 $n->$f( $$data[$index] );
273 $client->respond( \@nodeset );
275 last if ($self->api_name !~ /list/o);
279 __PACKAGE__->register_method(
280 method => 'get_record_nodeset',
281 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
285 __PACKAGE__->register_method(
286 method => 'get_record_nodeset',
287 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',