Exemplo n.º 1
0
  /** Test of the retrieval of PKs. */
  public void testPrimaryKeyRetrieval() {
    addClassesToSchema(new Class[] {SchemaClass1.class, SchemaClass2.class});

    PersistenceManager pm = pmf.getPersistenceManager();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;

    // Retrieve the table for SchemaClass1
    ClassLoaderResolver clr = storeMgr.getNucleusContext().getClassLoaderResolver(null);
    DatastoreClass table1 = databaseMgr.getDatastoreClass(SchemaClass1.class.getName(), clr);
    DatastoreClass table2 = databaseMgr.getDatastoreClass(SchemaClass2.class.getName(), clr);

    // Check for the FK using the schema handler
    StoreSchemaHandler handler = databaseMgr.getSchemaHandler();
    Connection con =
        (Connection)
            databaseMgr
                .getConnection(((JDOPersistenceManager) pm).getExecutionContext())
                .getConnection();
    RDBMSTablePKInfo pkInfo1 =
        (RDBMSTablePKInfo) handler.getSchemaData(con, "primary-keys", new Object[] {table1});
    RDBMSTablePKInfo pkInfo2 =
        (RDBMSTablePKInfo) handler.getSchemaData(con, "primary-keys", new Object[] {table2});

    // Expecting 2 PK columns for SchemaClass1
    // TODO Enable checks on the PK name (when JDBC drivers return it correctly)
    assertEquals(
        "Number of PKs for table " + table1 + " is wrong", 2, pkInfo1.getNumberOfChildren());
    PrimaryKeyInfo pk = (PrimaryKeyInfo) pkInfo1.getChild(0);
    assertEquals("Column Name is wrong", "TABLE1_ID1", pk.getProperty("column_name"));
    //        assertEquals("PK Name is wrong", "TABLE1_PK", pk.getProperty("pk_name"));
    pk = (PrimaryKeyInfo) pkInfo1.getChild(1);
    assertEquals("Column Name is wrong", "TABLE1_ID2", pk.getProperty("column_name"));
    //        assertEquals("PK Name is wrong", "TABLE1_PK", pk.getProperty("pk_name"));

    // Expecting 1 PK column for SchemaClass
    assertEquals(
        "Number of PKs for table " + table1 + " is wrong", 1, pkInfo2.getNumberOfChildren());
    pk = (PrimaryKeyInfo) pkInfo2.getChild(0);
    assertEquals("Column Name is wrong", "TABLE2_ID", pk.getProperty("column_name"));
    //        assertEquals("PK Name is wrong", "TABLE2_PK", pk.getProperty("pk_name"));
  }