diff --git a/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java b/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java index a2005c31..a2c56429 100644 --- a/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java +++ b/io.sc.platform.jdbc.schemacrawler/src/main/java/io/sc/platform/jdbc/schemacrawler/MetaDataLoaderImpl.java @@ -149,6 +149,19 @@ public class MetaDataLoaderImpl implements MetaDataLoader { try{rs.close();} catch (SQLException e) {} try{connection.close();} catch (SQLException e) {} } + + CollectionUtil.bubbleSort(result,new Comparator() { + @Override + public int compare(Table o1, Table o2) { + if(o1.isParentOf(o2)) { + return -1; + }else if(o1.isChildOf(o2)) { + return 1; + }else { + return o1.getName().compareTo(o2.getName()); + } + } + }); return result; } diff --git a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java index 531cbcda..84750b97 100644 --- a/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java +++ b/io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/meta/support/Table.java @@ -13,6 +13,35 @@ public class Table { private String selfReferencePrimaryKeyColumnName; private String selfReferenceForeignKeyColumnName; + public boolean isParentOf(Table childTable){ + if(childTable==null){ return false; } + List foreignKeys =childTable.getForeignKeys(); + if(foreignKeys==null || foreignKeys.isEmpty()){ + return false; + } + for(ForeignKey foreignKey : foreignKeys){ + if(foreignKey.getPrimaryKeyTableName().equalsIgnoreCase(this.getName())){ + return true; + } + } + return false; + } + + public boolean isChildOf(Table parentTable){ + if(parentTable==null){ return false; } + List foreignKeys =this.getForeignKeys(); + if(foreignKeys==null || foreignKeys.isEmpty()){ + return false; + } + for(ForeignKey foreignKey : foreignKeys){ + if(foreignKey.getPrimaryKeyTableName().equalsIgnoreCase(parentTable.getName())){ + return true; + } + } + return false; + } + + public String getName() { return name; }