386{
389 );
390
391 switch(_valType) {
394 return false;
395 break;
396 }
399 return false;
400 break;
401 }
403 switch (_size) {
404 case sizeof(float) : {
405 *(
double*)
__bind->valuePtr = (
double) * (
float*)_val;
406 break;
407 }
408 case sizeof(double) : {
409 *(
double*)
__bind->valuePtr = *(
double*)_val;
410 break;
411 }
412 default: {
414 return false;
415 }
416 }
417 __bind->valueType = SQL_C_DOUBLE;
418 __bind->lenORind =
sizeof(double);
419 break;
420 }
422 if (_size == sizeof(SQL::Date)) {
423 const SQL::Date* p = (const SQL::Date*)_val;
424 DATE_STRUCT* date = (DATE_STRUCT*)
__bind->valuePtr;
425 date->year = p->year;
426 date->month = p->month;
427 date->day = p->day;
428 __bind->valueType = SQL_C_TYPE_DATE;
429 __bind->lenORind =
sizeof(DATE_STRUCT);
430 }
431 else {
433 return false;
434 }
435 break;
436 }
438 if (_size == sizeof(SQL::Time)) {
439 const SQL::Time* p = (const SQL::Time*)_val;
440 if (p->
frac &&
__bind->type == SQL_SS_TIME2) {
441 SQL_SS_TIME2_STRUCT* time =
442 (SQL_SS_TIME2_STRUCT*)
__bind->valuePtr;
443 time->hour = p->
hour;
444 time->minute = p->
min;
445 time->second = p->
sec;
446 time->fraction = p->
frac;
447 __bind->valueType = SQL_C_SS_TIME2;
448 __bind->lenORind =
sizeof(SQL_SS_TIME2_STRUCT);
449 }
450 else {
451 TIME_STRUCT* time = (TIME_STRUCT*)
__bind->valuePtr;
452 time->hour = p->
hour;
453 time->minute = p->
min;
454 time->second = p->
sec;
455 __bind->valueType = SQL_C_TYPE_TIME;
456 __bind->lenORind =
sizeof(TIME_STRUCT);
457 }
458 }
459 else {
461 return false;
462 }
463 break;
464 }
466 if (_size == sizeof(SQL::TimeStamp)) {
467 const SQL::TimeStamp* p = (const SQL::TimeStamp*)_val;
469 SQL_SS_TIMESTAMPOFFSET_STRUCT* ts =
470 (SQL_SS_TIMESTAMPOFFSET_STRUCT*)
__bind->valuePtr;
472 ts->month = p->
month;
477 ts->fraction = p->
frac;
478 ts->timezone_hour = p->
tzoff / 60;
479 ts->timezone_minute = p->
tzoff % 60;
480 __bind->valueType = SQL_C_SS_TIMESTAMPOFFSET;
481 __bind->lenORind =
sizeof(SQL_SS_TIMESTAMPOFFSET_STRUCT);
482 }
483 else {
484 TIMESTAMP_STRUCT* ts =
485 (TIMESTAMP_STRUCT*)
__bind->valuePtr;
487 ts->month = p->
month;
492 ts->fraction = p->
frac;
493 __bind->valueType = SQL_C_TYPE_TIMESTAMP;
494 __bind->lenORind =
sizeof(TIMESTAMP_STRUCT);
495 }
496 }
497 else {
499 return false;
500 }
501 break;
502 }
504 if (_size == sizeof(SQL::Interval)) {
505#define __ABS(n) (n < 0) ? -n : n
506 const SQL::Interval* p = (const SQL::Interval*)_val;
507 SQL_INTERVAL_STRUCT* iv =
508 (SQL_INTERVAL_STRUCT*)
__bind->valuePtr;
510 iv->interval_type = SQL_IS_YEAR_TO_MONTH;
511 iv->interval_sign = p->years < 0 || p->months < 0 ? 1 : 0;
512 SQL_YEAR_MONTH_STRUCT& ym = iv->intval.year_month;
513 ym.year =
__ABS(p->years);
514 ym.month =
__ABS(p->months);
515 __bind->valueType = SQL_C_INTERVAL_YEAR_TO_MONTH;
516 __bind->lenORind =
sizeof(SQL_INTERVAL_STRUCT);
517 }
518 else {
519 iv->interval_type = SQL_IS_DAY_TO_SECOND;
520 iv->interval_sign = p->days
521 || p->hours < 0 || p->mins || p->secs || p->fracs < 0 ? 1 : 0;
522 SQL_DAY_SECOND_STRUCT& ds = iv->intval.day_second;
523 ds.day =
__ABS(p->days);
524 ds.hour =
__ABS(p->hours);
525 ds.minute =
__ABS(p->mins);
526 ds.second =
__ABS(p->secs);
527 ds.fraction =
__ABS(p->fracs);
528 __bind->valueType = SQL_C_INTERVAL_DAY_TO_SECOND;
529 __bind->lenORind =
sizeof(SQL_INTERVAL_STRUCT);
530 }
531#undef __ABS
532 }
533 else {
535 return false;
536 }
537 break;
538 }
542 if (
__bind->size && _size != (
size_t)-1) {
543 size_t size;
545 case SQL_WCHAR:
546 case SQL_WVARCHAR:
547 case SQL_WLONGVARCHAR:
549 break;
550 default:
552 }
553 if (size < _size) {
555 return false;
556 }
557 }
558 switch (_sqlType) {
562 __bind->valueType = SQL_C_CHAR;
563 break;
564 }
568 __bind->valueType = SQL_C_BINARY;
569 break;
570 }
571 default: {
574 return false;
575 }
576 }
577
578
579
580 break;
581 }
582 default: {
584 return false;
585 }
586 }
587
588 __val = _val;
589 __valSize = _size;
590 __valType = _valType;
592 return true;
593}
__DCL_BEGIN_NAMESPACE union __PARAM_BUFFER_MINIMAL PARAM_BUFFER_MINIMAL
#define __DCL_ASSERT(expr)
#define __SET_ERROR(_errorCode)
bool setInteger(const void *_val, size_t _size)
bool setUInteger(const void *_val, size_t _size)