def get()

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