/** * Returns <code>true</code> if this table is referenced by no other tables. * * <p>Used in dependency analysis. * * @return */ public boolean isLeaf() { for (TableColumn column : columns.values()) { if (!column.getChildren().isEmpty()) { return false; } } return true; }
/** * Returns the number of tables that are referenced by this table * * @return */ public int getNumParents() { int numParents = 0; for (TableColumn column : columns.values()) { numParents += column.getParents().size(); } return numParents; }
/** * Returns the number of tables that reference this table * * @return */ public int getNumChildren() { int numChildren = 0; for (TableColumn column : columns.values()) { numChildren += column.getChildren().size(); } return numChildren; }
/** * Returns <code>true</code> if this table references no other tables.. * * <p>Used in dependency analysis. * * @return */ public boolean isRoot() { for (TableColumn column : columns.values()) { if (column.isForeignKey()) { return false; } } return true; }
/** * Return a self referencing constraint if one exists * * @return */ private ForeignKeyConstraint getSelfReferencingConstraint() { for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { if (compareTo(parentColumn.getTable()) == 0) { return column.getParentConstraint(parentColumn); } } } return null; }
/** * Return a self referencing constraint if one exists * * @return */ private ForeignKeyConstraint getSelfReferencingConstraint() { for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { if (parentColumn.getTable().getName().equals(getName())) { return column.getParentConstraint(parentColumn); } } } return null; }
/** * Returns the number of non-implied parents * * @return */ public int getNumNonImpliedParents() { int numParents = 0; for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { if (!column.getParentConstraint(parentColumn).isImplied()) ++numParents; } } return numParents; }
/** * Returns the number of non-implied children * * @return */ public int getNumNonImpliedChildren() { int numChildren = 0; for (TableColumn column : columns.values()) { for (TableColumn childColumn : column.getChildren()) { if (!column.getChildConstraint(childColumn).isImplied()) ++numChildren; } } return numChildren; }
/** * Returns <code>true</code> if this table has no relationships * * @param withImpliedRelationships boolean * @return boolean */ public boolean isOrphan(boolean withImpliedRelationships) { if (withImpliedRelationships) return getMaxParents() == 0 && getMaxChildren() == 0; for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { if (!column.getParentConstraint(parentColumn).isImplied()) return false; } for (TableColumn childColumn : column.getChildren()) { if (!column.getChildConstraint(childColumn).isImplied()) return false; } } return true; }
/** * Remove any non-real foreign keys * * @return */ public List<ForeignKeyConstraint> removeNonRealForeignKeys() { List<ForeignKeyConstraint> nonReals = new ArrayList<ForeignKeyConstraint>(); for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { ForeignKeyConstraint constraint = column.getParentConstraint(parentColumn); if (constraint != null && !constraint.isReal()) { nonReals.add(remove(constraint)); } } } return nonReals; }
/** * Remove any non-real foreign keys * * @return */ public List<ForeignKeyConstraint> removeNonRealForeignKeys() { List<ForeignKeyConstraint> nonReals = new ArrayList<ForeignKeyConstraint>(); for (TableColumn column : columns.values()) { for (TableColumn parentColumn : column.getParents()) { ForeignKeyConstraint constraint = column.getParentConstraint(parentColumn); if (constraint != null && !constraint.isReal()) { nonReals.add(constraint); } } } // remove constraints outside of above loop to prevent // concurrent modification exceptions while iterating for (ForeignKeyConstraint constraint : nonReals) { remove(constraint); } return nonReals; }
/** "Unlink" all of the child tables from this table */ public void unlinkChildren() { for (TableColumn column : columns.values()) { column.unlinkChildren(); } }
/** "Unlink" all of the parent tables from this table */ public void unlinkParents() { for (TableColumn column : columns.values()) { column.unlinkParents(); } }
/** * Returns <code>List</code> of <code>TableColumn</code>s in ascending column number order. * * @return */ public List<TableColumn> getColumns() { Set<TableColumn> sorted = new TreeSet<TableColumn>(new ByColumnIdComparator()); sorted.addAll(columns.values()); return new ArrayList<TableColumn>(sorted); }
/** * Returns the indexes that are applied to this table * * @return */ public Set<TableIndex> getIndexes() { return new HashSet<TableIndex>(indexes.values()); }
/** * Get the foreign keys associated with this table * * @return */ public Collection<ForeignKeyConstraint> getForeignKeys() { return Collections.unmodifiableCollection(foreignKeys.values()); }