#include "Pgsql_Params.h" #include using namespace Pgsql; Params::Params() {} Params::Params(const Params& rhs) : m_paramTypes(rhs.m_paramTypes) , m_paramLengths(rhs.m_paramLengths) , m_paramFormats(rhs.m_paramFormats) { //std::vector m_paramValues; copyValues(rhs.m_paramValues); } Params& Params::operator=(const Params& rhs) { if (&rhs != this) { m_paramTypes = rhs.m_paramTypes; m_paramLengths = rhs.m_paramLengths; m_paramFormats = rhs.m_paramFormats; copyValues(rhs.m_paramValues); } return *this; } Params::Params(Params&& rhs) : m_paramTypes(std::move(rhs.m_paramTypes)) , m_paramValues(std::move(rhs.m_paramValues)) , m_paramLengths(std::move(rhs.m_paramLengths)) , m_paramFormats(std::move(rhs.m_paramFormats)) { rhs.m_paramValues.clear(); // just in case it was copied instead of moved } Params& Params::operator=(Params&& rhs) { if (&rhs != this) { m_paramTypes = std::move(rhs.m_paramTypes); m_paramValues = std::move(rhs.m_paramValues); rhs.m_paramValues.clear(); // just in case it was copied instead of moved m_paramLengths = std::move(rhs.m_paramLengths); m_paramFormats = std::move(rhs.m_paramFormats); } return *this; } Params::~Params() { deleteValues(); } Param Params::addText(const char *data, Oid oid) { m_paramTypes.push_back(oid); m_paramValues.push_back(data); m_paramLengths.push_back(data ? strlen(data) + 1 : 0); m_paramFormats.push_back(0); return Param(*this, m_paramValues.size() - 1); } Param Params::add(const QString &s, Oid oid) { auto ba = s.toUtf8(); const int len = ba.size(); char * p = new char[len+1]; std::memcpy(p, ba.data(), len); p[len] = 0; return addText(p, oid); } Param Params::add(const char *data, Oid oid) { char * p = nullptr; int len = 0; if (data) { len = std::strlen(data); p = new char[len+1]; std::memcpy(p, data, len); p[len] = 0; } return addText(p, oid); // m_paramTypes.push_back(oid); // m_paramValues.push_back(p); // m_paramLengths.push_back(len); // m_paramFormats.push_back(0); } //void Params::addBinary(const char *data, int length, Oid oid) //{ // m_paramTypes.push_back(oid); // m_paramValues.push_back(data); // m_paramLengths.push_back(length); // m_paramFormats.push_back(1); //} void Params::clear() { m_paramTypes.clear(); deleteValues(); m_paramValues.clear(); m_paramLengths.clear(); m_paramFormats.clear(); } void Params::copyValues(const t_paramValues &r) { const int n = m_paramTypes.size(); m_paramValues.reserve(n); for (int i = 0; i < n; ++i) { if (r[i]) { const int len = m_paramLengths[i]; char * p = new char[len+1]; std::memcpy(p, r[i], len+1); m_paramValues.push_back(p); } else { m_paramValues.push_back(nullptr); } } }