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; }
final RelDataType bigint = typeFactory.createSqlType(SqlTypeName.BIGINT); final RelDataType bigintNullable = typeFactory.createTypeWithNullability(bigint, true); final RelDataType bigintNotNull = typeFactory.createTypeWithNullability(bigint, false); final RelDataType date = typeFactory.createSqlType(SqlTypeName.DATE); final RelDataType dateNotNull = typeFactory.createTypeWithNullability(date, false); assertThat(SqlTypeUtil.canAssignFrom(bigintNullable, bigintNotNull), is(true)); typeFactory.createArrayType(bigintNullable, -1); final RelDataType bigintArrayNullable = typeFactory.createTypeWithNullability(bigintNullableArray, true); final RelDataType bigintNotNullArray = new ArraySqlType(bigintNotNull, false);
final RelDataType bigint = typeFactory.createSqlType(SqlTypeName.BIGINT); final RelDataType bigintNullable = typeFactory.createTypeWithNullability(bigint, true); final RelDataType bigintNotNull = typeFactory.createTypeWithNullability(bigint, false); final RelDataType date = typeFactory.createSqlType(SqlTypeName.DATE); final RelDataType dateNotNull = typeFactory.createTypeWithNullability(date, false); assertThat(SqlTypeUtil.canAssignFrom(bigintNullable, bigintNotNull), is(true)); typeFactory.createArrayType(bigintNullable, -1); final RelDataType bigintArrayNullable = typeFactory.createTypeWithNullability(bigintNullableArray, true); final RelDataType bigintNotNullArray = new ArraySqlType(bigintNotNull, false);
return createTypeWithNullability(createSqlType(SqlTypeName.ANY), nullCount > 0 || nullableCount > 0); ? createSqlType(typeName, type.getPrecision()) : createSqlType(typeName); type = createTypeWithNullability(type, originalType.isNullable()); if (SqlTypeUtil.isDatetime(type1)) { resultType = type1; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); if (SqlTypeUtil.isDatetime(type1)) { resultType = type1; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); || SqlTypeUtil.isIntType(type1)) { resultType = type; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); resultType = createTypeWithNullability(resultType, true);
return createTypeWithNullability(createSqlType(SqlTypeName.ANY), nullCount > 0 || nullableCount > 0); ? createSqlType(typeName, type.getPrecision()) : createSqlType(typeName); type = createTypeWithNullability(type, originalType.isNullable()); if (SqlTypeUtil.isDatetime(type1)) { resultType = type1; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); if (SqlTypeUtil.isDatetime(type1)) { resultType = type1; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); || SqlTypeUtil.isIntType(type1)) { resultType = type; return createTypeWithNullability(resultType, nullCount > 0 || nullableCount > 0); resultType = createTypeWithNullability(resultType, true);