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 27 #pragma warning(disable:4355 4996) 28 #define snprintf _snprintf 41 position_ = position++;
54 std::size_t
const vsize = size();
55 for (
size_t i = 0; i != vsize; ++i)
60 if (ind != NULL && ind[i] ==
i_null)
71 std::vector<char> * pv
72 =
static_cast<std::vector<char> *
>(data_);
73 std::vector<char> & v = *pv;
82 std::vector<std::string> * pv
83 =
static_cast<std::vector<std::string> *
>(data_);
84 std::vector<std::string> & v = *pv;
86 buf =
new char[v[i].size() + 1];
87 std::strcpy(buf, v[i].c_str());
92 std::vector<short> * pv
93 =
static_cast<std::vector<short> *
>(data_);
94 std::vector<short> & v = *pv;
96 std::size_t
const bufSize
97 = std::numeric_limits<short>::digits10 + 3;
98 buf =
new char[bufSize];
99 snprintf(buf, bufSize,
"%d", static_cast<int>(v[i]));
104 std::vector<int> * pv
105 =
static_cast<std::vector<int> *
>(data_);
106 std::vector<int> & v = *pv;
108 std::size_t
const bufSize
109 = std::numeric_limits<int>::digits10 + 3;
110 buf =
new char[bufSize];
111 snprintf(buf, bufSize,
"%d", v[i]);
116 std::vector<long long>* pv
117 =
static_cast<std::vector<long long>*
>(data_);
118 std::vector<long long>& v = *pv;
120 std::size_t
const bufSize
121 = std::numeric_limits<long long>::digits10 + 3;
122 buf =
new char[bufSize];
128 std::vector<unsigned long long>* pv
129 =
static_cast<std::vector<unsigned long long>*
>(data_);
130 std::vector<unsigned long long>& v = *pv;
132 std::size_t
const bufSize
133 = std::numeric_limits<unsigned long long>::digits10 + 2;
134 buf =
new char[bufSize];
142 std::vector<double> * pv
143 =
static_cast<std::vector<double> *
>(data_);
144 std::vector<double> & v = *pv;
146 std::size_t
const bufSize = 100;
147 buf =
new char[bufSize];
149 snprintf(buf, bufSize,
"%.20g", v[i]);
154 std::vector<std::tm> * pv
155 =
static_cast<std::vector<std::tm> *
>(data_);
156 std::vector<std::tm> & v = *pv;
158 std::size_t
const bufSize = 20;
159 buf =
new char[bufSize];
161 snprintf(buf, bufSize,
"%d-%02d-%02d %02d:%02d:%02d",
162 v[i].tm_year + 1900, v[i].tm_mon + 1, v[i].tm_mday,
163 v[i].tm_hour, v[i].tm_min, v[i].tm_sec);
169 "Use vector element used with non-supported type.");
173 buffers_.push_back(buf);
179 statement_.useByPosBuffers_[position_] = &buffers_[0];
184 statement_.useByNameBuffers_[name_] = &buffers_[0];
195 sz = get_vector_size<char>(data_);
198 sz = get_vector_size<short>(data_);
201 sz = get_vector_size<int>(data_);
204 sz = get_vector_size<long long>(data_);
207 sz = get_vector_size<unsigned long long>(data_);
210 sz = get_vector_size<double>(data_);
213 sz = get_vector_size<std::string>(data_);
216 sz = get_vector_size<std::tm>(data_);
219 throw soci_error(
"Use vector element used with non-supported type.");
227 std::size_t
const bsize = buffers_.size();
228 for (std::size_t i = 0; i != bsize; ++i)
230 delete [] buffers_[i];
virtual void bind_by_pos(int &position, void *data, details::exchange_type type)
virtual void pre_use(indicator const *ind)
virtual void bind_by_name(std::string const &name, void *data, details::exchange_type type)
virtual std::size_t size()