MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / tryCombineDecimalWithNumeric

Function tryCombineDecimalWithNumeric

src/common/types/types.cpp:1762–1808  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1760}
1761
1762static inline bool tryCombineDecimalWithNumeric(const LogicalType& dec, const LogicalType& nonDec,
1763 LogicalType& result) {
1764 auto precision = DecimalType::getPrecision(dec);
1765 auto scale = DecimalType::getScale(dec);
1766 uint32_t requiredDigits = 0;
1767 // How many digits before the decimal point does result require?
1768 switch (nonDec.getLogicalTypeID()) {
1769 case LogicalTypeID::INT8:
1770 requiredDigits = function::NumericLimits<int8_t>::maxNumDigits();
1771 break;
1772 case LogicalTypeID::UINT8:
1773 requiredDigits = function::NumericLimits<uint8_t>::maxNumDigits();
1774 break;
1775 case LogicalTypeID::INT16:
1776 requiredDigits = function::NumericLimits<int16_t>::maxNumDigits();
1777 break;
1778 case LogicalTypeID::UINT16:
1779 requiredDigits = function::NumericLimits<uint16_t>::maxNumDigits();
1780 break;
1781 case LogicalTypeID::INT32:
1782 requiredDigits = function::NumericLimits<int32_t>::maxNumDigits();
1783 break;
1784 case LogicalTypeID::UINT32:
1785 requiredDigits = function::NumericLimits<uint32_t>::maxNumDigits();
1786 break;
1787 case LogicalTypeID::INT64:
1788 requiredDigits = function::NumericLimits<int64_t>::maxNumDigits();
1789 break;
1790 case LogicalTypeID::UINT64:
1791 requiredDigits = function::NumericLimits<uint64_t>::maxNumDigits();
1792 break;
1793 case LogicalTypeID::INT128:
1794 requiredDigits = function::NumericLimits<int128_t>::maxNumDigits();
1795 break;
1796 case LogicalTypeID::UINT128:
1797 requiredDigits = function::NumericLimits<uint128_t>::maxNumDigits();
1798 break;
1799 default:
1800 requiredDigits = DECIMAL_PRECISION_LIMIT + 1;
1801 }
1802 if (requiredDigits + scale > DECIMAL_PRECISION_LIMIT) {
1803 result = LogicalType::DOUBLE();
1804 return true;
1805 }
1806 result = LogicalType::DECIMAL(std::max(requiredDigits + scale, precision), scale);
1807 return true;
1808}
1809
1810bool LogicalTypeUtils::tryGetMaxLogicalType(const LogicalType& left, const LogicalType& right,
1811 LogicalType& result) {

Callers 1

tryGetMaxLogicalTypeMethod · 0.85

Calls 1

getLogicalTypeIDMethod · 0.80

Tested by

no test coverage detected