@Override public String toString() { return getCclString(); }
/** * Return a {@link Parser} for the {@code criteria} that uses the provided * {@code data} for local resolution. * * @param criteria * @param data a dataset * @return a {@link Parser} */ public static Parser create(Criteria criteria, Multimap<String, Object> data) { return create(criteria.getCclString(), data); }
/** * Return a {@link Parser} for the {@code criteria}. * * @param criteria * @return a {@link Parser} */ public static Parser create(Criteria criteria) { return create(criteria.getCclString()); }
/** * Return a string that instructs Concourse to create links that point to * each of the records that match the {@code ccl} string. * * <p> * <strong>NOTE:</strong> This method DOES NOT return a {@link Link} object, * so it should only be used when adding a * {@link com.cinchapi.concourse.util.Convert.ResolvableLink resolvable * link} value to a data/json blob that will be passed to the * {@link Concourse#insert(com.google.common.collect.Multimap) * insert()} methods. * </p> * * @param criteria a {@link Criteria} that describes the records to which a * Link should point * @return a {@link com.cinchapi.concourse.util.Convert.ResolvableLink * resolvable link instruction} */ public static String toWhere(Criteria criteria) { return toWhere(criteria.getCclString()); }
/** * Return a {@link Parser} for the {@code criteria}. * * @param criteria * @return a {@link Parser} */ public static Parser create(TCriteria criteria) { return create( Language.translateFromThriftCriteria(criteria).getCclString()); }
/** * Return a {@link Parser} for the {@code criteria} that uses the provided * {@code data} for local resolution. * * @param criteria * @param data a dataset * @return a {@link Parser} */ public static Parser create(TCriteria criteria, Multimap<String, Object> data) { return create( Language.translateFromThriftCriteria(criteria).getCclString(), data); }
/** * Return this {@link Criteria} with each expression (e.g. {key} {operator} * {values}) pinned to the specified {@code timestamp}. * * <strong>NOTE:</strong> Any timestamps that are pinned to any expressions * within this Criteria will be replaced by the specified {@code timestamp}. * * @param timestamp the {@link Timestamp} to which the returned * {@link Criteria} is pinned * * @return this {@link Criteria} pinned to {@code timestamp} */ public Criteria at(Timestamp timestamp) { Parser parser = Parsers.create(getCclString()); List<Symbol> symbols = Parsing.groupExpressions(parser.tokenize()); TimestampSymbol ts = new TimestampSymbol(timestamp.getMicros()); symbols.forEach((symbol) -> { if(symbol instanceof Expression) { Expression expression = (Expression) symbol; Reflection.set("timestamp", ts, expression); // (authorized) } }); Criteria criteria = new Criteria(); symbols = Parsing.ungroupExpressions(symbols); criteria.symbols = symbols; return criteria; }
@Test public void testParseCcl() { String ccl = "name = jeff AND (company = Cinchapi at 12345 or company = Blavity)"; Criteria criteria = Criteria.parse(ccl); Parser parser1 = Parsers.create(ccl); Parser parser2 = Parsers.create(criteria.getCclString()); Assert.assertEquals(Parsing.groupExpressions(parser1.tokenize()), Parsing.groupExpressions(parser2.tokenize())); }