public static ValueEnum get(final String[] enumerators, String value) { check(enumerators, ValueString.get(value)); final String cleanLabel = sanitize(value); for (int i = 0; i < enumerators.length; i++) { if (cleanLabel.equals(sanitize(enumerators[i]))) { return new ValueEnum(enumerators, i); } } throw DbException.get(ErrorCode.GENERAL_ERROR_1, "Unexpected error"); }
private String[] getEnumerators(Value left, Value right) { if (left.getType() == Value.ENUM) { return ((ValueEnum) left).getEnumerators(); } else if (right.getType() == Value.ENUM) { return ((ValueEnum) right).getEnumerators(); } else { return new String[0]; } }
@Override protected int compareSecure(final Value v, final CompareMode mode) { return Integer.compare(getInt(), v.getInt()); }
/** * Create an ENUM value from the provided enumerators * and value. * * @param enumerators the enumerators * @param value a value * @return the ENUM value */ public static ValueEnum get(final String[] enumerators, int value) { check(enumerators, ValueInt.get(value)); return new ValueEnum(enumerators, value); }
/** * Check for any violations, such as empty * values, duplicate values. * * @param enumerators the enumerators */ public static void check(final String[] enumerators) { switch (validate(enumerators)) { case VALID: return; case EMPTY: throw DbException.get(ErrorCode.ENUM_EMPTY); case DUPLICATE: throw DbException.get(ErrorCode.ENUM_DUPLICATE, toString(enumerators)); default: throw DbException.get(ErrorCode.INVALID_VALUE_2, toString(enumerators)); } }
private static Validation validate(final String[] enumerators, final Value value) { final Validation validation = validate(enumerators); if (!validation.equals(Validation.VALID)) { return validation; } if (DataType.isStringType(value.getType())) { final String cleanLabel = sanitize(value.getString()); for (String enumerator : enumerators) { if (cleanLabel.equals(sanitize(enumerator))) { return Validation.VALID; } } return Validation.INVALID; } else { final int ordinal = value.getInt(); if (ordinal < 0 || ordinal >= enumerators.length) { return Validation.INVALID; } return Validation.VALID; } } }
private static String[] sanitize(final String[] enumerators) { if (enumerators == null || enumerators.length == 0) { return null; } final String[] clean = new String[enumerators.length]; for (int i = 0; i < enumerators.length; i++) { clean[i] = sanitize(enumerators[i]); } return clean; }
/** * Evaluates whether a valid ENUM can be constructed * from the provided enumerators and value. * * @param enumerators the enumerators * @param value the value * @return whether a valid ENUM can be constructed from the provided values */ public static boolean isValid(final String enumerators[], final Value value) { return validate(enumerators, value).equals(Validation.VALID); }
@Override public Value getValue(Session session) { Select select = columnResolver.getSelect(); if (select != null) { HashMap<Expression, Object> values = select.getCurrentGroup(); if (values != null) { Value v = (Value) values.get(this); if (v != null) { return v; } } } Value value = columnResolver.getValue(column); if (value == null) { if (select == null) { throw DbException.get(ErrorCode.NULL_NOT_ALLOWED, getSQL()); } else { throw DbException.get(ErrorCode.MUST_GROUP_BY_COLUMN_1, getSQL()); } } if (column.getEnumerators() != null && value != ValueNull.INSTANCE) { return ValueEnum.get(column.getEnumerators(), value.getInt()); } return value; }
ValueEnum.check(enumerators); } catch (DbException e) { throw e.addSQL(original);
private static Validation validate(final String[] enumerators) { final String[] cleaned = sanitize(enumerators); if (cleaned == null || cleaned.length == 0) { return Validation.EMPTY; } for (int i = 0; i < cleaned.length; i++) { if (cleaned[i] == null || cleaned[i].equals("")) { return Validation.EMPTY; } if (i < cleaned.length - 1) { for (int j = i + 1; j < cleaned.length; j++) { if (cleaned[i].equals(cleaned[j])) { return Validation.DUPLICATE; } } } } return Validation.VALID; }