in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/util/AntiPatternHelper.java [77:99]
public void checkForAntiPatternsInQueryWithParserVisitors(InputQuery inputQuery, List<AntiPatternVisitor> visitorsThatFoundAntiPatterns, List<AntiPatternVisitor> parserVisitorList) {
if(this.visitorMetricsMap == null) {
setVisitorMetricsMap(parserVisitorList);
}
for (AntiPatternVisitor visitorThatFoundAntiPattern : parserVisitorList) {
logger.info("Parsing query with id: " + inputQuery.getQueryId() +
" for anti-pattern: " + visitorThatFoundAntiPattern.getName());
ASTNodes.ASTScript parsedQuery = Parser.parseScript( inputQuery.getQuery(), this.languageOptions);
try{
parsedQuery.accept((ParseTreeVisitor) visitorThatFoundAntiPattern);
String result = visitorThatFoundAntiPattern.getResult();
if(result.length() > 0) {
visitorsThatFoundAntiPatterns.add(visitorThatFoundAntiPattern);
this.visitorMetricsMap.merge(visitorThatFoundAntiPattern.getName(), 1, Integer::sum);
}
} catch (Exception e) {
logger.error("Error parsing query with id: " + inputQuery.getQueryId() +
" for anti-pattern:" + visitorThatFoundAntiPattern.getName());
logger.error(e.getMessage(), e);
}
}
}