public String max(Collection<String> values) { String max = null; for (String v : values) { max = max(max, v); } return max; }
private static void findMinMax(Set<Array<String>> satisfyingHostRecords, TblColRef[] hostCols, String[] min, String[] max) { DataTypeOrder[] orders = new DataTypeOrder[hostCols.length]; for (int i = 0; i < hostCols.length; i++) { orders[i] = hostCols[i].getType().getOrder(); } 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]); } } }
DataTypeOrder order = model.findColumn(colId).getType().getOrder(); String newMin = order.min(r1.getMin(), r2.getMin()); String newMax = order.max(r1.getMax(), r2.getMax()); newR = new DimensionRangeInfo(newMin, newMax);
dimensionRangeInfoMap.put(i, old); } else { old.setMax(type.getOrder().max(old.getMax(), fieldValue)); old.setMin(type.getOrder().min(old.getMin(), fieldValue));
String maxValue = order.max(maxValues); logger.info("updateSegment step. {} minValue:" + minValue + " maxValue:" + maxValue, dimColRef.getName());
dimensionRangeInfoMap.put(i, old); } else { old.setMax(type.getOrder().max(old.getMax(), fieldValue)); old.setMin(type.getOrder().min(old.getMin(), fieldValue));
@Test public void testDataTypeOrder() { DataType intType = DataType.getType("integer"); DataTypeOrder dataTypeOrder = intType.getOrder(); Set<String> integers = Sets.newHashSet("100000", "2", "1000", "100", "77", "10", "9", "2000000", "-10000", "0"); Assert.assertEquals("2000000", dataTypeOrder.max(integers)); Assert.assertEquals("-10000", dataTypeOrder.min(integers)); DataType doubleType = DataType.getType("double"); dataTypeOrder = doubleType.getOrder(); Set<String> doubels = Sets.newHashSet("1.1", "-299.5", "100000", "1.000", "4.000000001", "0.00", "-1000000.231231", "8000000", "10", "10.00"); Assert.assertEquals("8000000", dataTypeOrder.max(doubels)); Assert.assertEquals("-1000000.231231", dataTypeOrder.min(doubels)); DataType datetimeType = DataType.getType("date"); dataTypeOrder = datetimeType.getOrder(); Set<String> datetimes = Sets.newHashSet("2010-01-02", "2888-08-09", "2018-05-26", "1527512082000", "2010-02-03 23:59:59", "2000-12-12 12:00:00", "1970-01-19 00:18:32", "1998-12-02", "2018-05-28 10:00:00.255", "1995-09-20 20:00:00.220"); Assert.assertEquals("2888-08-09", dataTypeOrder.max(datetimes)); Assert.assertEquals("1970-01-19 00:18:32", dataTypeOrder.min(datetimes)); DataType stringType = new DataType("varchar", 256, 10); dataTypeOrder = stringType.getOrder(); Set<String> strings = Sets.newHashSet(null, "", "中国", "China No.1", "神兽麒麟", "Rocket", "Apache Kylin", "google", "NULL", "empty"); Assert.assertEquals("神兽麒麟", dataTypeOrder.max(strings)); Assert.assertEquals("", dataTypeOrder.min(strings)); } }
case IN: String filterMin = order.min((Set<String>) comp.getValues()); String filterMax = order.max((Set<String>) comp.getValues()); return order.compare(filterMin, maxVal) <= 0 && order.compare(minVal, filterMax) <= 0; case LT:
public String max(Collection<String> values) { String max = null; for (String v : values) { max = max(max, v); } return max; }
private static void findMinMax(Set<Array<String>> satisfyingHostRecords, TblColRef[] hostCols, String[] min, String[] max) { DataTypeOrder[] orders = new DataTypeOrder[hostCols.length]; for (int i = 0; i < hostCols.length; i++) { orders[i] = hostCols[i].getType().getOrder(); } 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]); } } }
DataTypeOrder order = model.findColumn(colId).getType().getOrder(); String newMin = order.min(r1.getMin(), r2.getMin()); String newMax = order.max(r1.getMax(), r2.getMax()); newR = new DimensionRangeInfo(newMin, newMax);
dimensionRangeInfoMap.put(i, old); } else { old.setMax(type.getOrder().max(old.getMax(), fieldValue)); old.setMin(type.getOrder().min(old.getMin(), fieldValue));
String maxValue = order.max(maxValues); logger.info("updateSegment step. {} minValue:" + minValue + " maxValue:" + maxValue, dimColRef.getName());
dimensionRangeInfoMap.put(i, old); } else { old.setMax(type.getOrder().max(old.getMax(), fieldValue)); old.setMin(type.getOrder().min(old.getMin(), fieldValue));
case IN: String filterMin = order.min((Set<String>) comp.getValues()); String filterMax = order.max((Set<String>) comp.getValues()); return order.compare(filterMin, maxVal) <= 0 && order.compare(minVal, filterMax) <= 0; case LT: