/** * Check if two values are equal with the current comparison mode. * * @param a the first value * @param b the second value * @return true if both objects are equal */ public boolean areEqual(Value a, Value b) { // can not use equals because ValueDecimal 0.0 is not equal to 0.00. return a.compareTo(b, compareMode) == 0; }
@Override public int compare(Value o1, Value o2) { return o1.compareTo(o2, mode); } });
/** * Compare two values with the current comparison mode. The values may not * be of the same type. * * @param a the first value * @param b the second value * @return 0 if both values are equal, -1 if the first value is smaller, and * 1 otherwise */ public int compare(Value a, Value b) { return a.compareTo(b, compareMode); }
@Override protected int compareSecure(Value o, CompareMode mode) { ValueArray v = (ValueArray) o; if (values == v.values) { return 0; } int l = values.length; int ol = v.values.length; int len = Math.min(l, ol); for (int i = 0; i < len; i++) { Value v1 = values[i]; Value v2 = v.values[i]; int comp = v1.compareTo(v2, mode); if (comp != 0) { return comp; } } return l > ol ? 1 : l == ol ? 0 : -1; }
@Override public int compare(ValueArray v1, ValueArray v2) { Value a1 = v1.getList()[0]; Value a2 = v2.getList()[0]; return a1.compareTo(a2, compareMode); } });
private void patchCurrentRow(Value[] row) { boolean changed = false; Value[] current = result.currentRow(); CompareMode mode = conn.getCompareMode(); for (int i = 0; i < row.length; i++) { if (row[i].compareTo(current[i], mode) != 0) { changed = true; break; } } if (patchedRows == null) { patchedRows = New.hashMap(); } Integer rowId = result.getRowId(); if (!changed) { patchedRows.remove(rowId); } else { patchedRows.put(rowId, row); } }
private Value getMax(Value a, Value b, boolean bigger) { if (a == null) { return b; } else if (b == null) { return a; } if (session.getDatabase().getSettings().optimizeIsNull) { // IS NULL must be checked later if (a == ValueNull.INSTANCE) { return b; } else if (b == ValueNull.INSTANCE) { return a; } } int comp = a.compareTo(b, table.getDatabase().getCompareMode()); if (comp == 0) { return a; } if (a == ValueNull.INSTANCE || b == ValueNull.INSTANCE) { if (session.getDatabase().getSettings().optimizeIsNull) { // column IS NULL AND column <op> <not null> is always false return null; } } if (!bigger) { comp = -comp; } return comp > 0 ? a : b; }
protected List<Value> enumRange(Value firstV, Value lastV) { if (isNull(firstV) || isNull(lastV)) { return null; } if (firstV.getType() != lastV.getType()) { return null; } int type = firstV.getType(); switch (type) { case Value.BYTE: case Value.INT: case Value.LONG: case Value.SHORT: if (lastV.subtract(firstV).getLong() > 200) { return null; } List<Value> enumValues = New.arrayList(10); Value enumValue = firstV; CompareMode compareMode = CompareMode.getInstance(null, 0); while (enumValue.compareTo(lastV, compareMode) <= 0) { enumValues.add(enumValue); Value increase = ValueLong.get(1).convertTo(enumValue.getType()); enumValue = enumValue.add(increase); } return enumValues; default: return null; } }