9 #define SOCI_MYSQL_SOURCE 17 #pragma warning(disable:4355) 30 position_ = position++;
42 void set_invector_(
void *p,
int indx, T
const &val)
44 std::vector<T> *dest =
45 static_cast<std::vector<T> *
>(p);
47 std::vector<T> &v = *dest;
61 int pos = position_ - 1;
63 int const endRow = statement_.currentRow_ + statement_.rowsToConsume_;
66 mysql_row_seek(statement_.result_,
67 statement_.resultRowOffsets_[statement_.currentRow_]);
68 for (
int curRow = statement_.currentRow_, i = 0;
69 curRow != endRow; ++curRow, ++i)
71 MYSQL_ROW
row = mysql_fetch_row(statement_.result_);
78 "Null value fetched and no indicator defined.");
95 const char *buf = row[pos] != NULL ? row[pos] :
"";
100 set_invector_(data_, i, *buf);
104 unsigned long * lengths =
105 mysql_fetch_lengths(statement_.result_);
110 std::vector<std::string> *dest =
111 static_cast<std::vector<std::string> *
>(data_);
112 (*dest)[i].assign(buf, lengths[pos]);
119 set_invector_(data_, i, val);
126 set_invector_(data_, i, val);
133 set_invector_(data_, i, val);
138 unsigned long long val;
140 set_invector_(data_, i, val);
147 set_invector_(data_, i, val);
156 set_invector_(data_, i, t);
161 throw soci_error(
"Into element used with non-supported type.");
174 template <
typename T>
175 void resizevector_(
void *p, std::size_t sz)
177 std::vector<T> *v =
static_cast<std::vector<T> *
>(p);
188 case x_char: resizevector_<char> (data_, sz);
break;
189 case x_short: resizevector_<short> (data_, sz);
break;
190 case x_integer: resizevector_<int> (data_, sz);
break;
191 case x_long_long: resizevector_<long long> (data_, sz);
break;
193 resizevector_<unsigned long long>(data_, sz);
195 case x_double: resizevector_<double> (data_, sz);
break;
196 case x_stdstring: resizevector_<std::string> (data_, sz);
break;
197 case x_stdtm: resizevector_<std::tm> (data_, sz);
break;
200 throw soci_error(
"Into vector element used with non-supported type.");
210 case x_char: sz = get_vector_size<char> (data_);
break;
211 case x_short: sz = get_vector_size<short> (data_);
break;
212 case x_integer: sz = get_vector_size<int> (data_);
break;
213 case x_long_long: sz = get_vector_size<long long> (data_);
break;
215 sz = get_vector_size<unsigned long long>(data_);
217 case x_double: sz = get_vector_size<double> (data_);
break;
218 case x_stdstring: sz = get_vector_size<std::string> (data_);
break;
219 case x_stdtm: sz = get_vector_size<std::tm> (data_);
break;
222 throw soci_error(
"Into vector element used with non-supported type.");
virtual void define_by_pos(int &position, void *data, details::exchange_type type)
void parse_std_tm(char const *buf, std::tm &t)
virtual void resize(std::size_t sz)
void parse_num(char const *buf, T &x)
virtual std::size_t size()
virtual void post_fetch(bool gotData, indicator *ind)