public void checkForAntiPatternsInQueryWithAnalyzerVisitors()

in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/util/AntiPatternHelper.java [101:137]


    public void checkForAntiPatternsInQueryWithAnalyzerVisitors(InputQuery inputQuery, List<AntiPatternVisitor> visitorsThatFoundAntiPatterns) {
        String query = inputQuery.getQuery();
        String currentProject;

        if (inputQuery.getProjectId() == null) {
            currentProject = this.project;
        } else {
            currentProject = inputQuery.getProjectId();
        }

        BigQueryCatalog catalog = new BigQueryCatalog("");
        if ((this.analyzerProject == null || !this.analyzerProject.equals(currentProject))) {
            this.analyzerProject = inputQuery.getProjectId();
            catalog = new BigQueryCatalog(this.analyzerProject, this.resourceProvider);
            catalog.addAllTablesUsedInQuery(query, this.analyzerOptions);
        }
        JoinOrderVisitor visitor = new JoinOrderVisitor(this.service);
        if(this.visitorMetricsMap.get(visitor.getName()) == null) {
            this.visitorMetricsMap.put(visitor.getName(), 0);
            this.visitorMetricsMap.merge(visitor.getName(), 1, Integer::sum);
        }
        try {
            logger.info("Analyzing query with id: " + inputQuery.getQueryId() +
                    " For anti-pattern:" + visitor.getName());
            Iterator<ResolvedNodes.ResolvedStatement> statementIterator = this.analyzer.analyzeStatements(query, catalog);
            statementIterator.forEachRemaining(statement -> statement.accept(visitor));

            String result = visitor.getResult();
            if (result.length() > 0) {
                visitorsThatFoundAntiPatterns.add(visitor);
            }
        } catch (Exception e) {
            logger.error("Error analyzing query with id: " + inputQuery.getQueryId() +
                    " For anti-pattern:" + visitor.getName());
            logger.error(e.getMessage(), e);
        }
    }