/**
   * Returns the number of rows contained in this table, or -1 if unable to determine the number of
   * rows.
   *
   * @return
   */
  public int getNumRows() {
    if (numRows == null) {
      numRows = Config.getInstance().isNumRowsEnabled() ? fetchNumRows() : -1;
    }

    return numRows;
  }
  /**
   * Run the LogicalTable(Database,String,String,String,String) constructor test.
   *
   * @throws Exception
   * @generatedBy CodePro at 6/7/15 4:20 PM
   */
  @Test
  public void testLogicalTable_29() throws Exception {
    Database db =
        new Database(
            Config.getInstance(),
            (Connection) null,
            (DatabaseMetaData) null,
            "An��t-1.0.txt",
            "An��t-1.0.txt",
            "An��t-1.0.txt",
            new SchemaMeta("0123456789", "0123456789", "0123456789"));
    String catalog = "";
    String schema = "0123456789";
    String name = "";
    String comments = "0123456789";

    LogicalTable result = new LogicalTable(db, catalog, schema, name, comments);

    // add additional test code here
    // An unexpected exception was thrown in user code while executing this test:
    //    net.sourceforge.schemaspy.model.InvalidConfigurationException: Specified meta file
    // "0123456789" does not exist
    //       at net.sourceforge.schemaspy.model.xml.SchemaMeta.<init>(SchemaMeta.java:74)
    assertNotNull(result);
  }
Beispiel #3
0
  public void connectForeignKeys(
      Map<String, Table> tables,
      Database db,
      Properties properties,
      Pattern excludeIndirectColumns,
      Pattern excludeColumns)
      throws SQLException {
    ResultSet rs = null;

    try {
      rs = db.getMetaData().getImportedKeys(null, getSchema(), getName());

      while (rs.next()) {
        addForeignKey(
            rs.getString("FK_NAME"),
            rs.getString("FKCOLUMN_NAME"),
            rs.getString("PKTABLE_SCHEM"),
            rs.getString("PKTABLE_NAME"),
            rs.getString("PKCOLUMN_NAME"),
            tables,
            db,
            properties,
            excludeIndirectColumns,
            excludeColumns);
      }
    } finally {
      if (rs != null) rs.close();
    }

    // if we're one of multiples then also find all of the 'remote' tables in other
    // schemas that point to our primary keys (not necessary in the normal case
    // as we infer this from the opposite direction)
    if (getSchema() != null && Config.getInstance().isOneOfMultipleSchemas()) {
      try {
        rs = db.getMetaData().getExportedKeys(null, getSchema(), getName());

        while (rs.next()) {
          String otherSchema = rs.getString("FKTABLE_SCHEM");
          if (!getSchema().equals(otherSchema))
            db.addRemoteTable(
                otherSchema,
                rs.getString("FKTABLE_NAME"),
                getSchema(),
                properties,
                excludeIndirectColumns,
                excludeColumns);
        }
      } finally {
        if (rs != null) rs.close();
      }
    }
  }
Beispiel #4
0
 public Table(
     Database db,
     String schema,
     String name,
     String comments,
     Properties properties,
     Pattern excludeIndirectColumns,
     Pattern excludeColumns)
     throws SQLException {
   this.schema = schema;
   this.name = name;
   setComments(comments);
   initColumns(db, excludeIndirectColumns, excludeColumns);
   initIndexes(db, properties);
   initPrimaryKeys(db.getMetaData(), properties);
   numRows = Config.getInstance().isNumRowsEnabled() ? fetchNumRows(db, properties) : -1;
 }
  /**
   * @param rs ResultSet from {@link DatabaseMetaData#getImportedKeys(String, String, String)}
   *     rs.getString("FK_NAME"); rs.getString("FKCOLUMN_NAME"); rs.getString("PKTABLE_SCHEM");
   *     rs.getString("PKTABLE_NAME"); rs.getString("PKCOLUMN_NAME");
   * @param tables Map
   * @param db
   * @throws SQLException
   */
  protected void addForeignKey(
      String fkName,
      String fkColName,
      String pkTableSchema,
      String pkTableName,
      String pkColName,
      int updateRule,
      int deleteRule,
      Map<String, Table> tables,
      Pattern excludeIndirectColumns,
      Pattern excludeColumns)
      throws SQLException {
    if (fkName == null) return;

    ForeignKeyConstraint foreignKey = foreignKeys.get(fkName);

    if (foreignKey == null) {
      foreignKey = new ForeignKeyConstraint(this, fkName, updateRule, deleteRule);

      foreignKeys.put(fkName, foreignKey);
    }

    TableColumn childColumn = getColumn(fkColName);
    if (childColumn != null) {
      foreignKey.addChildColumn(childColumn);

      Table parentTable = tables.get(pkTableName);
      String parentSchema = pkTableSchema;
      String baseSchema = Config.getInstance().getSchema();

      // if named table doesn't exist in this schema
      // or exists here but really referencing same named table in another schema
      if (parentTable == null
          || (baseSchema != null && parentSchema != null && !baseSchema.equals(parentSchema))) {
        parentTable =
            db.addRemoteTable(
                parentSchema,
                pkTableName,
                baseSchema,
                properties,
                excludeIndirectColumns,
                excludeColumns);
      }

      if (parentTable != null) {
        TableColumn parentColumn = parentTable.getColumn(pkColName);
        if (parentColumn != null) {
          foreignKey.addParentColumn(parentColumn);

          childColumn.addParent(parentColumn, foreignKey);
          parentColumn.addChild(childColumn, foreignKey);
        } else {
          logger.warning(
              "Couldn't add FK '"
                  + foreignKey.getName()
                  + "' to table '"
                  + this
                  + "' - Column '"
                  + pkColName
                  + "' doesn't exist in table '"
                  + parentTable
                  + "'");
        }
      } else {
        logger.warning(
            "Couldn't add FK '"
                + foreignKey.getName()
                + "' to table '"
                + this
                + "' - Unknown Referenced Table '"
                + pkTableName
                + "'");
      }
    } else {
      logger.warning(
          "Couldn't add FK '"
              + foreignKey.getName()
              + "' to table '"
              + this
              + "' - Column '"
              + fkColName
              + "' doesn't exist");
    }
  }
Beispiel #6
0
  /**
   * @param rs ResultSet from {@link DatabaseMetaData#getImportedKeys(String, String, String)}
   *     rs.getString("FK_NAME"); rs.getString("FKCOLUMN_NAME"); rs.getString("PKTABLE_SCHEM");
   *     rs.getString("PKTABLE_NAME"); rs.getString("PKCOLUMN_NAME");
   * @param tables Map
   * @param db
   * @throws SQLException
   */
  protected void addForeignKey(
      String fkName,
      String fkColName,
      String pkTableSchema,
      String pkTableName,
      String pkColName,
      Map<String, Table> tables,
      Database db,
      Properties properties,
      Pattern excludeIndirectColumns,
      Pattern excludeColumns)
      throws SQLException {
    if (fkName == null) return;

    ForeignKeyConstraint foreignKey = getForeignKey(fkName);

    if (foreignKey == null) {
      foreignKey = new ForeignKeyConstraint(this, fkName);

      foreignKeys.put(foreignKey.getName(), foreignKey);
    }

    TableColumn childColumn = getColumn(fkColName);
    if (childColumn != null) {
      foreignKey.addChildColumn(childColumn);

      Table parentTable = tables.get(pkTableName);
      if (parentTable == null) {
        String otherSchema = pkTableSchema;
        if (otherSchema != null
            && !otherSchema.equals(getSchema())
            && Config.getInstance().isOneOfMultipleSchemas()) {
          parentTable =
              db.addRemoteTable(
                  otherSchema,
                  pkTableName,
                  getSchema(),
                  properties,
                  excludeIndirectColumns,
                  excludeColumns);
        }
      }

      if (parentTable != null) {
        TableColumn parentColumn = parentTable.getColumn(pkColName);
        if (parentColumn != null) {
          foreignKey.addParentColumn(parentColumn);

          childColumn.addParent(parentColumn, foreignKey);
          parentColumn.addChild(childColumn, foreignKey);
        } else {
          System.err.println(
              "Couldn't add FK '"
                  + foreignKey.getName()
                  + "' to table '"
                  + this
                  + "' - Column '"
                  + pkColName
                  + "' doesn't exist in table '"
                  + parentTable
                  + "'");
        }
      } else {
        System.err.println(
            "Couldn't add FK '"
                + foreignKey.getName()
                + "' to table '"
                + this
                + "' - Unknown Referenced Table '"
                + pkTableName
                + "'");
      }
    } else {
      System.err.println(
          "Couldn't add FK '"
              + foreignKey.getName()
              + "' to table '"
              + this
              + "' - Column '"
              + fkColName
              + "' doesn't exist");
    }
  }