@Test public void testNotNeccessaryToBuildSubCriteriaInGroup() { Criteria.where().key("foo").operator(Operator.EQUALS).value("bar").or() .group(Criteria.where().key("baz") .operator(Operator.GREATER_THAN).value(0).and() .key("name").operator(Operator.NOT_EQUALS) .value("John Doe")) .build(); }
.value(value1).or().key(key2).operator(operator2) .value(value2).build()) .build(); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); Expression exp0 = (Expression) symbols.get(0);
@Test public void testAndGroupOr() { Assert.assertTrue(hasSameResults(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).and() .group(Criteria.where().key("percent_undergrad_black") .operator(Operator.GREATER_THAN_OR_EQUALS).value(5).or() .key("total_cost_out_state") .operator(Operator.GREATER_THAN).value(50000).build()) .build())); }
@Test public void testOrGroupAnd() { Assert.assertTrue(hasSameResults(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).or() .group(Criteria.where().key("percent_undergrad_black") .operator(Operator.GREATER_THAN_OR_EQUALS).value(5) .and().key("total_cost_out_state") .operator(Operator.GREATER_THAN).value(50000).build()) .build())); }
@Test public void testToPostfixNotationAndGroupOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).and() .group(Criteria.where().key("b").operator(Operator.EQUALS) .value(2).or().key("c").operator(Operator.EQUALS) .value(3).build()) .build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols()); Assert.assertEquals(((Expression) Iterables.get(pfn, 0)), new Expression(new KeySymbol("a"), new OperatorSymbol(Operator.EQUALS), new ValueSymbol(1))); Assert.assertEquals(((Expression) Iterables.get(pfn, 1)), new Expression(new KeySymbol("b"), new OperatorSymbol(Operator.EQUALS), new ValueSymbol(2))); Assert.assertEquals(((Expression) Iterables.get(pfn, 2)), new Expression(new KeySymbol("c"), new OperatorSymbol(Operator.EQUALS), new ValueSymbol(3))); Assert.assertEquals(Iterables.get(pfn, 3), ConjunctionSymbol.OR); Assert.assertEquals(Iterables.get(pfn, 4), ConjunctionSymbol.AND); }
@Test public void testTimestampPinning() { Criteria criteria = Criteria.where().key("name") .operator(Operator.EQUALS).value("Jeff Nelson").and() .group(Criteria.where().key("company").operator(Operator.EQUALS) .value("Cinchapi").or().key("company") .operator(Operator.EQUALS).value("Blavity")) .build(); Timestamp timestamp = Timestamp.now(); criteria = criteria.at(timestamp); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); symbols.forEach((symbol) -> { if(symbol instanceof Expression) { Expression expression = (Expression) symbol; Assert.assertEquals(expression.raw().timestamp(), timestamp.getMicros()); } }); }
.value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols());
@Test public void testTimestampPinningSomeTimestamps() { Criteria criteria = Criteria.where().key("name") .operator(Operator.EQUALS).value("Jeff Nelson").and() .group(Criteria.where().key("company").operator(Operator.EQUALS) .value("Cinchapi").at(Timestamp.now()).or() .key("company").operator(Operator.EQUALS) .value("Blavity")) .build(); Timestamp timestamp = Timestamp.now(); criteria = criteria.at(timestamp); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); symbols.forEach((symbol) -> { if(symbol instanceof Expression) { Expression expression = (Expression) symbol; Assert.assertEquals(expression.raw().timestamp(), timestamp.getMicros()); } }); }
.value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols());
@Test public void testPostfixNotationAndGroupOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).and() .group(Criteria.where().key("b").operator(Operator.EQUALS) .value(2).or().key("c").operator(Operator.EQUALS) .value(3).build()) .build(); String ccl = "a = 1 and (b = 2 or c = 3)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testGroupAndOrGroupAnd() { Assert.assertTrue(hasSameResults(Criteria.where() .group(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).and() .key("yield_men").operator(Operator.EQUALS).value(20) .build()) .or() .group(Criteria.where().key("percent_undergrad_black") .operator(Operator.GREATER_THAN_OR_EQUALS).value(5) .and().key("total_cost_out_state") .operator(Operator.GREATER_THAN).value(50000).build()) .build())); }
@Test public void testGroupOrAndGroupOr() { Assert.assertTrue(hasSameResults(Criteria.where() .group(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).or() .key("yield_men").operator(Operator.EQUALS).value(20) .build()) .and() .group(Criteria.where().key("percent_undergrad_black") .operator(Operator.GREATER_THAN_OR_EQUALS).value(5).or() .key("total_cost_out_state") .operator(Operator.GREATER_THAN).value(50000).build()) .build())); }
@Test public void testParseCclGroupOrAndGroupOr() { Criteria criteria = Criteria.where() .group(Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS) .value(2).build()) .and() .group(Criteria.where().key("c").operator(Operator.EQUALS) .value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); String ccl = "(a = 1 or b = 2) AND (c = 3 or d = 4)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclGroupOrAndGroupOrConjuctionsWithSingleAmpersand() { Criteria criteria = Criteria.where() .group(Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS) .value(2).build()) .and() .group(Criteria.where().key("c").operator(Operator.EQUALS) .value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); String ccl = "(a = 1 || b = 2) & (c = 3 || d = 4)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclGroupOrAndGroupOrConjuctions() { Criteria criteria = Criteria.where() .group(Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS) .value(2).build()) .and() .group(Criteria.where().key("c").operator(Operator.EQUALS) .value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); String ccl = "(a = 1 || b = 2) && (c = 3 || d = 4)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclGroupOrOrGroupOr() { Criteria criteria = Criteria.where() .group(Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS) .value(2).build()) .or() .group(Criteria.where().key("c").operator(Operator.EQUALS) .value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); String ccl = "(a = 1 or b = 2) or (c = 3 or d = 4)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclGroupOrOrConjuction() { Criteria criteria = Criteria.where() .group(Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS) .value(2).build()) .or() .group(Criteria.where().key("c").operator(Operator.EQUALS) .value(3).or().key("d").operator(Operator.EQUALS) .value(4).build()) .build(); String ccl = "(a = 1 || b = 2) || (c = 3 || d = 4)"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }