public List run()

in tools/query_breakdown/src/main/java/com/google/bigquery/QueryBreakdown.java [54:89]


  public List<Node> run(String originalQuery, int runtimeLimit, int replacementLimit,
      LocationTracker locationTracker) {
    /* uses the loop function to generate and traverse the tree of possible error recoveries.
       This will find the optimal solution or abort when timed out */
    try {
      SimpleTimeLimiter limiter = SimpleTimeLimiter.create(Executors.newSingleThreadExecutor());
      limiter.runUninterruptiblyWithTimeout(
          () -> loop(originalQuery, replacementLimit, root, 0, locationTracker),
          runtimeLimit, TimeUnit.MILLISECONDS);
    }
    catch (TimeoutException te) {
      // abort logic: returns current solution or deletes entire query
      if (solution != null) {
        return runTermination();
      }
      Pair first = locationTracker.getOriginalPosition(1, 1);
      Pair last;
      int numLines = locationTracker.getLocation().size();
      if (locationTracker.getLocation().get(numLines - 1).size() == 0) {
        last = locationTracker.getOriginalPosition(numLines - 1,
            locationTracker.getLocation().get(numLines - 2).size());
      }
      else {
        last = locationTracker.getOriginalPosition(numLines,
            locationTracker.getLocation().get(numLines - 1).size());
      }
      Node deletionNode = new Node(null, first.getX(), first.getY(), last.getX(),
          last.getY(), originalQuery.length());
      List<Node> returnNodes = new ArrayList<>();
      returnNodes.add(deletionNode);
      finalString = "";
      return returnNodes;
    }
    // correctly terminated
    return runTermination();
  }