JQLBuilder 1.2.0
See the version list below for details.
dotnet add package JQLBuilder --version 1.2.0
NuGet\Install-Package JQLBuilder -Version 1.2.0
<PackageReference Include="JQLBuilder" Version="1.2.0" />
paket add JQLBuilder --version 1.2.0
#r "nuget: JQLBuilder, 1.2.0"
// Install JQLBuilder as a Cake Addin #addin nuget:?package=JQLBuilder&version=1.2.0 // Install JQLBuilder as a Cake Tool #tool nuget:?package=JQLBuilder&version=1.2.0
JQL Builder
NOTE: In its current state, the package is in the RELEASE CANDIDATE phase, offering partial implementation for specified fields, along with support for all functions and operators.
Introduction
This repository houses a C# library designed to provide a JQL (Jira Query Language) builder, aiding programmers in constructing JQL queries programmatically.
The JqlBuilder library provides a fluent interface for constructing Jira Query Language (JQL) queries in a flexible and expressive manner.
For more details about JQL, please refer to the wiki.
Installation
You should install JqlBuilder with NuGet:
NuGet\Install-Package JQLBuilder
Or via the .NET Core command line interface:
dotnet add package JQLBuilder
Either commands, from Package Manager Console or .NET Core CLI, will download and install JqlBuilder and all required dependencies.
Getting Started
To start building JQL queries, use the JqlBuilder.Query
entry point. The library follows a fluent API design,
allowing you to chain methods to construct complex queries.
JqlBuilder.Query
.Where(f => f.Project == "example")
.And(f => f.Assignee == "john.doe")
.OrderBy(f => f.Project)
.ThenByDescending(f => f.Priority)
.ToString();
Query Construction
The library provides extension methods for constructing various parts of a JQL query:
Filtering
- Where: Start the query with a filter condition.
- And: Add an AND condition to the existing filter.
- Or: Add an OR condition to the existing filter.
JqlBuilder.Query
.Where(f => f.Project == "example")
.And(f => f.Assignee == "john.doe")
.Or(f => f.Status == "In Progress");
Ordering
- OrderBy: Specify the primary ordering field.
- OrderByDescending: Specify the primary ordering field in descending order.
- ThenBy: Add secondary ordering fields.
- ThenByDescending: Add secondary ordering fields in descending order.
JqlBuilder.Query
.OrderBy(f => f.Project)
.ThenByDescending(f => f.Priority)
.ThenBy(f => f.Assignee);
Building
The ToString
method is used to obtain the final JQL query string.
JqlBuilder.Query
.Where(f => f.Project == "example")
.And(f => f.Assignee == "john.doe")
.OrderBy(f => f.Project)
.ThenByDescending(f => f.Priority)
.ToString();
Supported JQL
The following table lists the supported fields and their corresponding types, along with the supported functions and operations grouped by type
Supported Fields
Fields | TYPE |
---|---|
AffectedVersion | VERSION |
Assignee | HISTORICAL_USER |
Attachment | ATTACHMENT |
Category | CATEGORY |
Component | COMPONENT |
Creator | USER |
Due | DATE |
DueDate | DATE |
FixVersion | VERSION |
Id | ISSUE |
Issue | ISSUE |
IssueKey | ISSUE |
IssueType | TYPE |
Key | ISSUE |
Labels | LABELS |
Parent | PARENT |
Priority | PRIORITY |
Project | PROJECT |
Reporter | HISTORICAL_USER |
Sprint | SPRINT |
Status | STATUS |
Summary | TEXT |
Type | TYPE |
Voter | USER |
Watcher | USER |
Supported Operators
Fields | TYPE |
---|---|
VERSION | = , != , > , >= , < , ⇐, IS, IS NOT, IN, NOT IN |
HISTORICAL_USER | = , !=, IS, IS NOT, IN, NOT IN, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
ATTACHMENT | IS, IS NOT |
CATEGORY | =, !=, IS, IS NOT, IN, NOT IN |
TEXT | ~ , !~ |
COMPONENT | = , !=, IS , IS NOT , IN , NOT IN |
DATE | = , != , > , >= , < , ⇐ IS , IS NOT , IN , NOT IN |
USER | ~ , !~ , > , >= , < , ⇐ CHANGED, WAS, WAS IN, WAS NOT, WAS NOT IN |
ISSUE | = , != , > , >= , < , ⇐, IN, NOT IN |
LABELS | = , !=, IS, IS NOT, IN, NOT IN |
PARENT | =, !=, IN, NOT IN |
PRIORITY | = , != , > , >= , < , ⇐ IS , IS NOT, IN , NOT IN , WAS, WAS IN, WAS NOT, WAS NOT IN , CHANGED |
PROJECT | = , !=, IS , IS NOT, IN , NOT IN |
SPRINT | = , !=, IS , IS NOT, IN , NOT IN |
STATUS | = , != , > , >= , < , ⇐ IS , IS NOT, IN , NOT IN , WAS, WAS IN, WAS NOT, WAS NOT IN , CHANGED |
Type | = , !=, IS , IS NOT , IN , NOT IN |
Supported Functions
Type | Functions |
---|---|
DATE | now, currentLogin, lastLogin, startOfDay, startOfWeek, startOfMonth, startOfYear, endOfDay, endOfWeek, endOfMonth, endOfYear |
PROJECT | projectsLeadByUser, projectsWhereUserHasPermission, projectsWhereUserHasRole |
VERSION | latestReleasedVersion, latestUnreleasedVersion, releasedVersions, unreleasedVersions |
ISSUE | issueHistory, votedIssues, watchedIssues, linkedIssues |
USER | membersOf, currentUser |
HISTORICAL_USER | membersOf, currentUser |
SPRINT | openSprints, closedSprints |
COMPONENT | componentsLeadByUser |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- No dependencies.
-
net7.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
1.3.0 | 287 | 2/18/2024 | |
1.3.0-pre.77b50f4 | 58 | 2/18/2024 | |
1.2.0 | 118 | 1/30/2024 | |
1.1.5 | 114 | 1/28/2024 | |
1.1.4 | 106 | 1/28/2024 | |
1.1.3 | 117 | 1/28/2024 | |
1.1.2 | 116 | 1/28/2024 | |
1.1.1 | 122 | 1/28/2024 | |
1.1.0 | 144 | 1/28/2024 | |
1.0.92 | 129 | 1/20/2024 | |
1.0.92-alpha1.0.d94cc32 | 66 | 1/20/2024 | |
1.0.91 | 188 | 12/23/2023 | |
1.0.91-alpha1.0.80949c7 | 100 | 12/23/2023 | |
1.0.90 | 134 | 12/23/2023 | |
1.0.90-alpha1.0.7d5d4e8 | 78 | 12/23/2023 | |
1.0.80 | 141 | 12/23/2023 | |
1.0.80-alpha1.2.7d5d4e8 | 90 | 12/23/2023 | |
1.0.80-alpha1.0.66c47d0 | 89 | 12/23/2023 | |
1.0.72 | 126 | 12/23/2023 | |
1.0.72-alpha.e6eaa37 | 87 | 12/23/2023 | |
1.0.71-rc.ffc43be | 84 | 12/23/2023 | |
1.0.70-rc.f8a64fd | 89 | 12/23/2023 | |
1.0.60-rc.48b70041a5d29a1b4... | 88 | 12/23/2023 | |
1.0.50-rc | 117 | 12/23/2023 | |
1.0.43-pre | 107 | 12/23/2023 | |
1.0.42 | 139 | 12/23/2023 | |
1.0.41 | 134 | 12/23/2023 | |
1.0.40 | 153 | 12/23/2023 | |
1.0.20 | 148 | 12/22/2023 | |
1.0.19 | 136 | 12/22/2023 | |
1.0.10 | 156 | 12/22/2023 | |
1.0.9 | 140 | 12/22/2023 | |
1.0.8 | 146 | 12/22/2023 | |
1.0.7 | 135 | 12/22/2023 | |
1.0.1 | 149 | 12/22/2023 | |
1.0.0 | 130 | 12/21/2023 |