remove unecessary toLower()

make SessionFactory map keys case insensitive nad remove unnecessary
toLower() calls
This commit is contained in:
aleks-f 2012-12-16 22:06:03 -06:00
parent 56812d353b
commit 7e1374a004
7 changed files with 26 additions and 16 deletions

View File

@ -55,7 +55,7 @@ SessionImpl::SessionImpl(const std::string& connect,
bool autoBind,
bool autoExtract):
Poco::Data::AbstractSessionImpl<SessionImpl>(connect, loginTimeout),
_connector(toLower(Connector::KEY)),
_connector(Connector::KEY),
_maxFieldSize(maxFieldSize),
_autoBind(autoBind),
_autoExtract(autoExtract),
@ -73,7 +73,7 @@ SessionImpl::SessionImpl(const std::string& connect,
bool enforceCapability,
bool autoBind,
bool autoExtract): Poco::Data::AbstractSessionImpl<SessionImpl>(connect),
_connector(toLower(Connector::KEY)),
_connector(Connector::KEY),
_maxFieldSize(maxFieldSize),
_autoBind(autoBind),
_autoExtract(autoExtract),

View File

@ -60,7 +60,7 @@ const std::string SessionImpl::ABORT_TRANSACTION("ROLLBACK");
SessionImpl::SessionImpl(const std::string& fileName, std::size_t loginTimeout):
Poco::Data::AbstractSessionImpl<SessionImpl>(fileName, loginTimeout),
_connector(toLower(Connector::KEY)),
_connector(Connector::KEY),
_pDB(0),
_connected(false),
_isTransaction(false)

View File

@ -45,6 +45,7 @@
#include "Poco/Data/Session.h"
#include "Poco/Mutex.h"
#include "Poco/SharedPtr.h"
#include "Poco/String.h"
#include <map>
@ -71,6 +72,7 @@ class Data_API SessionFactory
/// Session ses("SQLite", "dummy.db");
{
public:
static SessionFactory& instance();
/// returns the static instance of the singleton.
@ -92,7 +94,7 @@ public:
Session create(const std::string& uri,
std::size_t timeout = Session::LOGIN_TIMEOUT_DEFAULT);
/// Creates a Session for the given URI (must be in key:///connectionString format).
/// Throws an Poco:Data::UnknownDataBaseException if no Connector is registered for the key.
/// Throws a Poco:Data::UnknownDataBaseException if no Connector is registered for the key.
private:
SessionFactory();
@ -107,7 +109,15 @@ private:
SessionInfo(Connector* pSI);
};
typedef std::map<std::string, SessionInfo> Connectors;
struct ILT
{
bool operator() (const std::string& s1, const std::string& s2) const
{
return Poco::icompare(s1, s2) < 0;
}
};
typedef std::map<std::string, SessionInfo, ILT> Connectors;
Connectors _connectors;
Poco::FastMutex _mutex;
};

View File

@ -227,7 +227,7 @@ inline std::size_t SessionImpl::getLoginTimeout() const
inline std::string SessionImpl::uri(const std::string& connector,
const std::string& connectionString)
{
return format("%s:///%s", toLower(connector), connectionString);
return format("%s:///%s", connector, connectionString);
}

View File

@ -103,7 +103,7 @@ class TypeHandler: public AbstractTypeHandler
/// poco_assert_dbg (pBinder != 0);
/// TypeHandler<std::string>::bind(pos++, obj.getLastName(), pBinder, dir);
/// TypeHandler<std::string>::bind(pos++, obj.getFirstName(), pBinder, dir);
/// TypeHandler<int>::bind(pos++, obj.getAge(), pBinder);
/// TypeHandler<int>::bind(pos++, obj.getAge(), pBinder, dir);
/// }
///
/// static void prepare(std::size_t pos, const Person& obj, AbstractPreparator* pPreparator)

View File

@ -118,12 +118,12 @@ int main(int argc, char** argv)
// insert some rows
DateTime hd(1956, 3, 1);
session << "INSERT INTO Simpsons VALUES('Homer Simpson', 'Springfield', 42, ?)", use(hd), now;
DateTime md(1954, 10, 1);
session << "INSERT INTO Simpsons VALUES('Marge Simpson', 'Springfield', 38, ?)", use(md), now;
DateTime bd(1980, 4, 1);
session << "INSERT INTO Simpsons VALUES('Bart Simpson', 'Springfield', 12, ?)", use(bd), now;
DateTime ld(1982, 5, 9);
session << "INSERT INTO Simpsons VALUES('Lisa Simpson', 'Springfield', 10, ?)", use(ld), now;
hd.assign(1954, 10, 1);
session << "INSERT INTO Simpsons VALUES('Marge Simpson', 'Springfield', 38, ?)", use(hd), now;
hd.assign(1980, 4, 1);
session << "INSERT INTO Simpsons VALUES('Bart Simpson', 'Springfield', 12, ?)", use(hd), now;
hd.assign(1982, 5, 9);
session << "INSERT INTO Simpsons VALUES('Lisa Simpson', 'Springfield', 10, ?)", use(hd), now;
// create a statement and print the column names and data as HTML table
HTMLTableFormatter tf;

View File

@ -65,7 +65,7 @@ void SessionFactory::add(Connector* pIn)
Poco::FastMutex::ScopedLock lock(_mutex);
SessionInfo info(pIn);
std::pair<Connectors::iterator, bool> res =
_connectors.insert(std::make_pair(toLower(pIn->name()), info));
_connectors.insert(std::make_pair(pIn->name(), info));
if (!res.second) res.first->second.cnt++;
}
@ -73,7 +73,7 @@ void SessionFactory::add(Connector* pIn)
void SessionFactory::remove(const std::string& key)
{
Poco::FastMutex::ScopedLock lock(_mutex);
Connectors::iterator it = _connectors.find(toLower(key));
Connectors::iterator it = _connectors.find(key);
poco_assert (_connectors.end() != it);
--(it->second.cnt);
@ -86,7 +86,7 @@ Session SessionFactory::create(const std::string& key,
std::size_t timeout)
{
Poco::FastMutex::ScopedLock lock(_mutex);
Connectors::iterator it = _connectors.find(toLower(key));
Connectors::iterator it = _connectors.find(key);
poco_assert (_connectors.end() != it);
return Session(it->second.ptrSI->createSession(connectionString, timeout));