AbstractConditionShardLocator { protected Set<String> locateForCombination(CTX context, OperatorEnum op1, Object value1, OperatorEnum op2, Object value2) { Set<String> range = new HashSet<>(locateShards(createConditionContext(context, op1, value1))); if(isAlreadyAllShards(getAllShards(context), range)) { return range; } range.addAll(locateShards(createConditionContext(context, op2, value2))); return range; }  abstract Set<String> locateForEqual(CTX context); abstract Set<String> locateForNotEqual(CTX ctx); abstract Set<String> locateForGreaterThan(CTX context); abstract Set<String> locateForGreaterThanOrEqual(CTX ctx); abstract Set<String> locateForLessThan(CTX context); abstract Set<String> locateForLessThanOrEqual(CTX ctx); abstract Set<String> locateForBetween(CTX ctx); abstract Set<String> locateForNotBetween(CTX ctx); abstract Set<String> locateForIn(CTX context); abstract Set<String> locateForNotIn(CTX context); abstract Set<String> locateForLike(CTX context); abstract Set<String> locateForNotLike(CTX context); abstract Set<String> locateForIsNull(CTX context); abstract Set<String> locateForIsNotNull(CTX context); Set<String> getAllShards(CTX context); Set<String> locateShards(CTX context);  }
@Test public void testLocateForCombination() { assertEquals(set("2", "3"), test2.locateForCombination(exp(OperatorEnum.EQUAL, "1"), OperatorEnum.EQUAL, "2", OperatorEnum.EQUAL, "3")); ConditionContext ctx = new ShardingContext("appId", "logicDbName", set("2", "3"), new Hints(), ConditionList.andList()).create(new ColumnCondition(OperatorEnum.EQUAL, "tableName", "col", "")); assertEquals(set("2", "3"), test2.locateForCombination(ctx, OperatorEnum.EQUAL, "2", OperatorEnum.EQUAL, "3")); }