JQL функции и операторы в JIRA, о которых вы могли не знать. Часть II: WAS, WAS NOT и CHANGED

Продолжим серию статьей о возможностях языка JQL, в котором появляются не только новые функции, но и операторы.

Если знакомиться с полным перечнем операторов языка JQL, то среди них можно отметить несколько нестандартных, таких как WAS, WAS NOT и CHANGED.

Первый позволяет искать запросы (issues), в которых определенное поле в некоторый момент времени в прошлом имело определенное значение. Рассмотрим пример:

Найти все запросы, которые были переоткрыты (т.е. ранее находились в статусе Reopened)

JQL фильтр выглядит очень даже изящно (к примеру, для SQL понадобилось бы написать десяток строк кода):

status was "In Progress"

Обратите внимание, что если запрос (issue) в настоящий момент находится в статусе In Progress (при этом ранее никогда не был в этом статусе), то он тоже попадет в результат отбора.

Но к сожалению, с помощью JQL вы не сможете ответить на вопрос КТО переводил запросы в состояние in Progress? или КОГДА это происходило? . Получить эту информацию можно или точечно по одному запросу или только используя SQL. Я предпочитаю использовать именно SQL.

Назначение оператора WAS NOT теперь говорит само за себя. Он используется для отбора запросов, у которых определенный атрибут сейчас и никогда ранее не равнялся определенному значению. Возможно не самый популярный кейс для применения, но можно, например, придумать такой фильтр

Найти все запросы в проекте DEMO, которые не проходили через статус In Progress

Соответственно JQL выглядит следующим образом:

project = DEMO and status was not "In Progress"

Последним оператором из этой группы является CHANGED. В отличие от уже рассмотренных, он не требует какого-либо значения с правой стороны. Его задача ответить на вопрос А менялось ли в принципе значение определенного атрибута? Например, чтобы найти все запросы в проекте DEMO, в которых менялся исполнитель, можно выполнить JQL запрос:

project = DEMO and assignee CHANGED

На первый взгляд — это очень перспективные операторы. Но к сожалению ко многим атрибутам их применить нельзя. Среди них: due, environment, label и др. И самая неприятная новость — к атрибуту timeEstimate операторы WAS, WAS NOT, CHANGED , увы ,также не применимы.