Ejemplo n.º 1
0
  /**
   * Checks if the given <code>InsertRow</code>s contain cyclic fk constraints.
   *
   * @param rows
   * @return steps of the cycle, or null if there is none
   */
  private static Collection<InsertRow> findCycle(Collection<InsertRow> rows) {

    Iterator<InsertRow> rowsIter = rows.iterator();
    while (rowsIter.hasNext()) {
      InsertRow begin = rowsIter.next();
      Iterator<InsertRow> refIter = begin.getReferencedRows().iterator();
      while (refIter.hasNext()) {
        InsertRow referencedRow = refIter.next();
        List<InsertRow> cycle =
            findCycleRecursion(referencedRow, begin, new ArrayList<InsertRow>());
        if (cycle != null) {
          return cycle;
        }
      }
    }
    return null;
  }
Ejemplo n.º 2
0
  private static List<InsertRow> findCycleRecursion(
      InsertRow next, InsertRow begin, List<InsertRow> steps) {

    if (steps.contains(next)) {
      steps.add(next);
      return steps;
    }
    steps.add(next);

    Iterator<InsertRow> refIter = next.getReferencedRows().iterator();
    while (refIter.hasNext()) {
      InsertRow referencedRow = refIter.next();
      List<InsertRow> cycle = findCycleRecursion(referencedRow, begin, steps);
      if (cycle != null) {
        return cycle;
      }
    }
    steps.remove(steps.size() - 1);
    return null;
  }