@Override public boolean equals(Object obj) { boolean retval = true; if (obj instanceof Field) { Field field = (Field) obj; if (type.equals(field.getType())) { if (this.isNull() && field.isNull()) { retval = true; } else if (this.isNull() ^ field.isNull()) { retval = false; } else if (type.equals(VARBINARY)) { // special case for byte arrays // aren't they so fancy retval = Arrays.equals((byte[]) value, (byte[]) field.getObject()); } else if (type.equals(DATE) || type.equals(TIME) || type.equals(TIMESTAMP)) { retval = value.toString().equals(field.getObject().toString()); } else { if (value instanceof Block) { retval = equals((Block) value, (Block) field.getObject()); } else { retval = value.equals(field.getObject()); } } } } return retval; }