bool CharType::isSafelyCoercibleFrom(const Type &original_type) const { QUICKSTEP_NULL_COERCIBILITY_CHECK(); switch (original_type.getTypeID()) { case kChar: return original_type.maximumByteLength() <= length_; case kVarChar: return original_type.maximumByteLength() - 1 <= length_; default: return false; } }
bool LongType::isSafelyCoercibleFrom(const Type &original_type) const { QUICKSTEP_NULL_COERCIBILITY_CHECK(); return QUICKSTEP_EQUALS_ANY_CONSTANT(original_type.getTypeID(), kInt, kLong); }
bool IntType::isSafelyCoercibleFrom(const Type &original_type) const { QUICKSTEP_NULL_COERCIBILITY_CHECK(); return original_type.getTypeID() == kInt; }
bool isCoercibleFrom(const Type &original_type) const override { QUICKSTEP_NULL_COERCIBILITY_CHECK(); return (original_type.getSuperTypeID() == kNumeric); }