/** Returns whether a value of {@code type2} can be assigned to a variable * of {@code type1}. * * <p>For example: * <ul> * <li>{@code canAssignFrom(BIGINT, TINYINT)} returns {@code true}</li> * <li>{@code canAssignFrom(TINYINT, BIGINT)} returns {@code false}</li> * <li>{@code canAssignFrom(BIGINT, VARCHAR)} returns {@code false}</li> * </ul> */ private static boolean canAssignFrom(RelDataType type1, RelDataType type2) { final SqlTypeName name1 = type1.getSqlTypeName(); final SqlTypeName name2 = type2.getSqlTypeName(); if (name1.getFamily() == name2.getFamily()) { switch (name1.getFamily()) { case NUMERIC: return name1.compareTo(name2) >= 0; default: return true; } } return false; }
/** Returns whether a value of {@code type2} can be assigned to a variable * of {@code type1}. * * <p>For example: * <ul> * <li>{@code canAssignFrom(BIGINT, TINYINT)} returns {@code true}</li> * <li>{@code canAssignFrom(TINYINT, BIGINT)} returns {@code false}</li> * <li>{@code canAssignFrom(BIGINT, VARCHAR)} returns {@code false}</li> * </ul> */ private static boolean canAssignFrom(RelDataType type1, RelDataType type2) { final SqlTypeName name1 = type1.getSqlTypeName(); final SqlTypeName name2 = type2.getSqlTypeName(); if (name1.getFamily() == name2.getFamily()) { switch (name1.getFamily()) { case NUMERIC: return name1.compareTo(name2) >= 0; default: return true; } } return false; }