in tools/query_breakdown/src/main/java/com/google/bigquery/InputReader.java [28:91]
public InputReader(String filename) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
queries = new ArrayList<>();
locationTrackers = new ArrayList<>();
LocationTracker locationTracker = new LocationTracker();
docLength = 0;
// local state for input reading
int current = reader.read();
// absolute position in the original document
int line = 1;
int column = 1;
// local position within the query
int localLine = 1;
// for the first line
if (current != -1) {
locationTracker.addLine();
}
// loop for input reading
while (current != -1) {
docLength++;
sb.append((char) current);
// break down query using semicolon
if ((char) current == ';') {
queries.add(sb.substring(0, sb.length() - 1));
sb = new StringBuilder();
locationTrackers.add(locationTracker);
locationTracker = new LocationTracker();
locationTracker.addLine();
column++;
localLine = 1;
}
// line changes
else if ((char) current == '\n') {
locationTracker.add(localLine, line, column);
column = 1;
line++;
localLine++;
locationTracker.addLine();
}
else {
locationTracker.add(localLine, line, column);
column++;
}
// advance current pointer
current = reader.read();
}
// deals with case where a single query or the last query don't have semicolons
if (sb.length() != 0) {
queries.add(sb.toString());
locationTrackers.add(locationTracker);
}
reader.close();
}