/* This file is part of Metaproxy.
- Copyright (C) 2005-2009 Index Data
+ Copyright (C) 2005-2010 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
#include "config.hpp"
-#include "filter.hpp"
-#include "package.hpp"
+#include "filter_virt_db.hpp"
+#include <metaproxy/package.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
#include <boost/shared_ptr.hpp>
-#include "util.hpp"
-#include "filter_virt_db.hpp"
+#include <metaproxy/util.hpp>
#include <yaz/zgdu.h>
#include <yaz/otherinfo.h>
{
b->m_named_result_sets = true;
}
- if (!*res->result)
+ if (*res->result)
{
- error_code = YAZ_BIB1_DATABASE_UNAVAILABLE;
- mp::util::get_init_diagnostics(res, error_code, addinfo);
- BackendPtr null;
- return null;
+ m_backend_list.push_back(b);
+ return b;
+
}
- }
- else
- {
error_code = YAZ_BIB1_DATABASE_UNAVAILABLE;
- // addinfo = database;
- BackendPtr null;
- return null;
- }
- if (init_package.session().is_closed())
+ mp::util::get_init_diagnostics(res, error_code, addinfo);
+ }
+ if (!init_package.session().is_closed())
{
- error_code = YAZ_BIB1_DATABASE_UNAVAILABLE;
- // addinfo = database;
- BackendPtr null;
- return null;
+ Package close_package(b->m_backend_session, package.origin());
+ close_package.copy_filter(package);
+ close_package.session().close();
+ close_package.move(b->m_route); // closing it
}
-
- m_backend_list.push_back(b);
- return b;
+ BackendPtr null;
+ return null;
}
void yf::VirtualDB::Frontend::search(mp::Package &package, Z_APDU *apdu_req)
for (i = 0; i<req->num_databaseNames; i++)
databases.push_back(req->databaseNames[i]);
- BackendPtr b; // null for now
Sets_it sets_it = m_sets.find(req->resultSetName);
if (sets_it != m_sets.end())
{
return;
}
sets_it->second.m_backend->m_number_of_sets--;
-
- // pick up any existing backend with a database match
- std::list<BackendPtr>::const_iterator map_it;
- map_it = m_backend_list.begin();
- for (; map_it != m_backend_list.end(); map_it++)
- {
- BackendPtr tmp = *map_it;
- if (tmp->m_frontend_databases == databases)
- break;
- }
- if (map_it != m_backend_list.end())
- b = *map_it;
}
- else
+ // pick up any existing database with named result sets ..
+ // or one which has no result sets.. yet.
+ BackendPtr b; // null for now
+ std::list<BackendPtr>::const_iterator map_it;
+ map_it = m_backend_list.begin();
+ for (; map_it != m_backend_list.end(); map_it++)
{
- // new result set.
-
- // pick up any existing database with named result sets ..
- // or one which has no result sets.. yet.
- std::list<BackendPtr>::const_iterator map_it;
- map_it = m_backend_list.begin();
- for (; map_it != m_backend_list.end(); map_it++)
+ BackendPtr tmp = *map_it;
+ if (tmp->m_frontend_databases == databases &&
+ (tmp->m_named_result_sets ||
+ tmp->m_number_of_sets == 0))
{
- BackendPtr tmp = *map_it;
- if (tmp->m_frontend_databases == databases &&
- (tmp->m_named_result_sets ||
- tmp->m_number_of_sets == 0))
- break;
- }
- if (map_it != m_backend_list.end())
b = *map_it;
+ break;
+ }
}
if (!b) // no backend yet. Must create a new one
{