public String checkAntiPattern()

in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/rewriter/gemini/QueryVisitorRewriter.java [69:115]


    public String checkAntiPattern(String queryStr,
                                   AntiPatternVisitor visitorThatFoundAntiPattern,
                                   Integer llmRetries) throws Exception {
        InputQuery inputQuery = new InputQuery(queryStr, "intermediate_rewrite");
        List<AntiPatternVisitor> visitorsThatFoundAntiPatterns = new ArrayList<>();
        try {

            // get only the visitor that we want to check
            List<AntiPatternVisitor> parserVisitorList = antiPatternHelper
                    .getParserVisitorList(inputQuery.getQuery())
                    .stream()
                    .filter(ap -> Objects.equals(ap.getName(), visitorThatFoundAntiPattern.getName()))
                    .collect(Collectors.toList());

            // parser visitors
            this.antiPatternHelper.checkForAntiPatternsInQueryWithParserVisitors(inputQuery, visitorsThatFoundAntiPatterns, parserVisitorList);

            // analyzer visitor
            if (this.antiPatternHelper.getUseAnalizer() && visitorThatFoundAntiPattern.getName().equals(JoinOrderVisitor.NAME)) {
                this.antiPatternHelper.checkForAntiPatternsInQueryWithAnalyzerVisitors(inputQuery, visitorsThatFoundAntiPatterns);
            }

            if (! visitorsThatFoundAntiPatterns.isEmpty()) {
                if (llmRetries <= 0) {
                    if (this.llmStrictValidation) {
                        throw new TTLExpiredDuringRewriteException("LLM couldn't solve the specific anti pattern");
                    }
                    return queryStr;
                }
                llmRetries--;
                queryStr = this.rewriteSQL(queryStr, visitorThatFoundAntiPattern, llmRetries);
            }
            return queryStr;
        } catch (SqlException sqlException) {
            logger.error("The generated query has a syntax error :" + sqlException.getMessage());
            if (llmRetries <= 0) {
                if (this.llmStrictValidation) {
                    throw new TTLExpiredDuringRewriteException("LLM couldn't solve the specific anti pattern");
                }
                return queryStr;
            }
            llmRetries--;

            queryStr = this.fixSyntaxError(queryStr, sqlException.getMessage(), this.antiPatternHelper.getProject());
            return this.checkAntiPattern(queryStr, visitorThatFoundAntiPattern, llmRetries);
        }
    }