projects
/
metaproxy-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
limit=0 means unlimited MP-632
[metaproxy-moved-to-github.git]
/
src
/
filter_sort.cpp
diff --git
a/src/filter_sort.cpp
b/src/filter_sort.cpp
index
d7d93ae
..
02ae667
100644
(file)
--- a/
src/filter_sort.cpp
+++ b/
src/filter_sort.cpp
@@
-1,5
+1,5
@@
/* This file is part of Metaproxy.
/* This file is part of Metaproxy.
- Copyright (C) 2005-2013 Index Data
+ Copyright (C) Index Data
Metaproxy is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Metaproxy is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@
-70,7
+70,7
@@
namespace metaproxy_1 {
Record(Z_NamePlusRecord *n, const char *namespaces,
const char *expr, bool debug);
~Record();
Record(Z_NamePlusRecord *n, const char *namespaces,
const char *expr, bool debug);
~Record();
- bool operator < (const Record &rhs);
+ bool operator < (const Record &rhs) const;
};
class Sort::RecordList : boost::noncopyable {
Odr_oid *syntax;
};
class Sort::RecordList : boost::noncopyable {
Odr_oid *syntax;
@@
-111,6
+111,7
@@
namespace metaproxy_1 {
Odr_int start_pos,
ResultSetPtr s,
Odr_oid *syntax,
Odr_int start_pos,
ResultSetPtr s,
Odr_oid *syntax,
+ Z_RecordComposition *comp,
const char *resultSetId);
public:
Frontend(Impl *impl);
const char *resultSetId);
public:
Frontend(Impl *impl);
@@
-285,7
+286,7
@@
yf::Sort::Record::~Record()
{
}
{
}
-bool yf::Sort::Record::operator < (const Record &rhs)
+bool yf::Sort::Record::operator < (const Record &rhs) const
{
if (strcmp(this->score.c_str(), rhs.score.c_str()) < 0)
return true;
{
if (strcmp(this->score.c_str(), rhs.score.c_str()) < 0)
return true;
@@
-500,6
+501,7
@@
void yf::Sort::Frontend::handle_records(mp::Package &package,
Odr_int start_pos,
ResultSetPtr s,
Odr_oid *syntax,
Odr_int start_pos,
ResultSetPtr s,
Odr_oid *syntax,
+ Z_RecordComposition *comp,
const char *resultSetId)
{
if (records && records->which == Z_Records_DBOSD && start_pos == 1)
const char *resultSetId)
{
if (records && records->which == Z_Records_DBOSD && start_pos == 1)
@@
-539,6
+541,7
@@
void yf::Sort::Frontend::handle_records(mp::Package &package,
*p_req->numberOfRecordsRequested = end_pos - pos + 1;
p_req->preferredRecordSyntax = syntax;
p_req->resultSetId = odr_strdup(odr, resultSetId);
*p_req->numberOfRecordsRequested = end_pos - pos + 1;
p_req->preferredRecordSyntax = syntax;
p_req->resultSetId = odr_strdup(odr, resultSetId);
+ p_req->recordComposition = comp;
present_package.request() = p_apdu;
present_package.move();
present_package.request() = p_apdu;
present_package.move();
@@
-570,14
+573,12
@@
void yf::Sort::Frontend::handle_search(mp::Package &package, Z_APDU *apdu_req)
{
Z_SearchRequest *req = apdu_req->u.searchRequest;
std::string resultSetId = req->resultSetName;
{
Z_SearchRequest *req = apdu_req->u.searchRequest;
std::string resultSetId = req->resultSetName;
- Package b_package(package.session(), package.origin());
mp::odr odr;
Odr_oid *syntax = 0;
if (req->preferredRecordSyntax)
syntax = odr_oiddup(odr, req->preferredRecordSyntax);
mp::odr odr;
Odr_oid *syntax = 0;
if (req->preferredRecordSyntax)
syntax = odr_oiddup(odr, req->preferredRecordSyntax);
- b_package.copy_filter(package);
Sets_it sets_it = m_sets.find(req->resultSetName);
if (sets_it != m_sets.end())
{
Sets_it sets_it = m_sets.find(req->resultSetName);
if (sets_it != m_sets.end())
{
@@
-598,24
+599,35
@@
void yf::Sort::Frontend::handle_search(mp::Package &package, Z_APDU *apdu_req)
}
ResultSetPtr s(new ResultSet);
m_sets[resultSetId] = s;
}
ResultSetPtr s(new ResultSet);
m_sets[resultSetId] = s;
- package.move();
- Z_GDU *gdu_res = package.response().get();
+
+ Package b_package(package.session(), package.origin());
+ b_package.copy_filter(package);
+ b_package.request() = apdu_req;
+ b_package.move();
+
+ Z_GDU *gdu_res = b_package.response().get();
if (gdu_res && gdu_res->which == Z_GDU_Z3950 && gdu_res->u.z3950->which ==
Z_APDU_searchResponse)
{
Z_SearchResponse *res = gdu_res->u.z3950->u.searchResponse;
if (gdu_res && gdu_res->which == Z_GDU_Z3950 && gdu_res->u.z3950->which ==
Z_APDU_searchResponse)
{
Z_SearchResponse *res = gdu_res->u.z3950->u.searchResponse;
+ Z_RecordComposition *record_comp =
+ mp::util::piggyback_to_RecordComposition(odr,
+ *res->resultCount, req);
s->hit_count = *res->resultCount;
s->hit_count = *res->resultCount;
- handle_records(b_package, apdu_req, res->records, 1, s,
- syntax, resultSetId.c_str());
+ handle_records(package, apdu_req, res->records, 1, s,
+ syntax, record_comp, resultSetId.c_str());
package.response() = gdu_res;
}
package.response() = gdu_res;
}
+ else
+ package.response() = b_package.response();
+ if (b_package.session().is_closed())
+ b_package.session().close();
}
void yf::Sort::Frontend::handle_present(mp::Package &package, Z_APDU *apdu_req)
{
Z_PresentRequest *req = apdu_req->u.presentRequest;
std::string resultSetId = req->resultSetId;
}
void yf::Sort::Frontend::handle_present(mp::Package &package, Z_APDU *apdu_req)
{
Z_PresentRequest *req = apdu_req->u.presentRequest;
std::string resultSetId = req->resultSetId;
- Package b_package(package.session(), package.origin());
mp::odr odr;
Odr_oid *syntax = 0;
Odr_int start = *req->resultSetStartPoint;
mp::odr odr;
Odr_oid *syntax = 0;
Odr_int start = *req->resultSetStartPoint;
@@
-623,7
+635,6
@@
void yf::Sort::Frontend::handle_present(mp::Package &package, Z_APDU *apdu_req)
if (req->preferredRecordSyntax)
syntax = odr_oiddup(odr, req->preferredRecordSyntax);
if (req->preferredRecordSyntax)
syntax = odr_oiddup(odr, req->preferredRecordSyntax);
- b_package.copy_filter(package);
Sets_it sets_it = m_sets.find(resultSetId);
if (sets_it == m_sets.end())
{
Sets_it sets_it = m_sets.find(resultSetId);
if (sets_it == m_sets.end())
{
@@
-670,16
+681,26
@@
void yf::Sort::Frontend::handle_present(mp::Package &package, Z_APDU *apdu_req)
}
break;
}
}
break;
}
- package.move();
- Z_GDU *gdu_res = package.response().get();
+
+
+ Package b_package(package.session(), package.origin());
+ b_package.copy_filter(package);
+ b_package.request() = apdu_req;
+ b_package.move();
+ Z_GDU *gdu_res = b_package.response().get();
if (gdu_res && gdu_res->which == Z_GDU_Z3950 && gdu_res->u.z3950->which ==
Z_APDU_presentResponse)
{
Z_PresentResponse *res = gdu_res->u.z3950->u.presentResponse;
if (gdu_res && gdu_res->which == Z_GDU_Z3950 && gdu_res->u.z3950->which ==
Z_APDU_presentResponse)
{
Z_PresentResponse *res = gdu_res->u.z3950->u.presentResponse;
- handle_records(b_package, apdu_req, res->records,
- start, rset, syntax, resultSetId.c_str());
+ handle_records(package, apdu_req, res->records,
+ start, rset, syntax, req->recordComposition,
+ resultSetId.c_str());
package.response() = gdu_res;
}
package.response() = gdu_res;
}
+ else
+ package.response() = b_package.response();
+ if (b_package.session().is_closed())
+ b_package.session().close();
}
void yf::Sort::Frontend::handle_package(mp::Package &package)
}
void yf::Sort::Frontend::handle_package(mp::Package &package)