581{
582 switch(__sqlvar->sqltype) {
583 case ECPGt_bool: {
584 switch (*_size) {
585 case sizeof(uint8_t) : {
586 *(uint8_t*)_buf = (uint8_t) * (uint8_t*)(__sqlvar->sqldata);
587 break;
588 }
589 case sizeof(uint16_t) : {
590 *(uint16_t*)_buf = (uint16_t) * (uint8_t*)(__sqlvar->sqldata);
591 break;
592 }
593 case sizeof(uint32_t) : {
594 *(uint32_t*)_buf = (uint32_t) * (uint8_t*)(__sqlvar->sqldata);
595 break;
596 }
597 case sizeof(uint64_t) : {
598 *(uint64_t*)_buf = (uint64_t) * (uint8_t*)(__sqlvar->sqldata);
599 break;
600 }
601 default: {
602 *_size = sizeof(uint8_t);
604 return false;
605 }
606 }
607 break;
608 }
609 case ECPGt_short: {
610 switch (*_size) {
611 case sizeof(uint16_t) : {
612 *(uint16_t*)_buf = (uint16_t) * (int16_t*)(__sqlvar->sqldata);
613 break;
614 }
615 case sizeof(uint32_t) : {
616 *(uint32_t*)_buf = (uint32_t) * (int16_t*)(__sqlvar->sqldata);
617 break;
618 }
619 case sizeof(uint64_t) : {
620 *(uint64_t*)_buf = (uint64_t) * (int16_t*)(__sqlvar->sqldata);
621 break;
622 }
623 default: {
624 *_size = sizeof(uint16_t);
626 return false;
627 }
628 }
629 break;
630 }
631 case ECPGt_int:
632 case ECPGt_long: {
633 switch (*_size) {
634 case sizeof(uint32_t) : {
635 *(uint32_t*)_buf = (uint32_t) * (int32_t*)(__sqlvar->sqldata);
636 break;
637 }
638 case sizeof(int64_t) : {
639 *(uint64_t*)_buf = (uint64_t) * (int32_t*)(__sqlvar->sqldata);
640 break;
641 }
642 default: {
643 *_size = sizeof(int32_t);
645 return false;
646 }
647 }
648 break;
649 }
650 case ECPGt_long_long: {
651 if (*_size == sizeof(int64_t)) {
652 *(uint64_t*)_buf = (uint64_t) * (int64_t*)(__sqlvar->sqldata);
653 }
654 else {
655 *_size = sizeof(int64_t);
657 return false;
658 }
659 break;
660 }
661 case ECPGt_unsigned_long_long: {
662 if (*_size == sizeof(int64_t)) {
663 *(uint64_t*)_buf = (uint64_t) * (uint64_t*)(__sqlvar->sqldata);
664 }
665 else {
666 *_size = sizeof(int64_t);
668 return false;
669 }
670 break;
671 }
672 case ECPGt_numeric:
673 case ECPGt_decimal: {
674 if (*_size <= sizeof(uint32_t)) {
675 long n;
676 if (__sqlvar->sqltype == ECPGt_numeric) {
677 if (PGTYPESnumeric_to_long(
678 (numeric*)(__sqlvar->sqldata), &n) != 0) {
680 return false;
681 }
682 }
683 else {
684 numeric nu;
685 if (PGTYPESnumeric_from_decimal(
686 (decimal*)(__sqlvar->sqldata), &nu) != 0) {
688 return false;
689 }
690 if (PGTYPESnumeric_to_long(&nu, &n) != 0) {
692 return false;
693 }
694 }
695
696 switch (*_size) {
697 case sizeof(uint8_t) : {
699 {
701 return false;
702 }
703 *(uint8_t*)_buf = (uint8_t)n;
704 break;
705 }
706 case sizeof(uint16_t) : {
708 {
710 return false;
711 }
712 *(uint16_t*)_buf = (uint16_t)n;
713 break;
714 }
715 case sizeof(uint32_t) : {
716 *(uint32_t*)_buf = (uint32_t)n;
717 break;
718 }
719 default: {
720 *_size = sizeof(uint32_t);
722 return false;
723 }
724 }
725 }
726 else if (*_size == sizeof(uint64_t)) {
727 numeric* p = (numeric*)(__sqlvar->sqldata);
728 numeric nu;
729 if (__sqlvar->sqltype == ECPGt_decimal) {
730 if (PGTYPESnumeric_from_decimal(
731 (decimal*)(__sqlvar->sqldata), &nu) != 0) {
733 return false;
734 }
735 p = ν
736 }
737 char* s = PGTYPESnumeric_to_asc(p, 0);
738 char* endptr;
739 unsigned long long n = strtoull(s, &endptr, 10);
740 PGTYPESchar_free(s);
741 if (n == ULLONG_MAX) {
743 return false;
744 }
745 *(uint64_t*)_buf = n;
746 }
747 else {
748 *_size = sizeof(int64_t);
750 return false;
751 }
752 break;
753 }
754 default :
756 }
757 return true;
758}