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; } }
protected RelDataType canonize(RelDataType type) { type = super.canonize(type); if (!(type instanceof ObjectSqlType)) { return type; } ObjectSqlType objectType = (ObjectSqlType) type; if (!objectType.isNullable()) { objectType.setFamily(objectType); } else { objectType.setFamily( (RelDataTypeFamily) createTypeWithNullability( objectType, false)); } return type; } }
protected RelDataType canonize(RelDataType type) { type = super.canonize(type); if (!(type instanceof ObjectSqlType)) { return type; } ObjectSqlType objectType = (ObjectSqlType) type; if (!objectType.isNullable()) { objectType.setFamily(objectType); } else { objectType.setFamily( (RelDataTypeFamily) createTypeWithNullability( objectType, false)); } return type; } }
resultType = createTypeWithNullability(resultType, true);
resultType = createTypeWithNullability(resultType, true);