public void refresh(DatabaseMetaData metaData) throws SQLException { refreshColumns(metaData); refreshPrimaryKeys(metaData); refreshForeignKeys(metaData); }
public Sequence(String name) { setName(name); }
public Table(String catalog, String schema, String name) { setCatalog(catalog); setSchema(schema); setName(name); }
private Table generateTable(Integer vertex, Digraph graph) { Table table = new Table(catalog, schemaName, "TABLE" + vertex); int outSize = graph.outgoingSize(vertex); int inSize = graph.incomingSize(vertex); if (outSize != 0 || (outSize == 0 && inSize == 0)) { Column pkColumn = new Column(); pkColumn.setName(table.getName() + "_ID"); pkColumn.setTypeName("INTEGER"); pkColumn.setNullable(DatabaseMetaData.columnNoNulls); table.addColumn(pkColumn); PrimaryKey pk = new PrimaryKey(pkColumn); table.addPrimaryKey(pk); sequencesByTable.put(table, new Sequence(table.getName() + "_SEQ")); String pkName = referencedTableName + "_PK"; int fkCount = (!vertex.equals(origin) ? 1 : generateFkCountForLoop()); for (int j = 1; j <= fkCount; j++) { Column fkColumn = new Column(); fkColumn.setName(pkColumnName + fkColumnSuffix); fkColumn.setTypeName("INTEGER"); fkColumn.setNullable(DatabaseMetaData.columnNoNulls); table.addColumn(fkColumn); if (outSize == 0) { PrimaryKey pk = new PrimaryKey(fkColumn); table.addPrimaryKey(pk); ForeignKey fk = new ForeignKey(fkColumn); fk.setPkColumnName(pkColumnName);
for (Iterator<Column> i = columns.iterator(); i.hasNext();) { Column c = i.next(); out.print(" " + c.getName() + " " + c.getTypeName()); if (c.getNullable() == DatabaseMetaData.columnNoNulls) out.print(" NOT NULL"); if (i.hasNext()) PrimaryKey pk = i.next(); out.print(" "); if (pk.getName() != null) { out.print("CONSTRAINT " + pk.getName() + " "); out.print("PRIMARY KEY (" + pk.getColumnName()); while (i.hasNext()) { pk = i.next(); out.print(", " + pk.getColumnName()); ForeignKey fk = i.next(); out.print(" "); if (fk.getName() != null) out.print("CONSTRAINT " + fk.getName() + " "); out.print("FOREIGN KEY (" + fk.getColumnName() + ") REFERENCES " + fk.getPkTableName()); if (fk.getPkColumnName() != null) out.print(" (" + fk.getPkColumnName() + ")"); if (i.hasNext()) out.println(',');
public ForeignKey(Column fkColumn) { columnName = fkColumn.getName(); owner = fkColumn.getOwner(); keySequence = (short) (owner.getForeignKeys().size() + 1); name = owner.getName() + "_FK" + keySequence; }
public PrimaryKey(Column pkColumn) { columnName = pkColumn.getName(); owner = pkColumn.getOwner(); name = owner.getName() + "_PK"; keySequence = (short) (owner.getPrimaryKeys().size() + 1); }
public static Digraph buildReferentialDigraph(Digraph digraph, Collection tables) { HashMap tableMap = new HashMap(); for (Iterator i = tables.iterator(); i.hasNext();) { Table table = (Table) i.next(); tableMap.put(table.getFullName(), table); digraph.addVertex(table); } for (Iterator i = tables.iterator(); i.hasNext();) { Table dst = (Table) i.next(); for (Iterator j = dst.getForeignKeys().iterator(); j.hasNext();) { ForeignKey fk = (ForeignKey) j.next(); String pkTableFullName = Table.composeFullName(fk .getPkTableCatalog(), fk.getPkTableSchema(), fk .getPkTableName()); Table origin = (Table) tableMap.get(pkTableFullName); if (origin != null) { ArrayList fks = (ArrayList) digraph.getArc(origin, dst); if (fks == null) { fks = new ArrayList(); digraph.putArc(origin, dst, fks); } fks.add(fk); } } } return digraph; } }
public void refreshPrimaryKeys(DatabaseMetaData metaData) throws SQLException { primaryKeys.clear(); ResultSet rs = null; try { rs = metaData.getPrimaryKeys(catalog, schema, name); while (rs.next()) { PrimaryKey pk = new PrimaryKey(); primaryKeys.add(pk); pk.setOwner(this); pk.setColumnName(rs.getString("COLUMN_NAME")); pk.setKeySequence(rs.getShort("KEY_SEQ")); pk.setName(rs.getString("PK_NAME")); } } catch (SQLException sqle) { throw sqle; } finally { try { rs.close(); } catch (Exception ex) { } } }
public static void getAllTables(String catalog, String schema, Collection tables, DatabaseMetaData metaData) throws SQLException { String[] tableTypes = new String[] { "TABLE" }; ResultSet rs = null; try { rs = metaData.getTables(catalog, schema, null, tableTypes); while (rs.next()) { Table table = new Table(catalog, schema, rs .getString("TABLE_NAME")); tables.add(table); } } finally { try { rs.close(); } catch (Exception e) { } } }
public boolean removeColumn(Column column) { column.setOwner(null); return columns.remove(column); }
public void addPrimaryKey(PrimaryKey primaryKey) { primaryKeys.add(primaryKey); primaryKey.setOwner(this); }
public boolean removeForeignKey(ForeignKey foreignKey) { foreignKey.setOwner(null); return foreignKeys.remove(foreignKey); }
public static void refreshTables(Collection tables, DatabaseMetaData metaData) throws SQLException { refreshTables(tables, metaData, true, true, true); }
public String getFullName() { return composeFullName(catalog, schema, name); }
public void generate() { schemaGraph = new MapDigraph(MapDigraph.HASHMAP_FACTORY); generateAcyclicSchema(); }
public static void refreshTables(Collection tables, DatabaseMetaData metaData, boolean columns, boolean primaryKeys, boolean foreignKeys) throws SQLException { for (Iterator i = tables.iterator(); i.hasNext();) { Table table = (Table) i.next(); if (columns) table.refreshColumns(metaData); if (primaryKeys) table.refreshPrimaryKeys(metaData); if (foreignKeys) table.refreshForeignKeys(metaData); } }
public void addColumn(Column column) { columns.add(column); column.setOwner(this); }
public boolean removePrimaryKey(PrimaryKey primaryKey) { primaryKey.setOwner(null); return primaryKeys.remove(primaryKey); }
public void addForeignKey(ForeignKey foreignKey) { foreignKeys.add(foreignKey); foreignKey.setOwner(this); }