← Index
NYTProf Performance Profile   « line view »
For svc/members/upsert
  Run on Tue Jan 13 11:50:22 2015
Reported on Tue Jan 13 12:09:47 2015

Filename/usr/lib/x86_64-linux-gnu/perl5/5.20/Net/Z3950/ZOOM.pm
StatementsExecuted 13 statements in 4.74ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11123µs23µsNet::Z3950::ZOOM::::yaz_log_mask_strNet::Z3950::ZOOM::yaz_log_mask_str (xsub)
11120µs20µsNet::Z3950::ZOOM::::BEGIN@3Net::Z3950::ZOOM::BEGIN@3
1118µs15µsNet::Z3950::ZOOM::::BEGIN@5Net::Z3950::ZOOM::BEGIN@5
1118µs21µsNet::Z3950::ZOOM::::BEGIN@4Net::Z3950::ZOOM::BEGIN@4
1115µs5µsNet::Z3950::ZOOM::::yaz_versionNet::Z3950::ZOOM::yaz_version (xsub)
0000s0sNet::Z3950::ZOOM::::CCL_ERR_BAD_RELATIONNet::Z3950::ZOOM::CCL_ERR_BAD_RELATION
0000s0sNet::Z3950::ZOOM::::CCL_ERR_BAD_RPNet::Z3950::ZOOM::CCL_ERR_BAD_RP
0000s0sNet::Z3950::ZOOM::::CCL_ERR_DOUBLE_QUALNet::Z3950::ZOOM::CCL_ERR_DOUBLE_QUAL
0000s0sNet::Z3950::ZOOM::::CCL_ERR_EQ_EXPECTEDNet::Z3950::ZOOM::CCL_ERR_EQ_EXPECTED
0000s0sNet::Z3950::ZOOM::::CCL_ERR_OKNet::Z3950::ZOOM::CCL_ERR_OK
0000s0sNet::Z3950::ZOOM::::CCL_ERR_OP_EXPECTEDNet::Z3950::ZOOM::CCL_ERR_OP_EXPECTED
0000s0sNet::Z3950::ZOOM::::CCL_ERR_RP_EXPECTEDNet::Z3950::ZOOM::CCL_ERR_RP_EXPECTED
0000s0sNet::Z3950::ZOOM::::CCL_ERR_SETNAME_EXPECTEDNet::Z3950::ZOOM::CCL_ERR_SETNAME_EXPECTED
0000s0sNet::Z3950::ZOOM::::CCL_ERR_TERM_EXPECTEDNet::Z3950::ZOOM::CCL_ERR_TERM_EXPECTED
0000s0sNet::Z3950::ZOOM::::CCL_ERR_TRUNC_NOT_BOTHNet::Z3950::ZOOM::CCL_ERR_TRUNC_NOT_BOTH
0000s0sNet::Z3950::ZOOM::::CCL_ERR_TRUNC_NOT_LEFTNet::Z3950::ZOOM::CCL_ERR_TRUNC_NOT_LEFT
0000s0sNet::Z3950::ZOOM::::CCL_ERR_TRUNC_NOT_RIGHTNet::Z3950::ZOOM::CCL_ERR_TRUNC_NOT_RIGHT
0000s0sNet::Z3950::ZOOM::::CCL_ERR_UNKNOWN_QUALNet::Z3950::ZOOM::CCL_ERR_UNKNOWN_QUAL
0000s0sNet::Z3950::ZOOM::::ERROR_CCL_CONFIGNet::Z3950::ZOOM::ERROR_CCL_CONFIG
0000s0sNet::Z3950::ZOOM::::ERROR_CCL_PARSENet::Z3950::ZOOM::ERROR_CCL_PARSE
0000s0sNet::Z3950::ZOOM::::ERROR_CONNECTNet::Z3950::ZOOM::ERROR_CONNECT
0000s0sNet::Z3950::ZOOM::::ERROR_CONNECTION_LOSTNet::Z3950::ZOOM::ERROR_CONNECTION_LOST
0000s0sNet::Z3950::ZOOM::::ERROR_CQL_PARSENet::Z3950::ZOOM::ERROR_CQL_PARSE
0000s0sNet::Z3950::ZOOM::::ERROR_CQL_TRANSFORMNet::Z3950::ZOOM::ERROR_CQL_TRANSFORM
0000s0sNet::Z3950::ZOOM::::ERROR_DECODENet::Z3950::ZOOM::ERROR_DECODE
0000s0sNet::Z3950::ZOOM::::ERROR_ENCODENet::Z3950::ZOOM::ERROR_ENCODE
0000s0sNet::Z3950::ZOOM::::ERROR_INITNet::Z3950::ZOOM::ERROR_INIT
0000s0sNet::Z3950::ZOOM::::ERROR_INTERNALNet::Z3950::ZOOM::ERROR_INTERNAL
0000s0sNet::Z3950::ZOOM::::ERROR_INVALID_QUERYNet::Z3950::ZOOM::ERROR_INVALID_QUERY
0000s0sNet::Z3950::ZOOM::::ERROR_MEMORYNet::Z3950::ZOOM::ERROR_MEMORY
0000s0sNet::Z3950::ZOOM::::ERROR_NONENet::Z3950::ZOOM::ERROR_NONE
0000s0sNet::Z3950::ZOOM::::ERROR_TIMEOUTNet::Z3950::ZOOM::ERROR_TIMEOUT
0000s0sNet::Z3950::ZOOM::::ERROR_UNSUPPORTED_PROTOCOLNet::Z3950::ZOOM::ERROR_UNSUPPORTED_PROTOCOL
0000s0sNet::Z3950::ZOOM::::ERROR_UNSUPPORTED_QUERYNet::Z3950::ZOOM::ERROR_UNSUPPORTED_QUERY
0000s0sNet::Z3950::ZOOM::::EVENT_CONNECTNet::Z3950::ZOOM::EVENT_CONNECT
0000s0sNet::Z3950::ZOOM::::EVENT_ENDNet::Z3950::ZOOM::EVENT_END
0000s0sNet::Z3950::ZOOM::::EVENT_NONENet::Z3950::ZOOM::EVENT_NONE
0000s0sNet::Z3950::ZOOM::::EVENT_RECV_APDUNet::Z3950::ZOOM::EVENT_RECV_APDU
0000s0sNet::Z3950::ZOOM::::EVENT_RECV_DATANet::Z3950::ZOOM::EVENT_RECV_DATA
0000s0sNet::Z3950::ZOOM::::EVENT_RECV_RECORDNet::Z3950::ZOOM::EVENT_RECV_RECORD
0000s0sNet::Z3950::ZOOM::::EVENT_RECV_SEARCHNet::Z3950::ZOOM::EVENT_RECV_SEARCH
0000s0sNet::Z3950::ZOOM::::EVENT_SEND_APDUNet::Z3950::ZOOM::EVENT_SEND_APDU
0000s0sNet::Z3950::ZOOM::::EVENT_SEND_DATANet::Z3950::ZOOM::EVENT_SEND_DATA
0000s0sNet::Z3950::ZOOM::::EVENT_TIMEOUTNet::Z3950::ZOOM::EVENT_TIMEOUT
0000s0sNet::Z3950::ZOOM::::EVENT_UNKNOWNNet::Z3950::ZOOM::EVENT_UNKNOWN
0000s0sNet::Z3950::ZOOM::::event_strNet::Z3950::ZOOM::event_str
0000s0sNet::Z3950::ZOOM::::record_getNet::Z3950::ZOOM::record_get
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Net::Z3950::ZOOM;
2
3250µs120µs
# spent 20µs within Net::Z3950::ZOOM::BEGIN@3 which was called: # once (20µs+0s) by C4::Context::BEGIN@4 at line 3
use 5.008;
# spent 20µs making 1 call to Net::Z3950::ZOOM::BEGIN@3
4225µs234µs
# spent 21µs (8+13) within Net::Z3950::ZOOM::BEGIN@4 which was called: # once (8µs+13µs) by C4::Context::BEGIN@4 at line 4
use strict;
# spent 21µs making 1 call to Net::Z3950::ZOOM::BEGIN@4 # spent 13µs making 1 call to strict::import
521.00ms222µs
# spent 15µs (8+7) within Net::Z3950::ZOOM::BEGIN@5 which was called: # once (8µs+7µs) by C4::Context::BEGIN@4 at line 5
use warnings;
# spent 15µs making 1 call to Net::Z3950::ZOOM::BEGIN@5 # spent 7µs making 1 call to warnings::import
6
71600nsour $VERSION = '1.30';
8
91700nsrequire XSLoader;
1013.64ms13.63msXSLoader::load('Net::Z3950::ZOOM', $VERSION);
# spent 3.63ms making 1 call to XSLoader::load
11
1211µsmy($vs, $ss) = ("x" x 100, "x" x 100); # allocate space for these strings
13110µs15µsmy $version = Net::Z3950::ZOOM::yaz_version($vs, $ss);
# spent 5µs making 1 call to Net::Z3950::ZOOM::yaz_version
141600nsif ($version < 0x040000 && ! -f "/tmp/ignore-ZOOM-YAZ-version-mismatch") {
15 warn <<__EOT__;
16*** WARNING!
17ZOOM-Perl requires at least version 4.0.0 of YAZ, but is currently
18running against only version $vs (sys-string '$ss').
19Some things may not work.
20__EOT__
21}
22
23# The only thing this module does is define the following constants,
24# which MUST BE KEPT SYNCHRONISED with the definitions in <yaz/zoom.h>
25
26# Error codes, as returned from connection_error()
27sub ERROR_NONE { 0 }
28sub ERROR_CONNECT { 10000 }
29sub ERROR_MEMORY { 10001 }
30sub ERROR_ENCODE { 10002 }
31sub ERROR_DECODE { 10003 }
32sub ERROR_CONNECTION_LOST { 10004 }
33sub ERROR_INIT { 10005 }
34sub ERROR_INTERNAL { 10006 }
35sub ERROR_TIMEOUT { 10007 }
36sub ERROR_UNSUPPORTED_PROTOCOL { 10008 }
37sub ERROR_UNSUPPORTED_QUERY { 10009 }
38sub ERROR_INVALID_QUERY { 10010 }
39sub ERROR_CQL_PARSE { 10011 }
40sub ERROR_CQL_TRANSFORM { 10012 }
41sub ERROR_CCL_CONFIG { 10013 }
42sub ERROR_CCL_PARSE { 10014 }
43
44# Event types, as returned from connection_last_event()
45sub EVENT_NONE { 0 }
46sub EVENT_CONNECT { 1 }
47sub EVENT_SEND_DATA { 2 }
48sub EVENT_RECV_DATA { 3 }
49sub EVENT_TIMEOUT { 4 }
50sub EVENT_UNKNOWN { 5 }
51sub EVENT_SEND_APDU { 6 }
52sub EVENT_RECV_APDU { 7 }
53sub EVENT_RECV_RECORD { 8 }
54sub EVENT_RECV_SEARCH { 9 }
55sub EVENT_END { 10 } # In YAZ 2.1.17 and later
56
57# CCL error-codes, which are in a different space from the ZOOM errors
58sub CCL_ERR_OK { 0 }
59sub CCL_ERR_TERM_EXPECTED { 1 }
60sub CCL_ERR_RP_EXPECTED { 2 }
61sub CCL_ERR_SETNAME_EXPECTED { 3 }
62sub CCL_ERR_OP_EXPECTED { 4 }
63sub CCL_ERR_BAD_RP { 5 }
64sub CCL_ERR_UNKNOWN_QUAL { 6 }
65sub CCL_ERR_DOUBLE_QUAL { 7 }
66sub CCL_ERR_EQ_EXPECTED { 8 }
67sub CCL_ERR_BAD_RELATION { 9 }
68sub CCL_ERR_TRUNC_NOT_LEFT { 10 }
69sub CCL_ERR_TRUNC_NOT_BOTH { 11 }
70sub CCL_ERR_TRUNC_NOT_RIGHT { 12 }
71
72
73=head1 NAME
74
75Net::Z3950::ZOOM - Perl extension for invoking the ZOOM-C API.
76
77=head1 SYNOPSIS
78
79 use Net::Z3950::ZOOM;
80 $conn = Net::Z3950::ZOOM::connection_new($host, $port);
81 $errcode = Net::Z3950::ZOOM::connection_error($conn, $errmsg, $addinfo);
82 Net::Z3950::ZOOM::connection_option_set($conn, databaseName => "foo");
83 # etc.
84
85=head1 DESCRIPTION
86
87This module provides a simple thin-layer through to the ZOOM-C
88functions in the YAZ toolkit for Z39.50 and SRW/U communication. You
89should not be using this very nasty, low-level API. You should be
90using the C<ZOOM> module instead, which implements a nice, Perlish API
91on top of this module, conformant to the ZOOM Abstract API described at
92http://zoom.z3950.org/api/
93
94To enforce the don't-use-this-module prohibition, I am not even going
95to document it. If you really, really, really want to use it, then it
96pretty much follows the API described in the ZOOM-C documentation at
97http://www.indexdata.dk/yaz/doc/zoom.tkl
98
99The only additional (non-ZOOM-C) function provided by this module is
100C<event_str()>, which takes as its argument an event code such as
101C<Net::Z3950::ZOOM::EVENT_SEND_APDU>, and returns a corresponding
102short string.
103
104=cut
105
106sub event_str {
107 my($code) = @_;
108
109 if ($code == EVENT_NONE) {
110 return "none";
111 } elsif ($code == EVENT_CONNECT) {
112 return "connect";
113 } elsif ($code == EVENT_SEND_DATA) {
114 return "send data";
115 } elsif ($code == EVENT_RECV_DATA) {
116 return "receive data";
117 } elsif ($code == EVENT_TIMEOUT) {
118 return "timeout";
119 } elsif ($code == EVENT_UNKNOWN) {
120 return "unknown";
121 } elsif ($code == EVENT_SEND_APDU) {
122 return "send apdu";
123 } elsif ($code == EVENT_RECV_APDU) {
124 return "receive apdu";
125 } elsif ($code == EVENT_RECV_RECORD) {
126 return "receive record";
127 } elsif ($code == EVENT_RECV_SEARCH) {
128 return "receive search";
129 } elsif ($code == EVENT_END) {
130 return "end";
131 }
132 return "impossible event " . $code;
133}
134
135
136# Switch API variant depending on $type. This works because the
137# get_string() and get_binary() functions have different returns
138# types, one of which is implemented as a NUL-terminated string and
139# the other as a pointer-and-length structure.
140#
141# Some Z39.50 servers, when asked for an OPAC-format record in the
142# case where no circulation information is available, will return a
143# USMARC record rather than an OPAC record containing only a
144# bibliographic part. This non-OPAC records is not recognised by the
145# underlying record_get() code in ZOOM-C, which ends up returning a
146# null pointer. To make life a little less painful when dealing with
147# such servers until ZOOM-C is fixed, this code recognises the
148# wrong-record-syntax case and returns the XML for the bibliographic
149# part anyway.
150#
151sub record_get {
152 my($rec, $type) = @_;
153
154 my $simpletype = $type;
155 $simpletype =~ s/;.*//;
156 if (grep { $type eq $_ } qw(database syntax schema)) {
157 return record_get_string($rec, $type);
158 } else {
159 my $val = record_get_binary($rec, $type);
160 if ($simpletype eq "opac" && !defined $val) {
161 my $newtype = $type;
162 if ($newtype !~ s/.*?;/xml;/) {
163 $newtype = "xml";
164 }
165 $val = record_get_binary($rec, $newtype);
166 $val = ("<opacRecord>\n <bibliographicRecord>\n" . $val .
167 " </bibliographicRecord>\n</opacRecord>");
168
169 }
170 return $val;
171 }
172}
173
174
175=head1 SEE ALSO
176
177The C<ZOOM> module, included in the same distribution as this one.
178
179=head1 AUTHOR
180
181Mike Taylor, E<lt>mike@indexdata.comE<gt>
182
183=head1 COPYRIGHT AND LICENCE
184
185Copyright (C) 2005-2014 by Index Data.
186
187This library is free software; you can redistribute it and/or modify
188it under the same terms as Perl itself, either Perl version 5.8.4 or,
189at your option, any later version of Perl 5 you may have available.
190
191=cut
192
19319µs1;
 
# spent 23µs within Net::Z3950::ZOOM::yaz_log_mask_str which was called: # once (23µs+0s) by ZOOM::Log::mask_str at line 1091 of ZOOM.pm
sub Net::Z3950::ZOOM::yaz_log_mask_str; # xsub
# spent 5µs within Net::Z3950::ZOOM::yaz_version which was called: # once (5µs+0s) by C4::Context::BEGIN@4 at line 13
sub Net::Z3950::ZOOM::yaz_version; # xsub