public static List readFromString()

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;
  }