/** * Translate the {@code criteria} to its Thrift analog. * * @param criteria * @return the analogous TCriteria */ public static TCriteria translateToThriftCriteria(Criteria criteria) { List<TSymbol> symbols = Lists.newArrayList(); for (Symbol symbol : criteria.getSymbols()) { symbols.add(translateToThriftSymbol(symbol)); } return new TCriteria(symbols); }
@Test public void testParseCclLocalReferences() { Criteria criteria = Criteria.where().key("name") .operator(Operator.EQUALS).value("Lebron James").build(); String ccl = "name = $name"; Multimap<String, Object> data = LinkedHashMultimap.create(); data.put("name", "Lebron James"); data.put("age", 30); data.put("team", "Cleveland Cavaliers"); Parser parser = Parsers.create(ccl, data); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclBetweenWithBothReferences() { Criteria criteria = Criteria.where().key("age") .operator(Operator.BETWEEN).value(30).value(35).build(); String ccl = "where age bw $age $retireAge"; Multimap<String, Object> data = LinkedHashMultimap.create(); data.put("name", "Lebron James"); data.put("age", 30); data.put("retireAge", 35); data.put("team", "Cleveland Cavaliers"); Parser parser = Parsers.create(ccl, data); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclBetweenWithSecondReference() { Criteria criteria = Criteria.where().key("age") .operator(Operator.BETWEEN).value(5).value(30).build(); String ccl = "where age bw 5 $age"; Multimap<String, Object> data = LinkedHashMultimap.create(); data.put("name", "Lebron James"); data.put("age", 30); data.put("team", "Cleveland Cavaliers"); Parser parser = Parsers.create(ccl, data); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testParseCclBetweenWithFirstReference() { Criteria criteria = Criteria.where().key("age") .operator(Operator.BETWEEN).value(30).value(100).build(); String ccl = "where age bw $age 100"; Multimap<String, Object> data = LinkedHashMultimap.create(); data.put("name", "Lebron James"); data.put("age", 30); data.put("team", "Cleveland Cavaliers"); Parser parser = Parsers.create(ccl, data); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@Test public void testToPostfixNotationSimple() { Criteria criteria = Criteria.where().key("foo") .operator(Operator.EQUALS).value("bar").build(); Queue<PostfixNotationSymbol> pfn = Parsing .toPostfixNotation(criteria.getSymbols()); Assert.assertEquals(pfn.size(), 1); Assert.assertEquals(((Expression) Iterables.getOnlyElement(pfn)).key(), new KeySymbol("foo")); Assert.assertEquals( ((Expression) Iterables.getOnlyElement(pfn)).values().get(0), new ValueSymbol("bar")); Assert.assertEquals( ((Expression) Iterables.getOnlyElement(pfn)).operator(), new OperatorSymbol(Operator.EQUALS)); }
@Test public void testParseCclBetween() { Criteria criteria = Criteria.where().key("foo") .operator(Operator.BETWEEN).value("bar").value("baz").build(); String ccl = "where foo bw bar baz"; String ccl2 = "where foo >< bar baz"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); Parser parser2 = Parsers.create(ccl2); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser2.order()); }
@Test public void testGroupSingle() { String key = TestData.getString(); Operator operator = Operator.EQUALS; Object value = TestData.getObject(); Criteria criteria = Criteria.where().key(key).operator(operator) .value(value).build(); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); Expression exp = (Expression) symbols.get(0); Assert.assertEquals(1, symbols.size()); Assert.assertEquals(exp.raw().key(), key); Assert.assertEquals(exp.raw().operator(), operator); Assert.assertEquals(exp.values().get(0).value(), value); }
@Test public void testGroupSingleBetween() { String key = TestData.getString(); Operator operator = Operator.BETWEEN; Object value = TestData.getObject(); Object value1 = TestData.getObject(); Criteria criteria = Criteria.where().key(key).operator(operator) .value(value).value(value1).build(); List<Symbol> symbols = Parsing.groupExpressions(criteria.getSymbols()); Expression exp = (Expression) symbols.get(0); Assert.assertEquals(1, symbols.size()); Assert.assertEquals(exp.raw().key(), key); Assert.assertEquals(exp.raw().operator(), operator); Assert.assertEquals(exp.values().get(0).value(), value); Assert.assertEquals(exp.values().get(1).value(), value1); }
@Test public void testParseCclSimple() { Criteria criteria = Criteria.where().key("foo") .operator(Operator.EQUALS).value("bar").build(); String ccl = "where foo = bar"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@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 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 testParseCclSimpleAnd() { Criteria criteria = Criteria.where().key("a").operator(Operator.EQUALS) .value(1).and().key("b").operator(Operator.EQUALS).value(2) .build(); String ccl = "a = 1 and b = 2"; Parser parser = Parsers.create(ccl); Assert.assertEquals(Parsing.toPostfixNotation(criteria.getSymbols()), parser.order()); }
@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 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 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 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 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()); }