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());
    }
  }