in sapp/ui/issues.py [0:0]
def get(self) -> List[IssueQueryResult]:
features = (
self._session.query(
# pyre-ignore: SQAlchemy sadness.
IssueInstance.id.label("id"),
func.group_concat(FeatureText.contents.distinct()).label(
"concatenated_features"
),
)
.join(
IssueInstanceSharedTextAssoc,
IssueInstanceSharedTextAssoc.issue_instance_id == IssueInstance.id,
isouter=True,
)
.join(
FeatureText,
FeatureText.id == IssueInstanceSharedTextAssoc.shared_text_id,
isouter=True,
)
.filter(FeatureText.kind == SharedTextKind.FEATURE)
.group_by(IssueInstance)
.subquery()
)
source_names = (
self._session.query(
IssueInstance.id.label("id"),
func.group_concat(SourceNameText.contents.distinct()).label(
"concatenated_source_names"
),
)
.join(
IssueInstanceSharedTextAssoc,
IssueInstanceSharedTextAssoc.issue_instance_id == IssueInstance.id,
)
.join(
SourceNameText,
SourceNameText.id == IssueInstanceSharedTextAssoc.shared_text_id,
)
.filter(SourceNameText.kind == SharedTextKind.SOURCE_DETAIL)
.group_by(IssueInstance)
.subquery()
)
source_kinds = (
self._session.query(
IssueInstance.id.label("id"),
func.group_concat(SourceKindText.contents.distinct()).label(
"concatenated_source_kinds"
),
)
.join(
IssueInstanceSharedTextAssoc,
IssueInstanceSharedTextAssoc.issue_instance_id == IssueInstance.id,
)
.join(
SourceKindText,
SourceKindText.id == IssueInstanceSharedTextAssoc.shared_text_id,
)
.filter(SourceKindText.kind == SharedTextKind.SOURCE)
.group_by(IssueInstance)
.subquery()
)
sink_names = (
self._session.query(
IssueInstance.id.label("id"),
func.group_concat(SinkNameText.contents.distinct()).label(
"concatenated_sink_names"
),
)
.join(
IssueInstanceSharedTextAssoc,
IssueInstanceSharedTextAssoc.issue_instance_id == IssueInstance.id,
)
.join(
SinkNameText,
SinkNameText.id == IssueInstanceSharedTextAssoc.shared_text_id,
)
.filter(SinkNameText.kind == SharedTextKind.SINK_DETAIL)
.group_by(IssueInstance)
.subquery()
)
sink_kinds = (
self._session.query(
IssueInstance.id.label("id"),
func.group_concat(SinkKindText.contents.distinct()).label(
"concatenated_sink_kinds"
),
)
.join(
IssueInstanceSharedTextAssoc,
IssueInstanceSharedTextAssoc.issue_instance_id == IssueInstance.id,
)
.join(
SinkKindText,
SinkKindText.id == IssueInstanceSharedTextAssoc.shared_text_id,
)
.filter(SinkKindText.kind == SharedTextKind.SINK)
.group_by(IssueInstance)
.subquery()
)
query = (
self._session.query(
IssueInstance.id.label("issue_instance_id"),
FilenameText.contents.label("filename"),
IssueInstance.location,
# pyre-ignore[16]: SQLAlchemy
Issue.id.label("issue_id"),
Issue.code,
Issue.status,
Issue.first_seen,
CallableText.contents.label("callable"),
MessageText.contents.label("message"),
IssueInstance.is_new_issue,
IssueInstance.min_trace_length_to_sources,
IssueInstance.min_trace_length_to_sinks,
features.c.concatenated_features,
source_names.c.concatenated_source_names,
source_kinds.c.concatenated_source_kinds,
sink_names.c.concatenated_sink_names,
sink_kinds.c.concatenated_sink_kinds,
IssueInstance.run_id,
)
.filter(IssueInstance.run_id == self._run_id)
.join(FilenameText, FilenameText.id == IssueInstance.filename_id)
.join(CallableText, CallableText.id == IssueInstance.callable_id)
.join(features, IssueInstance.id == features.c.id, isouter=True)
.join(source_names, IssueInstance.id == source_names.c.id, isouter=True)
.join(source_kinds, IssueInstance.id == source_kinds.c.id, isouter=True)
.join(sink_names, IssueInstance.id == sink_names.c.id, isouter=True)
.join(sink_kinds, IssueInstance.id == sink_kinds.c.id, isouter=True)
)
for predicate in self._predicates:
if isinstance(predicate, filter_predicates.QueryPredicate):
query = predicate.apply(query)
issues = [
IssueQueryResult.from_record(record)
for record in query.join(Issue, IssueInstance.issue_id == Issue.id).join(
MessageText, MessageText.id == IssueInstance.message_id
)
]
issue_predicates = [
predicate
for predicate in self._predicates
if isinstance(predicate, filter_predicates.IssuePredicate)
]
if len(issue_predicates) > 0:
for issue_predicate in issue_predicates:
issues = issue_predicate.apply(issues)
return issues