How do you use issueFunction with JqlClauseBuilder?

Nathon Fowlie April 3, 2014

I'm trying to build a JQL query using the JqlClauseBuilder that calls the "issueFieldExactMatch" function provided by script runner. Just wondering how to call this function, because I can't seem to work it out?

This was my first attempt:

JqlClauseBuilder builder = JqlQueryBuilder.newClauseBuilder();

Query query = builder.project(projectId).and().issueType().in(VALID_ISSUETYPES as Long[]).and().not().issue(issue.getKey()).and().field("issueFunction").inFunc("issueFieldExactMatch", "", "summary", currentSummary).buildQuery()

but it seems to generate the following jql (note the missing empty string in the "subquery" argument):

project = "10000" AND issuetype  in (10400,10401,10402,10403) AND issueFunction in issueFieldExactMatch(, summary, "Test")

What it should generate is:

project = "10000" AND issuetype  in (10400,10401,10402,10403) AND issueFunction in issueFieldExactMatch("", summary, "Test")

I've tried various escape methods but none of them have worked. The closest I've come is "\\\"\\\"" which generates the following error:

com.atlassian.jira.jql.parser.antlr.RuntimeRecognitionException: NoViableAltException(-1@[478:1: operator returns [Operator operator] : ( EQUALS | NOT_EQUALS | LIKE | NOT_LIKE | LT | GT | LTEQ | GTEQ | IN | IS NOT | IS | NOT IN | WAS | WAS NOT | WAS IN | WAS NOT IN | CHANGED );])

2 answers

0 votes
Fabio Racobaldo _Herzum_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
April 4, 2014

Hi Nathon,

did you try to add "\"\"" instead of "" ?

Long[]).and().not().issue(issue.getKey()).and().field("issueFunction").inFunc("issueFieldExactMatch", "\"\"", "summary", currentSummary).buildQuery()

Nathon Fowlie April 6, 2014

Yeah originally I had "" and I've also tried "\"\"", "''" and various quantities of backslash characters. It's ok I'm using a work-around (use the standard .summary("foo") condition that generates a "contains" query, then loop through the results and try to find the exact match). Obviously not an efficient solution so would be good to find out how to make this work

0 votes
Boris Georgiev _Appfire_
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
April 3, 2014

Try passing com.atlassian.query.operand.EmptyOperand.OPERAND_NAME instead empty string.

Suggest an answer

Log in or Sign up to answer