153{
154 switch(_valType) {
156 switch (_size) {
157 case sizeof(int8_t) : {
158 __data.i32 = (int32_t) * (int8_t*)_val;
159 __bind->buffer_type = MYSQL_TYPE_LONG;
160 __bind->buffer_length = sizeof(int32_t);
161 __bind->buffer = &__data;
162 break;
163 }
164 case sizeof(int16_t) : {
165 __data.i32 = (int32_t) * (int16_t*)_val;
166 __bind->buffer_type = MYSQL_TYPE_LONG;
167 __bind->buffer_length = sizeof(int32_t);
168 __bind->buffer = &__data;
169 break;
170 }
171 case sizeof(int32_t) : {
172 __data.i32 = (int32_t) * (int32_t*)_val;
173 __bind->buffer_type = MYSQL_TYPE_LONG;
174 __bind->buffer_length = sizeof(int32_t);
175 __bind->buffer = &__data;
176 break;
177 }
178 case sizeof(int64_t) : {
179 __data.i64 = (int64_t) * (int64_t*)_val;
180 __bind->buffer_type = MYSQL_TYPE_LONGLONG;
181 __bind->buffer_length = sizeof(int64_t);
182 __bind->buffer = &__data;
183 break;
184 }
185 default: {
187 return false;
188 }
189 }
190 __bind->is_unsigned = 0;
191 break;
192 }
194 switch (_size) {
195 case sizeof(uint8_t) : {
196 __data.u32 = (uint32_t) * (uint8_t*)_val;
197 __bind->buffer_type = MYSQL_TYPE_LONG;
198 __bind->buffer_length = sizeof(uint32_t);
199 __bind->buffer = &__data;
200 break;
201 }
202 case sizeof(uint16_t) : {
203 __data.u32 = (uint32_t) * (uint16_t*)_val;
204 __bind->buffer_type = MYSQL_TYPE_LONG;
205 __bind->buffer_length = sizeof(uint32_t);
206 __bind->buffer = &__data;
207 break;
208 }
209 case sizeof(uint32_t) : {
210 __data.u32 = (uint32_t) * (uint32_t*)_val;
211 __bind->buffer_type = MYSQL_TYPE_LONG;
212 __bind->buffer_length = sizeof(uint32_t);
213 __bind->buffer = &__data;
214 break;
215 }
216 case sizeof(uint64_t) : {
217 __data.u64 = (uint64_t) * (uint64_t*)_val;
218 __bind->buffer_type = MYSQL_TYPE_LONGLONG;
219 __bind->buffer_length = sizeof(uint64_t);
220 __bind->buffer = &__data;
221 break;
222 }
223 default: {
225 return false;
226 }
227 }
228 __bind->is_unsigned = 1;
229 break;
230 }
232 switch (_size) {
233 case sizeof(float) : {
234 __data.f32 = *(float*)_val;
235 __bind->buffer_type = MYSQL_TYPE_FLOAT;
236 __bind->buffer_length = sizeof(float);
237 __bind->buffer = &__data;
238 break;
239 }
240 case sizeof(double) : {
241 __data.f64 = *(double*)_val;
242 __bind->buffer_type = MYSQL_TYPE_DOUBLE;
243 __bind->buffer_length = sizeof(double);
244 __bind->buffer = &__data;
245 break;
246 }
247 default: {
249 return false;
250 }
251 }
252 break;
253 }
255 if (_size == sizeof(SQL::Date)) {
256 const SQL::Date* p = (const SQL::Date*)_val;
258 __data.time.month = p->
month;
259 __data.time.day = p->
day;
260 __data.time.hour = 0;
261 __data.time.minute = 0;
262 __data.time.second = 0;
263 __data.time.second_part = 0;
264 __data.time.neg = p->
year < 0 ? 1 : 0;
265 __data.time.time_type = MYSQL_TIMESTAMP_DATE;
266 __bind->buffer_type = MYSQL_TYPE_DATE;
267 __bind->buffer_length = sizeof(MYSQL_TIME);
268 __bind->buffer = &__data;
269 }
270 else {
272 return false;
273 }
274 break;
275 }
277 if (_size == sizeof(SQL::Time)) {
278 const SQL::Time* p = (const SQL::Time*)_val;
279 __data.time.year = 0;
280 __data.time.month = 0;
281 __data.time.day = 0;
282 __data.time.hour = p->
hour;
283 __data.time.minute = p->
min;
284 __data.time.second = p->
sec;
285 __data.time.second_part = p->
frac / 1000;
286 __data.time.neg = 0;
287 __data.time.time_type = MYSQL_TIMESTAMP_TIME;
288 __bind->buffer_type = MYSQL_TYPE_TIME;
289 __bind->buffer_length = sizeof(MYSQL_TIME);
290 __bind->buffer = &__data;
291 }
292 else {
294 return false;
295 }
296 break;
297 }
299 if (_size == sizeof(SQL::TimeStamp)) {
300 const SQL::TimeStamp* p = (const SQL::TimeStamp*)_val;
301#if 0
304 return false;
305 }
306#endif
308 __data.time.month = p->
month;
309 __data.time.day = p->
day;
310 __data.time.hour = p->
hour;
311 __data.time.minute = p->
min;
312 __data.time.second = p->
sec;
313 __data.time.second_part = p->
frac / 1000;
314 __data.time.neg = p->
year < 0 ? 1 : 0;
315 __data.time.time_type = MYSQL_TIMESTAMP_DATETIME;
316 __bind->buffer_type = MYSQL_TYPE_DATETIME;
317 __bind->buffer_length = sizeof(MYSQL_TIME);
318 __bind->buffer = &__data;
319 }
320 else {
322 return false;
323 }
324 break;
325 }
327 if (_size == sizeof(SQL::Interval)) {
328 const SQL::Interval* p = (const SQL::Interval*)_val;
329 __data.time.year = 0;
330 __data.time.month = 0;
335 __data.time.second_part =
__ABS(p->
fracs) / 1000;
338 __data.time.time_type = MYSQL_TIMESTAMP_TIME;
339 __bind->buffer_type = MYSQL_TYPE_TIME;
340 __bind->buffer_length = sizeof(MYSQL_TIME);
341 __bind->buffer = &__data;
342 }
343 else {
345 return false;
346 }
347 break;
348 }
353 return false;
354 }
355 __bind->buffer_type = MYSQL_TYPE_STRING;
356 __bind->buffer_length = (unsigned int) _size;
357 __bind->buffer = _val;
358 break;
359 }
361 if (_size != (
size_t)-1 && _size >
UINT32_MAX) {
363 return false;
364 }
365 __bind->buffer_type = MYSQL_TYPE_STRING;
366 __bind->buffer_length = 0;
367 __bind->buffer =
NULL;
368 __input = (InputStream*)_val;
369 __size = _size;
370 break;
371 }
372 default: {
374 return false;
375 }
376 }
377
378 __bind->is_null_value = 0;
379 Param::__dataType = _sqlType;
380 return true;
381}
#define __SET_ERROR(_errorCode)