我正在努力处理 JQL 查询。
我们有一个名为“Build Reported”的自定义字段,它是一个文本字段。它具有“4.7.323H”、“5.1.123L”、“3.1.456E”等值。
我需要编写一个简单的查询,它会给我在用户指定的版本之后报告的所有问题。
JQL 函数原型:searchIssues('Build Integrated', '>', '4.7.323B')
为此,我正在触发一个 JQL 查询,它为我提供所有问题的 Build Reported,然后我遍历每个问题并执行逐字符比较以确定当前问题的 Build Reported 版本是否大于用户指定的那个。这似乎需要很长时间才能执行,因为我必须从 jira 数据库中检索所有问题。
有没有更快的方法来实现这一目标?这是我到目前为止所拥有的:
// Get all the arguments
java.util.List args = operand.getArgs();
CustomField cf = customFieldManager.getCustomFieldObjectByName((String)args.get(0));
Long cfID = cf.getIdAsLong();
String operator = (String)args.get(1);
String userVersion = (String)args.get(2);
String jiraVersion = "";
java.util.List issues;
Iterator issuesIterator;
Issue issue;
issues = getAllIssues(user, interestedInVersion, cfID);
issuesIterator = issues.iterator();
// Iterate over all the issues
while(issuesIterator.hasNext())
{
issue = (Issue)issuesIterator.next();
// Get the Build reported value
jiraVersion = (String)issue.getCustomFieldValue(cf);
if(jiraVersion != null &&
!jiraVersion.equals(""))
{
// Compare user-specified version to the one retrieved from database
if(compareVersions(jiraVersion, userVersion, operator))
{
// Add the issue to the result set
literals.add(new QueryLiteral(operand, issue.getId()));
}
}
}
// cfID is the ID for the custom field Build Reported
private java.util.List getAllIssues(User user, Long cfID) throws SearchException, ParseException
{
JqlQueryBuilder builder = JqlQueryBuilder.newBuilder();
builder.where().project("SDEV").and().customField(cfID).isNotEmpty();
Query query = builder.buildQuery();
SearchResults results = searchService.search(user, query, PagerFilter.getUnlimitedFilter());
return results.getIssues();
}
请注意,我没有任何其他过滤器可用于 JQL 查询构建器来帮助我减小结果集的大小。