in tools/query_breakdown/src/main/java/com/google/bigquery/InputReader.java [96:151]
public static List<LocationTracker> readFromString(String input) {
List<LocationTracker> trackers = new ArrayList<>();
LocationTracker locationTracker = new LocationTracker();
// local state for input reading
int current = 0;
int line = 1;
int column = 1;
int localLine = 1;
boolean lastline = false;
// empty string
if (input == null || input.length() == 0) {
return null;
}
// for the first line
locationTracker.addLine();
while (current < input.length()) {
lastline = false;
// break down query using semicolon
if (input.charAt(current) == ';') {
locationTracker.add(localLine, line, column);
trackers.add(locationTracker);
locationTracker = new LocationTracker();
locationTracker.addLine();
column++;
localLine = 1;
lastline = true;
}
// line changes
else if (input.charAt(current) == '\n') {
locationTracker.add(localLine, line, column);
column = 1;
line++;
localLine++;
locationTracker.addLine();
}
else {
locationTracker.add(localLine, line, column);
column++;
}
// advance current pointer
current++;
}
// deals with case where a single query or the last query don't have semicolons
if (!lastline) {
trackers.add(locationTracker);
}
return trackers;
}