metaproxy  1.21.0
Private Member Functions | Private Attributes | Friends | List of all members
metaproxy_1::filter::BackendTest::Rep Class Reference
Collaboration diagram for metaproxy_1::filter::BackendTest::Rep:
Collaboration graph

Private Member Functions

Z_Records * fetch (ODR odr, Odr_oid *preferredRecordSyntax, Z_ElementSetNames *esn, int start, int number, int &error_code, std::string &addinfo, int *number_returned, int *next_position)
 

Private Attributes

bool m_support_named_result_sets
 
session_map< Session_infom_sessions
 

Friends

class BackendTest
 

Detailed Description

Definition at line 50 of file filter_backend_test.cpp.

Member Function Documentation

◆ fetch()

Z_Records * mp::filter::BackendTest::Rep::fetch ( ODR  odr,
Odr_oid *  preferredRecordSyntax,
Z_ElementSetNames *  esn,
int  start,
int  number,
int &  error_code,
std::string &  addinfo,
int *  number_returned,
int *  next_position 
)
private

Definition at line 103 of file filter_backend_test.cpp.

108 {
109  const char *element_set_name = "F"; // default to use
110 
111  if (number + start - 1 > result_set_size || start < 1)
112  {
113  error_code = YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE;
114  return 0;
115  }
116 
117  if (!preferredRecordSyntax)
118  preferredRecordSyntax = odr_oiddup(odr, yaz_oid_recsyn_usmarc);
119 
120  if (preferredRecordSyntax)
121  {
122  if (!oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_xml))
123  ;
124  else if (!oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_usmarc))
125  ;
126  else
127  {
128  error_code = YAZ_BIB1_RECORD_SYNTAX_UNSUPP;
129  return 0;
130  }
131  }
132 
133  // no element set, "B" and "F" are supported
134  if (esn)
135  {
136  if (esn->which != Z_ElementSetNames_generic)
137  {
138  error_code
139  = YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_;
140  return 0;
141  }
142  element_set_name = esn->u.generic;
143  }
144  if (!strcmp(element_set_name, "B")
145  && !oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_usmarc))
146  ; // Brief
147  else if (!strcmp(element_set_name, "F")
148  && !oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_usmarc))
149  ; // Full
150  else if (!strncmp(element_set_name, "FF", 2)
151  && !oid_oidcmp(preferredRecordSyntax, yaz_oid_recsyn_xml))
152  ; // Huge XML test record
153  else
154  {
155  error_code
156  = YAZ_BIB1_SPECIFIED_ELEMENT_SET_NAME_NOT_VALID_FOR_SPECIFIED_;
157  addinfo = std::string(element_set_name);
158  return 0;
159  }
160  Z_Records *rec = (Z_Records *) odr_malloc(odr, sizeof(Z_Records));
161  rec->which = Z_Records_DBOSD;
162  rec->u.databaseOrSurDiagnostics = (Z_NamePlusRecordList *)
163  odr_malloc(odr, sizeof(Z_NamePlusRecordList));
164  rec->u.databaseOrSurDiagnostics->num_records = number;
165  rec->u.databaseOrSurDiagnostics->records = (Z_NamePlusRecord **)
166  odr_malloc(odr, sizeof(Z_NamePlusRecord *) * number);
167  int i;
168  for (i = 0; i<number; i++)
169  {
170  rec->u.databaseOrSurDiagnostics->records[i] = (Z_NamePlusRecord *)
171  odr_malloc(odr, sizeof(Z_NamePlusRecord));
172  Z_NamePlusRecord *npr = rec->u.databaseOrSurDiagnostics->records[i];
173  npr->databaseName = 0;
174  npr->which = Z_NamePlusRecord_databaseRecord;
175 
176  if (!strncmp(element_set_name, "FF", 2))
177  { // Huge XML test record
178  size_t sz = 1024;
179  if (element_set_name[2])
180  sz = atoi(element_set_name+2) * 1024;
181  if (sz < 10)
182  sz = 10;
183  char *tmp_rec = (char*) xmalloc(sz);
184 
185  memset(tmp_rec, 'a', sz);
186  memcpy(tmp_rec, "<a>", 3);
187  memcpy(tmp_rec + sz - 4, "</a>", 4);
188 
189  npr->u.databaseRecord = z_ext_record_xml(odr, tmp_rec, sz);
190  xfree(tmp_rec);
191  }
192  else
193  {
194  char *tmp_rec = odr_strdup(odr, marc_record);
195  char offset_str[30];
196  sprintf(offset_str, "test__%09d_", i+start);
197  memcpy(tmp_rec+186, offset_str, strlen(offset_str));
198  npr->u.databaseRecord = z_ext_record_usmarc(
199  odr, tmp_rec, strlen(tmp_rec));
200  }
201 
202  }
203  *number_returned = number;
204  if (start + number > result_set_size)
205  *next_position = 0;
206  else
207  *next_position = start + number;
208  return rec;
209 }
static const char * marc_record
static const int result_set_size

References marc_record, and result_set_size.

Friends And Related Function Documentation

◆ BackendTest

friend class BackendTest
friend

Definition at line 51 of file filter_backend_test.cpp.

Member Data Documentation

◆ m_sessions

session_map<Session_info> metaproxy_1::filter::BackendTest::Rep::m_sessions
private

Definition at line 61 of file filter_backend_test.cpp.

◆ m_support_named_result_sets

bool metaproxy_1::filter::BackendTest::Rep::m_support_named_result_sets
private

Definition at line 59 of file filter_backend_test.cpp.


The documentation for this class was generated from the following file: