mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-13 18:45:10 +01:00
244 lines
7.4 KiB
C++
244 lines
7.4 KiB
C++
//
|
|
// SessionImpl.h
|
|
//
|
|
// $Id: //poco/Main/Data/include/Poco/Data/SessionImpl.h#5 $
|
|
//
|
|
// Library: Data
|
|
// Package: DataCore
|
|
// Module: SessionImpl
|
|
//
|
|
// Definition of the SessionImpl class.
|
|
//
|
|
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person or organization
|
|
// obtaining a copy of the software and accompanying documentation covered by
|
|
// this license (the "Software") to use, reproduce, display, distribute,
|
|
// execute, and transmit the Software, and to prepare derivative works of the
|
|
// Software, and to permit third-parties to whom the Software is furnished to
|
|
// do so, all subject to the following:
|
|
//
|
|
// The copyright notices in the Software and this entire statement, including
|
|
// the above license grant, this restriction and the following disclaimer,
|
|
// must be included in all copies of the Software, in whole or in part, and
|
|
// all derivative works of the Software, unless such copies or derivative
|
|
// works are solely in the form of machine-executable object code generated by
|
|
// a source language processor.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
// DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
|
|
#ifndef Data_SessionImpl_INCLUDED
|
|
#define Data_SessionImpl_INCLUDED
|
|
|
|
|
|
#include "Poco/Data/Data.h"
|
|
#include "Poco/RefCountedObject.h"
|
|
#include "Poco/String.h"
|
|
#include "Poco/Format.h"
|
|
#include "Poco/Any.h"
|
|
|
|
|
|
namespace Poco {
|
|
namespace Data {
|
|
|
|
|
|
class StatementImpl;
|
|
|
|
|
|
class Data_API SessionImpl: public Poco::RefCountedObject
|
|
/// Interface for Session functionality that subclasses must extend.
|
|
/// SessionImpl objects are noncopyable.
|
|
{
|
|
public:
|
|
static const std::size_t LOGIN_TIMEOUT_INFINITE = 0;
|
|
/// Infinite connection/login timeout.
|
|
|
|
static const std::size_t LOGIN_TIMEOUT_DEFAULT = 60;
|
|
/// Default connection/login timeout in seconds.
|
|
|
|
static const std::size_t CONNECTION_TIMEOUT_INFINITE = 0;
|
|
/// Infinite connection/login timeout.
|
|
|
|
static const std::size_t CONNECTION_TIMEOUT_DEFAULT = CONNECTION_TIMEOUT_INFINITE;
|
|
/// Default connection/login timeout in seconds.
|
|
|
|
SessionImpl(const std::string& connectionString,
|
|
std::size_t timeout = LOGIN_TIMEOUT_DEFAULT);
|
|
/// Creates the SessionImpl.
|
|
|
|
virtual ~SessionImpl();
|
|
/// Destroys the SessionImpl.
|
|
|
|
virtual StatementImpl* createStatementImpl() = 0;
|
|
/// Creates a StatementImpl.
|
|
|
|
virtual void open(const std::string& connectionString = "") = 0;
|
|
/// Opens the session using the supplied string.
|
|
/// Can also be used with default empty string to reconnect
|
|
/// a disconnected session.
|
|
/// If the connection is not established within requested timeout
|
|
/// (specified in seconds), a ConnectionFailedException is thrown.
|
|
/// Zero timout means indefinite
|
|
|
|
virtual void close() = 0;
|
|
/// Closes the connection.
|
|
|
|
virtual bool isConnected() = 0;
|
|
/// Returns true if session is connected, false otherwise.
|
|
|
|
void setLoginTimeout(std::size_t timeout);
|
|
/// Sets the session login timeout value.
|
|
|
|
std::size_t getLoginTimeout() const;
|
|
/// Returns the session login timeout value.
|
|
|
|
virtual void setConnectionTimeout(std::size_t timeout) = 0;
|
|
/// Sets the session connection timeout value.
|
|
|
|
virtual std::size_t getConnectionTimeout() = 0;
|
|
/// Returns the session connection timeout value.
|
|
|
|
void reconnect();
|
|
/// Closes the connection and opens it again.
|
|
|
|
virtual void begin() = 0;
|
|
/// Starts a transaction.
|
|
|
|
virtual void commit() = 0;
|
|
/// Commits and ends a transaction.
|
|
|
|
virtual void rollback() = 0;
|
|
/// Aborts a transaction.
|
|
|
|
virtual bool canTransact() = 0;
|
|
/// Returns true if session has transaction capabilities.
|
|
|
|
virtual bool isTransaction() = 0;
|
|
/// Returns true iff a transaction is a transaction is in progress, false otherwise.
|
|
|
|
virtual void setTransactionIsolation(Poco::UInt32) = 0;
|
|
/// Sets the transaction isolation level.
|
|
|
|
virtual Poco::UInt32 getTransactionIsolation() = 0;
|
|
/// Returns the transaction isolation level.
|
|
|
|
virtual bool hasTransactionIsolation(Poco::UInt32) = 0;
|
|
/// Returns true iff the transaction isolation level corresponding
|
|
/// to the supplied bitmask is supported.
|
|
|
|
virtual bool isTransactionIsolation(Poco::UInt32) = 0;
|
|
/// Returns true iff the transaction isolation level corresponds
|
|
/// to the supplied bitmask.
|
|
|
|
virtual const std::string& connectorName() = 0;
|
|
/// Returns the name of the connector.
|
|
|
|
const std::string& connectionString();
|
|
/// Returns the connection string.
|
|
|
|
static std::string uri(const std::string& connector, const std::string& connectionString);
|
|
/// Returns formatted URI.
|
|
|
|
std::string uri();
|
|
/// Returns the URI for this session.
|
|
|
|
virtual void setFeature(const std::string& name, bool state) = 0;
|
|
/// Set the state of a feature.
|
|
///
|
|
/// Features are a generic extension mechanism for session implementations.
|
|
/// and are defined by the underlying SessionImpl instance.
|
|
///
|
|
/// Throws a NotSupportedException if the requested feature is
|
|
/// not supported by the underlying implementation.
|
|
|
|
virtual bool getFeature(const std::string& name) = 0;
|
|
/// Look up the state of a feature.
|
|
///
|
|
/// Features are a generic extension mechanism for session implementations.
|
|
/// and are defined by the underlying SessionImpl instance.
|
|
///
|
|
/// Throws a NotSupportedException if the requested feature is
|
|
/// not supported by the underlying implementation.
|
|
|
|
virtual void setProperty(const std::string& name, const Poco::Any& value) = 0;
|
|
/// Set the value of a property.
|
|
///
|
|
/// Properties are a generic extension mechanism for session implementations.
|
|
/// and are defined by the underlying SessionImpl instance.
|
|
///
|
|
/// Throws a NotSupportedException if the requested property is
|
|
/// not supported by the underlying implementation.
|
|
|
|
virtual Poco::Any getProperty(const std::string& name) = 0;
|
|
/// Look up the value of a property.
|
|
///
|
|
/// Properties are a generic extension mechanism for session implementations.
|
|
/// and are defined by the underlying SessionImpl instance.
|
|
///
|
|
/// Throws a NotSupportedException if the requested property is
|
|
/// not supported by the underlying implementation.
|
|
|
|
protected:
|
|
void setConnectionString(const std::string& connectionString);
|
|
/// Sets the connection string. Should only be called on
|
|
/// disconnetced sessions. Throws InvalidAccessException when called on
|
|
/// a connected session.
|
|
|
|
private:
|
|
SessionImpl();
|
|
SessionImpl(const SessionImpl&);
|
|
SessionImpl& operator = (const SessionImpl&);
|
|
|
|
std::string _connectionString;
|
|
std::size_t _loginTimeout;
|
|
};
|
|
|
|
|
|
//
|
|
// inlines
|
|
//
|
|
inline const std::string& SessionImpl::connectionString()
|
|
{
|
|
return _connectionString;
|
|
}
|
|
|
|
|
|
inline void SessionImpl::setLoginTimeout(std::size_t timeout)
|
|
{
|
|
_loginTimeout = timeout;
|
|
}
|
|
|
|
|
|
inline std::size_t SessionImpl::getLoginTimeout() const
|
|
{
|
|
return _loginTimeout;
|
|
}
|
|
|
|
|
|
inline std::string SessionImpl::uri(const std::string& connector,
|
|
const std::string& connectionString)
|
|
{
|
|
return format("%s:///%s", toLower(connector), connectionString);
|
|
}
|
|
|
|
|
|
inline std::string SessionImpl::uri()
|
|
{
|
|
return uri(connectorName(), connectionString());
|
|
}
|
|
|
|
|
|
} } // namespace Poco::Data
|
|
|
|
|
|
#endif // Data_SessionImpl_INCLUDED
|