in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/parser/visitors/IdentifyRegexpContainsVisitor.java [49:71]
public void visit(ASTNodes.ASTFunctionCall node) {
ImmutableList<ASTNodes.ASTIdentifier> identifiers = node.getFunction().getNames();
for (ASTNodes.ASTIdentifier identifier : identifiers) {
// search for regexp_contains
if (identifier.getIdString().toLowerCase().equals(REGEXP_CONTAINS_FUN_ID_STR)) {
ImmutableList<ASTNodes.ASTExpression> arguments = node.getArguments();
// search for argument with string
for (ASTNodes.ASTExpression argument : arguments) {
if (argument instanceof ASTNodes.ASTStringLiteral) {
String stringLiteralArg = ((ASTNodes.ASTStringLiteral) argument).getImage();
Pattern pattern = Pattern.compile(REGEX_STRING);
Matcher matcher = pattern.matcher(stringLiteralArg);
if (matcher.find()) {
int lineNum =
ZetaSQLStringParsingHelper.countLine(
query, identifier.getParseLocationRange().start());
result.add(String.format(REGEXP_CONTAINS_ANTI_PATTERN_MESSAGE, lineNum));
}
}
}
}
}
}