code: public OCommandExecutorSQLSelect parse(final OCommandRequest iRequest) {
      super.parse(iRequest);
  
      final int pos = parseProjections();
      if (pos == -1)
        return this;
  
      int endPosition = text.length();
  
      if (context == null)
        context = new OBasicCommandContext();
  
      compiledFilter = OSQLEngine.getInstance().parseFromWhereCondition(text.substring(pos, endPosition), context);
  
      optimize();
  
      parserSetCurrentPosition(compiledFilter.parserIsEnded() ? endPosition : compiledFilter.parserGetCurrentPosition() + pos);
  
      if (!parserIsEnded()) {
        parserSkipWhiteSpaces();
  
        while (!parserIsEnded()) {
          parserNextWord(true);
  
          if (!parserIsEnded()) {
            final String w = parserGetLastWord();
  
            if (w.equals(KEYWORD_ORDER))
              parseOrderBy(w);
            else if (w.equals(KEYWORD_LIMIT))
              parseLimit(w);
            else if (w.equals(KEYWORD_SKIP))
              parseSkip(w);
            else
              throw new OCommandSQLParsingException("Invalid keyword '" + w + "'");
          }
        }
      }
      if (limit == 0 || limit < -1) {
        throw new IllegalArgumentException("Limit must be > 0 or = -1 (no limit)");
      }
  
      return this;
    }
docs: Compile the filter conditions only the first time.