in tablestore/src/main/java/com/alicloud/openservices/tablestore/ecosystem/TablestoreSplit.java [870:925]
public List<Query> mergeQuerys(List<Query> origQuerys) {
List<Query> remainQuerys = new ArrayList<Query>();
Map<String, RangeQuery> mergedRangeQuerys = new HashMap<String, RangeQuery>(origQuerys.size());
for (Query query : origQuerys) {
if (query.getQueryType() == QueryType.QueryType_RangeQuery) {
RangeQuery rangeQuery = (RangeQuery) query;
RangeQuery mergedRangeQuery = mergedRangeQuerys.get(rangeQuery.getFieldName());
if (mergedRangeQuery != null) {
if (rangeQuery.getFrom() != null) {
if (mergedRangeQuery.getFrom() == null) {
mergedRangeQuery.setFrom(rangeQuery.getFrom());
mergedRangeQuery.setIncludeLower(rangeQuery.isIncludeLower());
} else if (rangeQuery.getFrom().compareTo(mergedRangeQuery.getFrom()) > 0) {
mergedRangeQuery.setFrom(rangeQuery.getFrom());
mergedRangeQuery.setIncludeLower(rangeQuery.isIncludeLower());
} else if (rangeQuery.getFrom().compareTo(mergedRangeQuery.getFrom()) == 0) {
// a >= 5 AND a > 5 => a > 5
if (!rangeQuery.isIncludeLower() || !mergedRangeQuery.isIncludeLower()) {
mergedRangeQuery.setIncludeLower(false);
}
}
}
if (rangeQuery.getTo() != null) {
if (mergedRangeQuery.getTo() == null) {
mergedRangeQuery.setTo(rangeQuery.getTo());
mergedRangeQuery.setIncludeUpper(rangeQuery.isIncludeUpper());
} else if (rangeQuery.getTo().compareTo(mergedRangeQuery.getTo()) < 0) {
mergedRangeQuery.setTo(rangeQuery.getTo());
mergedRangeQuery.setIncludeUpper(rangeQuery.isIncludeUpper());
} else if (rangeQuery.getTo().compareTo(mergedRangeQuery.getTo()) == 0) {
// a <= 5 AND a < 5 => a <= 5
if (!rangeQuery.isIncludeUpper() || !mergedRangeQuery.isIncludeUpper()) {
mergedRangeQuery.setIncludeUpper(false);
}
}
// unnecessary
if (mergedRangeQuery.getTo() == null ||
(mergedRangeQuery.getTo() != null && rangeQuery.getTo().compareTo(mergedRangeQuery.getTo()) <= 0)) {
mergedRangeQuery.setTo(rangeQuery.getTo());
}
}
} else {
mergedRangeQuerys.put(rangeQuery.getFieldName(), rangeQuery);
}
} else {
remainQuerys.add(query);
}
}
List<Query> retQuerys = new ArrayList<Query>();
retQuerys.addAll(mergedRangeQuerys.values());
retQuerys.addAll(remainQuerys);
return retQuerys;
}