in zetasql-toolkit-core/src/main/java/com/google/zetasql/toolkit/StatementRewriter.java [121:146]
public static String quoteNamePaths(String query, ASTStatement parsedStatement) {
List<ASTPathExpression> pathExpressions =
getResourcePathExpressionFromParseTree(parsedStatement).stream()
.sorted(Comparator.comparing(expression -> expression.getParseLocationRange().start()))
.collect(Collectors.toList());
StringBuilder builder = new StringBuilder(query);
int rewritingOffset = 0;
for (ASTPathExpression pathExpression : pathExpressions) {
int startPosition = pathExpression.getParseLocationRange().start();
int endPosition = pathExpression.getParseLocationRange().end();
String originalNamePath = query.substring(startPosition, endPosition);
String quotedNamePath = buildQuotedNamePath(pathExpression);
int rewriteStartPosition = startPosition + rewritingOffset;
int rewriteEndPosition = endPosition + rewritingOffset;
builder.replace(rewriteStartPosition, rewriteEndPosition, quotedNamePath);
rewritingOffset += (quotedNamePath.length() - originalNamePath.length());
}
return builder.toString();
}