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