public String min(Collection<String> values) { String min = null; for (String v : values) { if (min == null || compare(min, v) > 0) min = v; } return min; }
@Override public int compare(String o1, String o2) { // consider null if (o1 == o2) return 0; if (o1 == null) return -1; if (o2 == null) return 1; return compareNonNull(o1, o2); }
private static void findMinMax(Set<Array<String>> satisfyingHostRecords, TblColRef[] hostCols, String[] min, String[] max) { RowKeyColumnOrder[] orders = new RowKeyColumnOrder[hostCols.length]; for (int i = 0; i < hostCols.length; i++) { orders[i] = RowKeyColumnOrder.getInstance(hostCols[i].getType()); } for (Array<String> rec : satisfyingHostRecords) { String[] row = rec.data; for (int i = 0; i < row.length; i++) { min[i] = orders[i].min(min[i], row[i]); max[i] = orders[i].max(max[i], row[i]); } } }
void copy(TblColRef column, String beginValue, String endValue, Set<String> equalValues) { this.column = column; this.order = RowKeyColumnOrder.getInstance(column.getType()); this.beginValue = beginValue; this.endValue = endValue; this.equalValues = equalValues; }
public void andMerge(ColumnValueRange another) { assert this.column.equals(another.column); if (another.satisfyAll()) { return; } if (this.satisfyAll()) { copy(another.column, another.beginValue, another.endValue, another.equalValues); return; } if (this.equalValues != null && another.equalValues != null) { this.equalValues.retainAll(another.equalValues); refreshBeginEndFromEquals(); return; } if (this.equalValues != null) { this.equalValues = filter(this.equalValues, another.beginValue, another.endValue); refreshBeginEndFromEquals(); return; } if (another.equalValues != null) { this.equalValues = filter(another.equalValues, this.beginValue, this.endValue); refreshBeginEndFromEquals(); return; } this.beginValue = order.max(this.beginValue, another.beginValue); this.endValue = order.min(this.endValue, another.endValue); }
public String min(String v1, String v2) { if (v1 == null) return v2; else if (v2 == null) return v1; else return compare(v1, v2) <= 0 ? v1 : v2; }
public ColumnValueRange(TblColRef column, Collection<String> values, FilterOperatorEnum op) { this.column = column; this.order = RowKeyColumnOrder.getInstance(column.getType()); switch (op) { case EQ: case IN: equalValues = new HashSet<String>(values); refreshBeginEndFromEquals(); break; case LT: case LTE: endValue = order.max(values); break; case GT: case GTE: beginValue = order.min(values); break; case NEQ: case NOTIN: case ISNULL: // TODO ISNULL worth pass down as a special equal value case ISNOTNULL: // let Optiq filter it! break; default: throw new UnsupportedOperationException(op.name()); } }
@Override public int compare(String o1, String o2) { // consider null if (o1 == o2) return 0; if (o1 == null) return -1; if (o2 == null) return 1; return compareNonNull(o1, o2); }
public String max(Collection<String> values) { String max = null; for (String v : values) { if (max == null || compare(max, v) < 0) max = v; } return max; }
public String max(String v1, String v2) { if (v1 == null) return v2; else if (v2 == null) return v1; else return compare(v1, v2) >= 0 ? v1 : v2; }
public boolean satisfyNone() { if (equalValues != null) { return equalValues.isEmpty(); } else if (beginValue != null && endValue != null) { return order.compare(beginValue, endValue) > 0; } else { return false; } }
public String min(String v1, String v2) { if (v1 == null) return v2; else if (v2 == null) return v1; else return compare(v1, v2) <= 0 ? v1 : v2; }
public String max(Collection<String> values) { String max = null; for (String v : values) { if (max == null || compare(max, v) < 0) max = v; } return max; }
public String max(String v1, String v2) { if (v1 == null) return v2; else if (v2 == null) return v1; else return compare(v1, v2) >= 0 ? v1 : v2; }
public String min(Collection<String> values) { String min = null; for (String v : values) { if (min == null || compare(min, v) > 0) min = v; } return min; }