private ResultSet getColumnsResultSet(Table table) throws SQLException { ResultSet columnRs = null; if (table.getOwnerSynonymName() != null) { columnRs = getMetaData() .getColumns(getCatalog(), table.getOwnerSynonymName(), table.getSqlName(), null); } else { columnRs = getMetaData().getColumns(getCatalog(), getSchema(), table.getSqlName(), null); } return columnRs; }
private Table createTable(Connection conn, ResultSet rs) throws SQLException { String realTableName = null; try { ResultSetMetaData rsMetaData = rs.getMetaData(); String schemaName = rs.getString("TABLE_SCHEM") == null ? "" : rs.getString("TABLE_SCHEM"); realTableName = rs.getString("TABLE_NAME"); String tableType = rs.getString("TABLE_TYPE"); String remarks = rs.getString("REMARKS"); if (remarks == null && dbHelper.isOracleDataBase()) { remarks = getOracleTableComments(realTableName); } Table table = new Table(); table.setSqlName(realTableName); table.setRemarks(remarks); if ("SYNONYM".equals(tableType) && dbHelper.isOracleDataBase()) { table.setOwnerSynonymName(getSynonymOwner(realTableName)); } retriveTableColumns(table); table.initExportedKeys(conn.getMetaData()); table.initImportedKeys(conn.getMetaData()); BeanHelper.copyProperties( table, TableOverrideValuesProvider.getTableOverrideValues(table.getSqlName())); return table; } catch (SQLException e) { throw new RuntimeException("create table object error,tableName:" + realTableName, e); } }
private List getTableColumns( Table table, List primaryKeys, List indices, Map uniqueIndices, Map uniqueColumns) throws SQLException { // get the columns List columns = new LinkedList(); ResultSet columnRs = getColumnsResultSet(table); while (columnRs.next()) { int sqlType = columnRs.getInt("DATA_TYPE"); String sqlTypeName = columnRs.getString("TYPE_NAME"); String columnName = columnRs.getString("COLUMN_NAME"); String columnDefaultValue = columnRs.getString("COLUMN_DEF"); String remarks = columnRs.getString("REMARKS"); if (remarks == null && dbHelper.isOracleDataBase()) { remarks = getOracleColumnComments(table.getSqlName(), columnName); } // if columnNoNulls or columnNullableUnknown assume "not nullable" boolean isNullable = (DatabaseMetaData.columnNullable == columnRs.getInt("NULLABLE")); int size = columnRs.getInt("COLUMN_SIZE"); int decimalDigits = columnRs.getInt("DECIMAL_DIGITS"); boolean isPk = primaryKeys.contains(columnName); boolean isIndexed = indices.contains(columnName); String uniqueIndex = (String) uniqueIndices.get(columnName); List columnsInUniqueIndex = null; if (uniqueIndex != null) { columnsInUniqueIndex = (List) uniqueColumns.get(uniqueIndex); } boolean isUnique = columnsInUniqueIndex != null && columnsInUniqueIndex.size() == 1; if (isUnique) { GLogger.trace("unique column:" + columnName); } Column column = new Column( table, sqlType, sqlTypeName, columnName, size, decimalDigits, isPk, isNullable, isIndexed, isUnique, columnDefaultValue, remarks); BeanHelper.copyProperties( column, TableOverrideValuesProvider.getColumnOverrideValues(table, column)); columns.add(column); } columnRs.close(); return columns; }
private List<String> getTablePrimaryKeys(Table table) throws SQLException { // get the primary keys List primaryKeys = new LinkedList(); ResultSet primaryKeyRs = null; if (table.getOwnerSynonymName() != null) { primaryKeyRs = getMetaData() .getPrimaryKeys(getCatalog(), table.getOwnerSynonymName(), table.getSqlName()); } else { primaryKeyRs = getMetaData().getPrimaryKeys(getCatalog(), getSchema(), table.getSqlName()); } while (primaryKeyRs.next()) { String columnName = primaryKeyRs.getString("COLUMN_NAME"); GLogger.trace("primary key:" + columnName); primaryKeys.add(columnName); } primaryKeyRs.close(); return primaryKeys; }
private static Map getColumnOverrideValues(Table table, Column column) { NodeData root = getTableConfigXmlNodeData(table.getSqlName()); if (root != null) { for (NodeData item : root.childs) { if (item.nodeName.equals("column")) { if (column.getSqlName().equalsIgnoreCase(item.attributes.get("sqlName"))) { return item.attributes; } } } } return new HashMap(); }
public void processByTable(Generator g, Table table, boolean isDelete) throws Exception { GeneratorModel m = GeneratorModelUtils.newGeneratorModel("table", table); PrintUtils.printBeginProcess(table.getSqlName() + " => " + table.getClassName(), isDelete); if (isDelete) g.deleteBy(m.templateModel, m.filePathModel); else g.generateBy(m.templateModel, m.filePathModel); }
private void retriveTableColumns(Table table) throws SQLException { GLogger.trace("-------setColumns(" + table.getSqlName() + ")"); List primaryKeys = getTablePrimaryKeys(table); table.setPrimaryKeyColumns(primaryKeys); // get the indices and unique columns List indices = new LinkedList(); // maps index names to a list of columns in the index Map uniqueIndices = new HashMap(); // maps column names to the index name. Map uniqueColumns = new HashMap(); ResultSet indexRs = null; try { if (table.getOwnerSynonymName() != null) { indexRs = getMetaData() .getIndexInfo( getCatalog(), table.getOwnerSynonymName(), table.getSqlName(), false, true); } else { indexRs = getMetaData().getIndexInfo(getCatalog(), getSchema(), table.getSqlName(), false, true); } while (indexRs.next()) { String columnName = indexRs.getString("COLUMN_NAME"); if (columnName != null) { GLogger.trace("index:" + columnName); indices.add(columnName); } // now look for unique columns String indexName = indexRs.getString("INDEX_NAME"); boolean nonUnique = indexRs.getBoolean("NON_UNIQUE"); if (!nonUnique && columnName != null && indexName != null) { List l = (List) uniqueColumns.get(indexName); if (l == null) { l = new ArrayList(); uniqueColumns.put(indexName, l); } l.add(columnName); uniqueIndices.put(columnName, indexName); GLogger.trace("unique:" + columnName + " (" + indexName + ")"); } } } catch (Throwable t) { // Bug #604761 Oracle getIndexInfo() needs major grants // http://sourceforge.net/tracker/index.php?func=detail&aid=604761&group_id=36044&atid=415990 } finally { dbHelper.close(indexRs, null); } List columns = getTableColumns(table, primaryKeys, indices, uniqueIndices, uniqueColumns); for (Iterator i = columns.iterator(); i.hasNext(); ) { Column column = (Column) i.next(); table.addColumn(column); } // In case none of the columns were primary keys, issue a warning. if (primaryKeys.size() == 0) { GLogger.warn( "WARNING: The JDBC driver didn't report any primary key columns in " + table.getSqlName()); } }