From 6d06ca4d4bba41d8bf1e4618a9543e7bdc5e571e Mon Sep 17 00:00:00 2001 From: johncurrier Date: Sat, 21 May 2005 17:29:41 +0000 Subject: [PATCH] If more than half of the tables have the same primary key then it's most likely a database where primary key names aren't unique --- src/net/sourceforge/schemaspy/DBAnalyzer.java | 11 ++++++++++- src/net/sourceforge/schemaspy/Main.java | 2 +- .../schemaspy/model/ImpliedForeignKeyConstraint.java | 6 ++---- .../schemaspy/view/JavaScriptFormatter.java | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/net/sourceforge/schemaspy/DBAnalyzer.java b/src/net/sourceforge/schemaspy/DBAnalyzer.java index 2cad1ed..fc5540d 100755 --- a/src/net/sourceforge/schemaspy/DBAnalyzer.java +++ b/src/net/sourceforge/schemaspy/DBAnalyzer.java @@ -31,13 +31,16 @@ public int compare(Object object1, Object object2) { } }); + int duplicatePrimaries = 0; + // gather all the primary key columns and columns without parents for (Iterator iter = tables.iterator(); iter.hasNext(); ) { Table table = (Table)iter.next(); List tablePrimaries = table.getPrimaryColumns(); if (tablePrimaries.size() == 1) { // can't match up multiples...yet... for (Iterator primariesIter = tablePrimaries.iterator(); primariesIter.hasNext(); ) { - allPrimaries.put(primariesIter.next(), table); + if (allPrimaries.put(primariesIter.next(), table) != null) + ++duplicatePrimaries; } } @@ -48,6 +51,12 @@ public int compare(Object object1, Object object2) { } } + // if more than half of the tables have the same primary key then + // it's most likey a database where primary key names aren't unique + // (e.g. they all have a primary key named 'ID') + if (duplicatePrimaries > allPrimaries.size()) + return new ArrayList(); + sortColumnsByTable(columnsWithoutParents); List impliedConstraints = new ArrayList(); diff --git a/src/net/sourceforge/schemaspy/Main.java b/src/net/sourceforge/schemaspy/Main.java index 1293c7a..297577d 100755 --- a/src/net/sourceforge/schemaspy/Main.java +++ b/src/net/sourceforge/schemaspy/Main.java @@ -161,7 +161,7 @@ else if (maxThreads == 0) StyleSheet.write(out); out.close(); out = new LineWriter(new FileWriter(new File(outputDir, "schemaSpy.js"))); - new JavaScriptFormatter().write(out); + JavaScriptFormatter.write(out); out.close(); startSummarizing = System.currentTimeMillis(); diff --git a/src/net/sourceforge/schemaspy/model/ImpliedForeignKeyConstraint.java b/src/net/sourceforge/schemaspy/model/ImpliedForeignKeyConstraint.java index ae54c13..2cd17c5 100755 --- a/src/net/sourceforge/schemaspy/model/ImpliedForeignKeyConstraint.java +++ b/src/net/sourceforge/schemaspy/model/ImpliedForeignKeyConstraint.java @@ -1,9 +1,7 @@ package net.sourceforge.schemaspy.model; -import java.io.Serializable; -import java.sql.SQLException; -import java.util.Collections; -import java.util.List; +import java.io.*; +import java.sql.*; public class ImpliedForeignKeyConstraint extends ForeignKeyConstraint implements Serializable { public ImpliedForeignKeyConstraint(TableColumn parentColumn, TableColumn childColumn) throws SQLException { diff --git a/src/net/sourceforge/schemaspy/view/JavaScriptFormatter.java b/src/net/sourceforge/schemaspy/view/JavaScriptFormatter.java index 73c5d85..4f5d7bf 100755 --- a/src/net/sourceforge/schemaspy/view/JavaScriptFormatter.java +++ b/src/net/sourceforge/schemaspy/view/JavaScriptFormatter.java @@ -4,7 +4,7 @@ import net.sourceforge.schemaspy.util.LineWriter; public class JavaScriptFormatter { - public void write(LineWriter out) throws IOException { + public static void write(LineWriter out) throws IOException { out.writeln("function toggle(styleIndex) {"); out.writeln(" var rules = document.styleSheets[0].cssRules;"); out.writeln(" if (rules == null) rules = document.styleSheets[0].rules;");