594{
595 switch(__sqlvar->sqltype) {
596 case ECPGt_bool: {
597 switch (*_size) {
598 case sizeof(uint8_t) : {
599 *(uint8_t*)_pv = (uint8_t) * (uint8_t*)(__sqlvar->sqldata);
600 break;
601 }
602 case sizeof(uint16_t) : {
603 *(uint16_t*)_pv = (uint16_t) * (uint8_t*)(__sqlvar->sqldata);
604 break;
605 }
606 case sizeof(uint32_t) : {
607 *(uint32_t*)_pv = (uint32_t) * (uint8_t*)(__sqlvar->sqldata);
608 break;
609 }
610 case sizeof(uint64_t) : {
611 *(uint64_t*)_pv = (uint64_t) * (uint8_t*)(__sqlvar->sqldata);
612 break;
613 }
614 default: {
615 *_size = sizeof(uint8_t);
617 return false;
618 }
619 }
620 break;
621 }
622 case ECPGt_short: {
623 switch (*_size) {
624 case sizeof(uint16_t) : {
625 *(uint16_t*)_pv = (uint16_t) * (int16_t*)(__sqlvar->sqldata);
626 break;
627 }
628 case sizeof(uint32_t) : {
629 *(uint32_t*)_pv = (uint32_t) * (int16_t*)(__sqlvar->sqldata);
630 break;
631 }
632 case sizeof(uint64_t) : {
633 *(uint64_t*)_pv = (uint64_t) * (int16_t*)(__sqlvar->sqldata);
634 break;
635 }
636 default: {
637 *_size = sizeof(uint16_t);
639 return false;
640 }
641 }
642 break;
643 }
644 case ECPGt_int:
645 case ECPGt_long: {
646 switch (*_size) {
647 case sizeof(uint32_t) : {
648 *(uint32_t*)_pv = (uint32_t) * (int32_t*)(__sqlvar->sqldata);
649 break;
650 }
651 case sizeof(int64_t) : {
652 *(uint64_t*)_pv = (uint64_t) * (int32_t*)(__sqlvar->sqldata);
653 break;
654 }
655 default: {
656 *_size = sizeof(int32_t);
658 return false;
659 }
660 }
661 break;
662 }
663 case ECPGt_long_long: {
664 if (*_size == sizeof(int64_t)) {
665 *(uint64_t*)_pv = (uint64_t) * (int64_t*)(__sqlvar->sqldata);
666 }
667 else {
668 *_size = sizeof(int64_t);
670 return false;
671 }
672 break;
673 }
674 case ECPGt_unsigned_long_long: {
675 if (*_size == sizeof(int64_t)) {
676 *(uint64_t*)_pv = (uint64_t) * (uint64_t*)(__sqlvar->sqldata);
677 }
678 else {
679 *_size = sizeof(int64_t);
681 return false;
682 }
683 break;
684 }
685 case ECPGt_numeric:
686 case ECPGt_decimal: {
687 if (*_size <= sizeof(uint32_t)) {
689 if (__sqlvar->sqltype == ECPGt_numeric) {
690 if (PGTYPESnumeric_to_long(
691 (numeric*)(__sqlvar->sqldata), &
n) != 0) {
693 return false;
694 }
695 }
696 else {
697 numeric nu;
698 if (PGTYPESnumeric_from_decimal(
699 (decimal*)(__sqlvar->sqldata), &nu) != 0) {
701 return false;
702 }
703 if (PGTYPESnumeric_to_long(&nu, &
n) != 0) {
705 return false;
706 }
707 }
708
709 switch (*_size) {
710 case sizeof(uint8_t) : {
712 {
714 return false;
715 }
716 *(uint8_t*)_pv = (uint8_t)
n;
717 break;
718 }
719 case sizeof(uint16_t) : {
721 {
723 return false;
724 }
725 *(uint16_t*)_pv = (uint16_t)
n;
726 break;
727 }
728 case sizeof(uint32_t) : {
729 *(uint32_t*)_pv = (uint32_t)
n;
730 break;
731 }
732 default: {
733 *_size = sizeof(uint32_t);
735 return false;
736 }
737 }
738 }
739 else if (*_size == sizeof(uint64_t)) {
740 numeric* p = (numeric*)(__sqlvar->sqldata);
741 numeric nu;
742 if (__sqlvar->sqltype == ECPGt_decimal) {
743 if (PGTYPESnumeric_from_decimal(
744 (decimal*)(__sqlvar->sqldata), &nu) != 0) {
746 return false;
747 }
748 p = ν
749 }
750 char* s = PGTYPESnumeric_to_asc(p, 0);
751 char* endptr;
752 unsigned long long n = strtoull(s, &endptr, 10);
753 PGTYPESchar_free(s);
754 if (
n == ULLONG_MAX) {
756 return false;
757 }
759 }
760 else {
761 *_size = sizeof(int64_t);
763 return false;
764 }
765 break;
766 }
767 default :
769 }
770 return true;
771}