//
// ConnectionHandle.cpp
//
// Library: Data/ODBC
// Package: ODBC
// Module:  ConnectionHandle
//
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#include "Poco/Data/ODBC/ConnectionHandle.h"
#include "Poco/Data/ODBC/Utility.h"
#include "Poco/Data/ODBC/ODBCException.h"


namespace Poco {
namespace Data {
namespace ODBC {


ConnectionHandle::ConnectionHandle(EnvironmentHandle* pEnvironment): 
	_pEnvironment(pEnvironment ? pEnvironment : new EnvironmentHandle),
	_hdbc(SQL_NULL_HDBC), 
	_ownsEnvironment(pEnvironment ? false : true)
{
	if (Utility::isError(SQLAllocHandle(SQL_HANDLE_DBC, 
		_pEnvironment->handle(), 
		&_hdbc))) 
	{
		throw ODBCException("Could not allocate connection handle.");
	}
}


ConnectionHandle::~ConnectionHandle()
{
	try
	{
		SQLDisconnect(_hdbc);
		SQLRETURN rc = SQLFreeHandle(SQL_HANDLE_DBC, _hdbc);

		if (_ownsEnvironment) delete _pEnvironment;

		poco_assert (!Utility::isError(rc));
	}
	catch (...)
	{
		poco_unexpected();
	}
}


} } } // namespace Poco::Data::ODBC
