public List mergeQuerys()

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;
    }