private RelDataType leastRestrictiveByCast(List<RelDataType> types) { RelDataType resultType = types.get(0); boolean anyNullable = resultType.isNullable(); for (int i = 1; i < types.size(); i++) { RelDataType type = types.get(i); if (type.getSqlTypeName() == SqlTypeName.NULL) { anyNullable = true; continue; } if (type.isNullable()) { anyNullable = true; } if (SqlTypeUtil.canCastFrom(type, resultType, false)) { resultType = type; } else { if (!SqlTypeUtil.canCastFrom(resultType, type, false)) { return null; } } } if (anyNullable) { return createTypeWithNullability(resultType, true); } else { return resultType; } }
private RelDataType leastRestrictiveByCast(List<RelDataType> types) { RelDataType resultType = types.get(0); boolean anyNullable = resultType.isNullable(); for (int i = 1; i < types.size(); i++) { RelDataType type = types.get(i); if (type.getSqlTypeName() == SqlTypeName.NULL) { anyNullable = true; continue; } if (type.isNullable()) { anyNullable = true; } if (SqlTypeUtil.canCastFrom(type, resultType, false)) { resultType = type; } else { if (!SqlTypeUtil.canCastFrom(resultType, type, false)) { return null; } } } if (anyNullable) { return createTypeWithNullability(resultType, true); } else { return resultType; } }
final RelDataType paramType = p.left; if (argType != null && !SqlTypeUtil.canCastFrom(paramType, argType, false)) { return false;
final RelDataType paramType = p.left; if (argType != null && !SqlTypeUtil.canCastFrom(paramType, argType, false)) { return false;
private boolean canCastFrom(SqlCallBinding callBinding, boolean throwOnFailure, RelDataType inType, RelDataType outType) { if (SqlTypeUtil.canCastFrom(outType, inType, true)) { return true; } if (throwOnFailure) { throw callBinding.newError( RESOURCE.cannotCastValue(inType.toString(), outType.toString())); } return false; } }
return canCastFrom( toType.getFieldList().get(0).getType(), fromType, coerce); } else if (fromTypeName == SqlTypeName.DISTINCT) { return canCastFrom( toType, fromType.getFieldList().get(0).getType(), coerce); } else if (toTypeName == SqlTypeName.ROW) { RelDataTypeField toField = toType.getFieldList().get(i); RelDataTypeField fromField = fromType.getFieldList().get(i); if (!canCastFrom( toField.getType(), fromField.getType(), return false; return canCastFrom( toType.getComponentType(), fromType.getComponentType(), return false; return canCastFrom(c1, c2, coerce);
return canCastFrom( toType.getFieldList().get(0).getType(), fromType, coerce); } else if (fromTypeName == SqlTypeName.DISTINCT) { return canCastFrom( toType, fromType.getFieldList().get(0).getType(), coerce); } else if (toTypeName == SqlTypeName.ROW) { RelDataTypeField toField = toType.getFieldList().get(i); RelDataTypeField fromField = fromType.getFieldList().get(i); if (!canCastFrom( toField.getType(), fromField.getType(), return false; return canCastFrom( toType.getComponentType(), fromType.getComponentType(), return false; return canCastFrom(c1, c2, coerce);
return canCastFrom( toType.getFieldList().get(0).getType(), fromType, coerce); } else if (fromTypeName == SqlTypeName.DISTINCT) { return canCastFrom( toType, fromType.getFieldList().get(0).getType(), coerce); } else if (toTypeName == SqlTypeName.ROW) { RelDataTypeField toField = toType.getFieldList().get(i); RelDataTypeField fromField = fromType.getFieldList().get(i); if (!canCastFrom( toField.getType(), fromField.getType(), return false; return canCastFrom( toType.getComponentType(), fromType.getComponentType(), return false; return canCastFrom(c1, c2, coerce);
RelDataType returnType = callBinding.getValidator().deriveType(callBinding.getScope(), right); if (!SqlTypeUtil.canCastFrom(returnType, validatedNodeType, true)) { if (throwOnFailure) { throw callBinding.newError(
RelDataType returnType = callBinding.getValidator().deriveType(callBinding.getScope(), right); if (!SqlTypeUtil.canCastFrom(returnType, validatedNodeType, true)) { if (throwOnFailure) { throw callBinding.newError(