This looks like a serious micro optimization.  Is the performance for this
really that critical?  Have you demonstrated that this is your
application's crucial hot spot?

On Fri, Nov 14, 2014 at 7:35 AM, Davide Vecchi <[email protected]> wrote:

> Hi all,
>
> I have an expression in a string, and I use Cayenne to parse the
> expression into tokens, which are needed for a specific purpose.
>
> However in addition to having the tokens I also need to evaluate an object
> against that expression, to see if that object matches the expression.
>
> My problem is that the way I'm doing it causes the parsing to be done
> twice on the same expression, and I would like to avoid to parse the same
> expression twice.
>
> The token creation I'm doing it like this:
>
> -----------------------------------
> String where = "myField=0";
>
> Reader reader = new StringReader(where);
>
> ExpressionParser parser = new ExpressionParser(reader);
>
> List<Token> tokens = new ArrayList<>();
>
> Token token = parser.getNextToken();
>
> while (token != null) {
>
>      tokens.add(token);
>
>      token = parser.getNextToken();
> }
> -----------------------------------
>
> The object matching I'm doing it like this:
>
> -----------------------------------
> String where = "myField=0";
>
> Expression expression = Expression.fromString(where);
>
> boolean matches = expression.match(object);
> -----------------------------------
>
> The call to Expression.fromString made in the object matching operation
> performs a parsing, but the parsing of the same expression had already been
> done in the token creation operation.
>
> Is there a way to redesign this process in order to get the tokens and
> also match an object against the expression without parsing the same
> expression twice ?
>
> For example, I believe that the call to Expression.fromString must have
> created the tokens, because it has parsed the string. So I thought I could
> reverse the order and do the object matching first, keep the Expression
> instance created in that process and use it to extract the tokens. But I
> can't see how to extract the tokens from an Expression instance instead of
> from an ExpressionParser instance as I'm currently doing.
>
> Or another possibility could be that I keep creating the tokens first, and
> then I match my object against them, instead of against the string
> expression that generated those tokens. But I can't see how to match an
> object against tokens.
>
> So I'm looking for some ideas.
>
> Thanks in advance.
>
> Davide Vecchi
>

Reply via email to