Program: 31384
Project: 31384
Buggy source:
private QueryModel parseQuery(boolean subQuery) throws ParserException {
  CharSequence tok;
  QueryModel model=queryModelPool.next();
  tok=tok();
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    parseSelectColumns(model);
    tok=tok();
  }
  if (Chars.equals(tok,"String_Node_Str")) {
    model.setNestedModel(parseQuery(true));
    expectTok(tok(),"String_Node_Str");
    tok=lexer.optionTok();
    if (tok != null && !aliasStopSet.contains(tok)) {
      lexer.unparse();
      model.setAlias(literal());
      tok=lexer.optionTok();
    }
    tok=parseTimestamp(tok,model);
  }
 else {
    lexer.unparse();
    model.setJournalName(literal());
    tok=lexer.optionTok();
    if (tok != null && !aliasStopSet.contains(tok)) {
      lexer.unparse();
      model.setAlias(literal());
      tok=lexer.optionTok();
    }
    tok=parseTimestamp(tok,model);
    if (tok != null && Chars.equals(tok,"String_Node_Str")) {
      parseLatestBy(model);
      tok=lexer.optionTok();
    }
  }
  QueryModel.JoinType type;
  while (tok != null && (type=joinStartSet.get(tok)) != null) {
    model.addJoinModel(parseJoin(tok,type));
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    model.setWhereClause(expr());
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    expectTok(tok(),"String_Node_Str");
    model.setSampleBy(expectExpr());
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    expectTok(tok(),"String_Node_Str");
    do {
      tok=tok();
      if (Chars.equals(tok,"String_Node_Str")) {
        throw err("String_Node_Str");
      }
      lexer.unparse();
      model.addOrderBy(expr());
      tok=lexer.optionTok();
    }
 while (tok != null && Chars.equals(tok,"String_Node_Str"));
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    ExprNode lo=expr();
    ExprNode hi=null;
    tok=lexer.optionTok();
    if (tok != null && Chars.equals("String_Node_Str",tok)) {
      hi=expr();
      tok=lexer.optionTok();
    }
    model.setLimit(lo,hi);
  }
  if (subQuery) {
    lexer.unparse();
  }
 else   if (tok != null) {
    throw QueryError.position(lexer.position()).$("String_Node_Str").$(tok).$();
  }
  return model;
}

Fixed version (ground truth):
private QueryModel parseQuery(boolean subQuery) throws ParserException {
  CharSequence tok;
  QueryModel model=queryModelPool.next();
  tok=tok();
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    parseSelectColumns(model);
    tok=tok();
  }
  if (Chars.equals(tok,'(')) {
    model.setNestedModel(parseQuery(true));
    expectTok(tok(),"String_Node_Str");
    tok=lexer.optionTok();
    if (tok != null && !aliasStopSet.contains(tok)) {
      lexer.unparse();
      model.setAlias(literal());
      tok=lexer.optionTok();
    }
    tok=parseTimestamp(tok,model);
  }
 else {
    lexer.unparse();
    model.setJournalName(literal());
    tok=lexer.optionTok();
    if (tok != null && !aliasStopSet.contains(tok)) {
      lexer.unparse();
      model.setAlias(literal());
      tok=lexer.optionTok();
    }
    tok=parseTimestamp(tok,model);
    if (tok != null && Chars.equals(tok,"String_Node_Str")) {
      parseLatestBy(model);
      tok=lexer.optionTok();
    }
  }
  QueryModel.JoinType type;
  while (tok != null && (type=joinStartSet.get(tok)) != null) {
    model.addJoinModel(parseJoin(tok,type));
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    model.setWhereClause(expr());
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    expectTok(tok(),"String_Node_Str");
    model.setSampleBy(expectExpr());
    tok=lexer.optionTok();
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    expectTok(tok(),"String_Node_Str");
    do {
      tok=tok();
      if (Chars.equals(tok,')')) {
        throw err("String_Node_Str");
      }
      lexer.unparse();
      model.addOrderBy(expr());
      tok=lexer.optionTok();
    }
 while (tok != null && Chars.equals(tok,','));
  }
  if (tok != null && Chars.equals(tok,"String_Node_Str")) {
    ExprNode lo=expr();
    ExprNode hi=null;
    tok=lexer.optionTok();
    if (tok != null && Chars.equals(tok,',')) {
      hi=expr();
      tok=lexer.optionTok();
    }
    model.setLimit(lo,hi);
  }
  if (subQuery) {
    lexer.unparse();
  }
 else   if (tok != null) {
    throw QueryError.position(lexer.position()).$("String_Node_Str").$(tok).$();
  }
  return model;
}