private void refreshBeginEndFromEquals() { this.beginValue = order.min(this.equalValues); this.endValue = order.max(this.equalValues); }
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]); } } }
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()); } }
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); }