1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
//
// Copyright (C) 2004-2016 Maciej Sobczak, Stephen Hutton
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// https://www.boost.org/LICENSE_1_0.txt)
//
#define SOCI_SOURCE
#include "soci/into-type.h"
#include "soci/statement.h"
using namespace soci;
using namespace soci::details;
standard_into_type::~standard_into_type()
{
delete backEnd_;
}
void standard_into_type::define(statement_impl & st, int & position)
{
if (backEnd_ == NULL)
{
backEnd_ = st.make_into_type_backend();
}
backEnd_->define_by_pos(position, data_, type_);
}
void standard_into_type::pre_exec(int num)
{
backEnd_->pre_exec(num);
}
void standard_into_type::pre_fetch()
{
backEnd_->pre_fetch();
}
void standard_into_type::post_fetch(bool gotData, bool calledFromFetch)
{
backEnd_->post_fetch(gotData, calledFromFetch, ind_);
if (gotData)
{
convert_from_base();
}
}
void standard_into_type::clean_up()
{
// backEnd_ might be NULL if IntoType<Row> was used
if (backEnd_ != NULL)
{
backEnd_->clean_up();
}
}
vector_into_type::~vector_into_type()
{
delete backEnd_;
}
void vector_into_type::define(statement_impl & st, int & position)
{
if (backEnd_ == NULL)
{
backEnd_ = st.make_vector_into_type_backend();
}
if (end_ != NULL)
{
backEnd_->define_by_pos_bulk(position, data_, type_, begin_, end_);
}
else
{
backEnd_->define_by_pos(position, data_, type_);
}
}
void vector_into_type::pre_exec(int num)
{
backEnd_->pre_exec(num);
}
void vector_into_type::pre_fetch()
{
backEnd_->pre_fetch();
}
void vector_into_type::post_fetch(bool gotData, bool /* calledFromFetch */)
{
if (indVec_ != NULL && indVec_->empty() == false)
{
backEnd_->post_fetch(gotData, &(*indVec_)[0]);
}
else
{
backEnd_->post_fetch(gotData, NULL);
}
if (gotData)
{
convert_from_base();
}
}
void vector_into_type::resize(std::size_t sz)
{
if (indVec_ != NULL && end_ == NULL)
{
indVec_->resize(sz);
}
backEnd_->resize(sz);
}
std::size_t vector_into_type::size() const
{
return backEnd_->size();
}
void vector_into_type::clean_up()
{
if (backEnd_ != NULL)
{
backEnd_->clean_up();
}
}
|