mirror of
https://github.com/pocoproject/poco.git
synced 2025-10-27 19:10:20 +01:00
add postgresql
This commit is contained in:
168
Data/PostgreSQL/src/PostgreSQLStatementImpl.cpp
Normal file
168
Data/PostgreSQL/src/PostgreSQLStatementImpl.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
//
|
||||
// PostgreSQLStatementImpl.cpp
|
||||
//
|
||||
// Library: Data/PostgreSQL
|
||||
// Package: PostgreSQL
|
||||
// Module: PostgreSQLStatementImpl
|
||||
//
|
||||
// Copyright (c) 2015, Applied Informatics Software Engineering GmbH.
|
||||
// and Contributors.
|
||||
//
|
||||
// SPDX-License-Identifier: BSL-1.0
|
||||
//
|
||||
|
||||
|
||||
#include "Poco/Data/PostgreSQL/PostgreSQLStatementImpl.h"
|
||||
|
||||
namespace Poco {
|
||||
namespace Data {
|
||||
namespace PostgreSQL {
|
||||
|
||||
|
||||
PostgreSQLStatementImpl::PostgreSQLStatementImpl(SessionImpl& aSessionImpl): Poco::Data::StatementImpl(aSessionImpl),
|
||||
_statementExecutor(aSessionImpl.handle()),
|
||||
_pBinder(new Binder),
|
||||
_pExtractor(new Extractor (_statementExecutor)),
|
||||
_hasNext(NEXT_DONTKNOW)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PostgreSQLStatementImpl::~PostgreSQLStatementImpl()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
std::size_t PostgreSQLStatementImpl::columnsReturned() const
|
||||
{
|
||||
return _statementExecutor.columnsReturned();
|
||||
}
|
||||
|
||||
|
||||
int PostgreSQLStatementImpl::affectedRowCount() const
|
||||
{
|
||||
return (int)_statementExecutor.getAffectedRowCount();
|
||||
}
|
||||
|
||||
|
||||
const MetaColumn& PostgreSQLStatementImpl::metaColumn(std::size_t aPosition) const
|
||||
{
|
||||
return _statementExecutor.metaColumn(aPosition);
|
||||
}
|
||||
|
||||
|
||||
bool PostgreSQLStatementImpl::hasNext()
|
||||
{
|
||||
if (NEXT_DONTKNOW == _hasNext)
|
||||
{
|
||||
if (columnsReturned() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_statementExecutor.fetch())
|
||||
{
|
||||
_hasNext = NEXT_TRUE;
|
||||
return true;
|
||||
}
|
||||
|
||||
_hasNext = NEXT_FALSE;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
if (NEXT_TRUE == _hasNext)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
std::size_t PostgreSQLStatementImpl::next()
|
||||
{
|
||||
if (! hasNext())
|
||||
{
|
||||
throw StatementException("No data received");
|
||||
}
|
||||
|
||||
Poco::Data::AbstractExtractionVec::iterator it= extractions().begin();
|
||||
Poco::Data::AbstractExtractionVec::iterator itEnd = extractions().end();
|
||||
|
||||
std::size_t position = 0;
|
||||
|
||||
for (; it != itEnd; ++it)
|
||||
{
|
||||
(*it)->extract(position);
|
||||
position += (*it)->numOfColumnsHandled();
|
||||
}
|
||||
|
||||
_hasNext = NEXT_DONTKNOW;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
bool PostgreSQLStatementImpl::canBind() const
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
if ((_statementExecutor.state() >= StatementExecutor::STMT_COMPILED)
|
||||
&& ! bindings().empty())
|
||||
{
|
||||
ret = (*bindings().begin())->canBind();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
bool PostgreSQLStatementImpl::canCompile() const
|
||||
{
|
||||
return (_statementExecutor.state() < StatementExecutor::STMT_COMPILED);
|
||||
}
|
||||
|
||||
|
||||
void PostgreSQLStatementImpl::compileImpl()
|
||||
{
|
||||
_statementExecutor.prepare(toString());
|
||||
}
|
||||
|
||||
|
||||
void PostgreSQLStatementImpl::bindImpl()
|
||||
{
|
||||
Poco::Data::AbstractBindingVec& binds = bindings();
|
||||
|
||||
std::size_t position = 0;
|
||||
Poco::Data::AbstractBindingVec::iterator it= binds.begin();
|
||||
Poco::Data::AbstractBindingVec::iterator itEnd = binds.end();
|
||||
|
||||
for (; it != itEnd && (*it)->canBind(); ++it)
|
||||
{
|
||||
(*it)->bind(position);
|
||||
position += (*it)->numOfColumnsHandled();
|
||||
}
|
||||
|
||||
_pBinder->updateBindVectorToCurrentValues();
|
||||
|
||||
_statementExecutor.bindParams(_pBinder->bindVector());
|
||||
|
||||
_statementExecutor.execute();
|
||||
|
||||
_hasNext = NEXT_DONTKNOW;
|
||||
}
|
||||
|
||||
|
||||
Poco::Data::AbstractExtractor::Ptr PostgreSQLStatementImpl::extractor()
|
||||
{
|
||||
return _pExtractor;
|
||||
}
|
||||
|
||||
|
||||
Poco::Data::AbstractBinder::Ptr PostgreSQLStatementImpl::binder()
|
||||
{
|
||||
return _pBinder;
|
||||
}
|
||||
|
||||
|
||||
} } } // namespace Poco::Data::PostgreSQL
|
||||
Reference in New Issue
Block a user