-
Notifications
You must be signed in to change notification settings - Fork 298
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Initial support for JQL #721
base: master
Are you sure you want to change the base?
Changes from 5 commits
09291e5
0a8a291
efcc459
6a123a3
5bc8d99
9c69e02
f828d1d
afefb46
a2496c7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,6 +24,25 @@ the platform-specific Query classes can be used. | |
You can use these query classes as a drop in replacement for the default ``Query`` class shown in the other examples. | ||
Again, if you encounter any issues specific to a platform, please create a GitHub issue on this repository. | ||
|
||
Or even different query languages | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
||
Some services created their own query language similar to SQL. To generate expressions for Jira there is a ``JiraQueryBuilder`` class. | ||
|
||
.. code-block:: python | ||
|
||
from pypika import JiraTable, JiraQueryBuilder | ||
|
||
J = JiraTable() | ||
j = ( | ||
JiraQueryBuilder() | ||
.where(J.project.isin(["PROJ1", "PROJ2"])) | ||
.where(J.issuetype == "My issue") | ||
.where(J.labels.isempty() | J.labels.notin(["stale", "bug"])) | ||
.where(J.repos.notempty() & J.repos.notin(["main", "dev"])) | ||
) | ||
print(j.get_sql()) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Some of the other examples show the result explicitly There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done. |
||
|
||
GROUP BY Modifiers | ||
------------------ | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
import unittest | ||
|
||
from pypika.dialects import JiraQueryBuilder, JiraTable | ||
|
||
|
||
class SelectTests(unittest.TestCase): | ||
table_abc = JiraTable() | ||
|
||
def test_in_query(self): | ||
q = JiraQueryBuilder().where(self.table_abc.project.isin(["PROJ1", "PROJ2"])) | ||
|
||
self.assertEqual('project IN ("PROJ1","PROJ2")', str(q)) | ||
|
||
def test_eq_query(self): | ||
q = JiraQueryBuilder().where(self.table_abc.issuetype == "My issue") | ||
|
||
self.assertEqual('issuetype="My issue"', str(q)) | ||
|
||
def test_or_query(self): | ||
q = JiraQueryBuilder().where( | ||
self.table_abc.labels.isempty() | self.table_abc.labels.notin(["stale", "bug fix"]) | ||
) | ||
|
||
self.assertEqual('labels is EMPTY OR labels NOT IN ("stale","bug fix")', str(q)) | ||
|
||
def test_and_query(self): | ||
q = JiraQueryBuilder().where(self.table_abc.repos.notempty() & self.table_abc.repos.notin(["main", "dev"])) | ||
|
||
self.assertEqual('repos is not EMPTY AND repos NOT IN ("main","dev")', str(q)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should the example use
JiraQuery
instead ofJiraQueryBuilder
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Think that that would provide consistency with the rest of the API
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be honest I just don't know how to make in consistent.
There are no such thing as tables (so JiraTable is just a dummy placeholder).
Best thing I can do is probably create a bunch of overrides for
from_
,into
and other methods which would returncls._builder(**kwargs)
Is it ok?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm. I guess
JiraQuery.from_(table).where(table.project.isin(["PROJ1", "PROJ2"]))
looks kind consistent.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe the
JiraQuery
could have awhere
class method as well that initializes table.Personally, I tend to used
Field
sMaybe it would read like this
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done.
Working in both ways: