8 #define SOCI_POSTGRESQL_SOURCE 12 #include <libpq/libpq-fs.h> 20 #ifdef SOCI_POSTGRESQL_NOPARAMS 21 #ifndef SOCI_POSTGRESQL_NOBINDBYNAME 22 #define SOCI_POSTGRESQL_NOBINDBYNAME 23 #endif // SOCI_POSTGRESQL_NOBINDBYNAME 24 #endif // SOCI_POSTGRESQL_NOPARAMS 36 position_ = position++;
48 void set_invector_(
void * p,
int indx, T
const & val)
50 std::vector<T> * dest =
51 static_cast<std::vector<T> *
>(p);
53 std::vector<T> & v = *dest;
67 int const pos = position_ - 1;
69 int const endRow = statement_.currentRow_ + statement_.rowsToConsume_;
71 for (
int curRow = statement_.currentRow_, i = 0;
72 curRow != endRow; ++curRow, ++i)
75 if (PQgetisnull(statement_.result_, curRow, pos) != 0)
80 "Null value fetched and no indicator defined.");
97 char * buf = PQgetvalue(statement_.result_, curRow, pos);
102 set_invector_(data_, i, *buf);
105 set_invector_<std::string>(data_, i, buf);
109 short const val = string_to_integer<short>(buf);
110 set_invector_(data_, i, val);
115 int const val = string_to_integer<int>(buf);
116 set_invector_(data_, i, val);
121 long long const val = string_to_integer<long long>(buf);
122 set_invector_(data_, i, val);
127 unsigned long long const val =
128 string_to_unsigned_integer<unsigned long long>(buf);
129 set_invector_(data_, i, val);
135 set_invector_(data_, i, val);
144 set_invector_(data_, i, t);
149 throw soci_error(
"Into element used with non-supported type.");
162 template <
typename T>
163 void resizevector_(
void * p, std::size_t sz)
165 std::vector<T> * v =
static_cast<std::vector<T> *
>(p);
173 assert(sz < 10u*std::numeric_limits<unsigned short>::max());
179 resizevector_<char>(data_, sz);
182 resizevector_<short>(data_, sz);
185 resizevector_<int>(data_, sz);
188 resizevector_<long long>(data_, sz);
191 resizevector_<unsigned long long>(data_, sz);
194 resizevector_<double>(data_, sz);
197 resizevector_<std::string>(data_, sz);
200 resizevector_<std::tm>(data_, sz);
203 throw soci_error(
"Into vector element used with non-supported type.");
214 sz = get_vector_size<char>(data_);
217 sz = get_vector_size<short>(data_);
220 sz = get_vector_size<int>(data_);
223 sz = get_vector_size<long long>(data_);
226 sz = get_vector_size<unsigned long long>(data_);
229 sz = get_vector_size<double>(data_);
232 sz = get_vector_size<std::string>(data_);
235 sz = get_vector_size<std::tm>(data_);
238 throw soci_error(
"Into vector element used with non-supported type.");
virtual void resize(std::size_t sz)
virtual void define_by_pos(int &position, void *data, details::exchange_type type)
virtual void post_fetch(bool gotData, indicator *ind)
void parse_std_tm(char const *buf, std::tm &t)
virtual std::size_t size()
double string_to_double(char const *buf)