@Test public void testRecordRetrievaIWithIdOrOperator() { Set<Long> set = Sets.newHashSet(); set.add(new Long(35)); set.add(new Long(40)); Assert.assertEquals(set, client.find(Criteria.where() .key(Constants.JSON_RESERVED_IDENTIFIER_NAME) .operator(Operator.EQUALS).value(35).or().key("name") .operator(Operator.EQUALS).value("foo40").build())); set = Sets.newHashSet(); Assert.assertEquals(set, client.find(Criteria.where() .key(Constants.JSON_RESERVED_IDENTIFIER_NAME) .operator(Operator.EQUALS).value(55).and().key("name") .operator(Operator.EQUALS).value("foo46").build())); }
@Test public void testSimpleOr() { Assert.assertTrue(hasSameResults(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).or() .key("percent_undergrad_black") .operator(Operator.GREATER_THAN_OR_EQUALS).value(5).build())); }
@Test public void testToPostfixNotationSimpleOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS).value(2) .build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols()); Assert.assertEquals(pfn.size(), 3); 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(Iterables.get(pfn, 2), ConjunctionSymbol.OR); }
@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 testGroupOr() { String key0 = TestData.getString(); Operator operator0 = Operator.EQUALS; Object value0 = TestData.getObject(); String key1 = TestData.getString(); Operator operator1 = Operator.GREATER_THAN; Object value1 = TestData.getObject(); Criteria criteria = Criteria.where().key(key0).operator(operator0) .value(value0).or().key(key1).operator(operator1).value(value1) .build(); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); Expression exp0 = (Expression) symbols.get(0); ConjunctionSymbol sym = (ConjunctionSymbol) symbols.get(1); Expression exp1 = (Expression) symbols.get(2); Assert.assertEquals(3, symbols.size()); Assert.assertEquals(exp0.raw().key(), key0); Assert.assertEquals(exp0.raw().operator(), operator0); Assert.assertEquals(exp0.values().get(0).value(), value0); Assert.assertEquals(sym, ConjunctionSymbol.OR); Assert.assertEquals(exp1.raw().key(), key1); Assert.assertEquals(exp1.raw().operator(), operator1); Assert.assertEquals(exp1.values().get(0).value(), value1); }
@Test public void testParseCclSimpleOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).or().key("b").operator(Operator.EQUALS).value(2) .build(); String ccl = "a = 1 or b = 2"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testSimpleOrAnd() { Assert.assertTrue(hasSameResults(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).or() .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())); }
@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(); }
@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 testSimpleAndOr() { Assert.assertTrue(hasSameResults(Criteria.where().key("graduation_rate") .operator(Operator.GREATER_THAN).value(90).and() .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())); }
@Test public void testToPostfixNotationAndOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).and().key("b").operator(Operator.EQUALS).value(2).or() .key("c").operator(Operator.EQUALS).value(3).build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols()); Assert.assertEquals(pfn.size(), 5); 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(Iterables.get(pfn, 2), ConjunctionSymbol.AND); Assert.assertEquals(((Expression) Iterables.get(pfn, 3)), new Expression(new KeySymbol("c"), new OperatorSymbol(Operator.EQUALS), new ValueSymbol(3))); Assert.assertEquals(Iterables.get(pfn, 4), ConjunctionSymbol.OR); }
@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()); }
@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 testParseCclAndOr() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value("1").and().key("b").operator(Operator.EQUALS).value(2) .or().key("c").operator(Operator.EQUALS).value(3).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 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()); } }); }
@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()); }