Search in sources :

Example 56 with ManagedConnection

use of org.datanucleus.store.connection.ManagedConnection in project tests by datanucleus.

the class SchemaTest method testArrayNonPC.

/**
 * Test the schema generation for an array of primitives, stored serialised and stored in
 * a join table.
 */
public void testArrayNonPC() throws Exception {
    addClassesToSchema(new Class[] { IntArray.class });
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;
    Connection conn = null;
    ManagedConnection mconn = null;
    try {
        tx.begin();
        HashSet tableColumnNames = new HashSet();
        mconn = databaseMgr.getConnectionManager().getConnection(0);
        conn = (Connection) mconn.getConnection();
        DatabaseMetaData dmd = conn.getMetaData();
        // Main table with serialised int[]
        tableColumnNames.add("INTARRAY_ID");
        tableColumnNames.add("ARRAY1");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "INTARRAY", tableColumnNames);
        tableColumnNames.clear();
        // Join table for int[]
        tableColumnNames.add("ARRAY_ID_OID");
        tableColumnNames.add("INT_VALUE");
        tableColumnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "ARRAY_INTARRAY", tableColumnNames);
        tx.commit();
    } catch (Exception e) {
        LOG.error(e);
        fail("Specification of table and column names for serialised array is incorrect. Exception was thrown : " + e.getMessage());
    } finally {
        if (conn != null) {
            mconn.close();
        }
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : Transaction(javax.jdo.Transaction) JDOPersistenceManager(org.datanucleus.api.jdo.JDOPersistenceManager) PersistenceManager(javax.jdo.PersistenceManager) Connection(java.sql.Connection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) DatabaseMetaData(java.sql.DatabaseMetaData) JDOFatalUserException(javax.jdo.JDOFatalUserException) JDOFatalInternalException(javax.jdo.JDOFatalInternalException) SQLException(java.sql.SQLException) RDBMSStoreManager(org.datanucleus.store.rdbms.RDBMSStoreManager) HashSet(java.util.HashSet)

Example 57 with ManagedConnection

use of org.datanucleus.store.connection.ManagedConnection in project tests by datanucleus.

the class SchemaTest method testEmbeddedPCSchemaWithEmbeddedFlag.

/**
 * Test the schema generation for embedded PC objects when just using "embedded=true".
 * Checks that the tables are correctly generated and the correct columns are present.
 */
public void testEmbeddedPCSchemaWithEmbeddedFlag() throws Exception {
    addClassesToSchema(new Class[] { EmbeddedA.class });
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;
    Connection conn = null;
    ManagedConnection mconn = null;
    try {
        tx.begin();
        HashSet embeddedColumnNames = new HashSet();
        embeddedColumnNames.add("EMBEDDEDA_ID");
        embeddedColumnNames.add("EMBEDDEDB_ID");
        embeddedColumnNames.add("NAME");
        mconn = databaseMgr.getConnectionManager().getConnection(0);
        conn = (Connection) mconn.getConnection();
        DatabaseMetaData dmd = conn.getMetaData();
        // Check container columns
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "EMBEDDEDA", embeddedColumnNames);
        tx.commit();
    } catch (Exception e) {
        LOG.error(e);
        fail("Specification of table and column names for embedded PC object is incorrect. Exception was thrown : " + e.getMessage());
    } finally {
        if (conn != null) {
            mconn.close();
        }
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : Transaction(javax.jdo.Transaction) JDOPersistenceManager(org.datanucleus.api.jdo.JDOPersistenceManager) PersistenceManager(javax.jdo.PersistenceManager) Connection(java.sql.Connection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) DatabaseMetaData(java.sql.DatabaseMetaData) JDOFatalUserException(javax.jdo.JDOFatalUserException) JDOFatalInternalException(javax.jdo.JDOFatalInternalException) SQLException(java.sql.SQLException) RDBMSStoreManager(org.datanucleus.store.rdbms.RDBMSStoreManager) HashSet(java.util.HashSet)

Example 58 with ManagedConnection

use of org.datanucleus.store.connection.ManagedConnection in project tests by datanucleus.

the class SchemaTest method testOverridingColumnsBaseSubclassTableSubNewTable.

/**
 * Test for overriding of columns where the base class uses "subclass-table" and the sub class uses "new-table".
 * The expected result is for the subclass table to the columns for the base class but using the overridden names.
 */
public void testOverridingColumnsBaseSubclassTableSubNewTable() throws Exception {
    addClassesToSchema(new Class[] { MBase.class, MSub1.class, MSub2.class, MRelated.class });
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;
    Connection conn = null;
    ManagedConnection mconn = null;
    try {
        tx.begin();
        mconn = databaseMgr.getConnectionManager().getConnection(0);
        conn = (Connection) mconn.getConnection();
        DatabaseMetaData dmd = conn.getMetaData();
        HashSet columnNames = new HashSet();
        columnNames.add("ID");
        columnNames.add("VALUE");
        columnNames.add("BASE_2A_NAME");
        columnNames.add("BASE_2A_RELATED_ID");
        // Check base table column names
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "M_SUB1_OVERRIDE", columnNames);
        columnNames = new HashSet();
        columnNames.add("ID");
        columnNames.add("VALUE");
        columnNames.add("BASE_2B_NAME");
        columnNames.add("BASE_2B_RELATED_ID");
        // Check sub table column names
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "M_SUB2_OVERRIDE", columnNames);
        tx.commit();
    } catch (Exception e) {
        LOG.error(e);
        fail("Specification of table and column names must have been ignored when creating the schema for " + "inheritance case where the fields were overridden. Exception was thrown : " + e.getMessage());
    } finally {
        if (conn != null) {
            mconn.close();
        }
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : Transaction(javax.jdo.Transaction) JDOPersistenceManager(org.datanucleus.api.jdo.JDOPersistenceManager) PersistenceManager(javax.jdo.PersistenceManager) Connection(java.sql.Connection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) DatabaseMetaData(java.sql.DatabaseMetaData) JDOFatalUserException(javax.jdo.JDOFatalUserException) JDOFatalInternalException(javax.jdo.JDOFatalInternalException) SQLException(java.sql.SQLException) RDBMSStoreManager(org.datanucleus.store.rdbms.RDBMSStoreManager) HashSet(java.util.HashSet)

Example 59 with ManagedConnection

use of org.datanucleus.store.connection.ManagedConnection in project tests by datanucleus.

the class SchemaTest method testSet.

/**
 * Test the schema generation for Sets with all possible types of declarations.
 */
public void testSet() throws Exception {
    addClassesToSchema(new Class[] { SetHolder.class });
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;
    Connection conn = null;
    ManagedConnection mconn = null;
    try {
        tx.begin();
        mconn = databaseMgr.getConnectionManager().getConnection(0);
        conn = (Connection) mconn.getConnection();
        DatabaseMetaData dmd = conn.getMetaData();
        HashSet columnNames = new HashSet();
        columnNames.add("SETHOLDER_ID");
        columnNames.add("NAME");
        // Set<String> serialised
        columnNames.add("SETNONPC_SERIAL_1");
        // Set<Date> serialised
        columnNames.add("SETNONPC_SERIAL_2");
        // Set<String> with no join table, so serialised
        columnNames.add("SETNONPC_1");
        // Set<Date> with no join table, so serialised
        columnNames.add("SETNONPC_2");
        // Set<PC> embedded with no join table, so serialised
        columnNames.add("SETPC_EMBEDDED");
        // FK for self-referring Set
        columnNames.add("SETHOLDER_FK2_ID_OID");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER", columnNames);
        columnNames.clear();
        // Set<PC> using join table
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_ID");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_PC", columnNames);
        columnNames.clear();
        // Set<String> using join table
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("STRING_ELEMENT");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_NONPC1", columnNames);
        columnNames.clear();
        // Set<Date> using join table
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("DATE_ELEMENT");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_NONPC2", columnNames);
        columnNames.clear();
        // Set<String> using join table with no schema info
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("ELEMENT");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_NONPC3", columnNames);
        columnNames.clear();
        // Set<PC> using join table with elements serialised
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_SERIAL");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_PCSERIAL", columnNames);
        columnNames.clear();
        // Set<PC> using shared join table
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_ID");
        columnNames.add("COLLECTION_TYPE");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "SETHOLDER_SHARED", columnNames);
        columnNames.clear();
        // Set<PC> using FK
        columnNames.add("PCFKSETELEMENT_ID");
        columnNames.add("NAME");
        columnNames.add("SETHOLDER_ID_OID");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "PCFKSETELEMENT", columnNames);
        columnNames.clear();
        // Set<PC> using FK shared
        columnNames.add("PCFKSETELEMENTSHARE_ID");
        columnNames.add("NAME");
        columnNames.add("SETHOLDER_ID_OID");
        columnNames.add("COLLECTION_TYPE");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "PCFKSETELEMENTSHARE", columnNames);
        columnNames.clear();
        tx.commit();
    } catch (Exception e) {
        LOG.error(e);
        fail("Specification of table and column names for various types of Set fields is incorrect. Exception was thrown : " + e.getMessage());
    } finally {
        if (conn != null) {
            mconn.close();
        }
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : Transaction(javax.jdo.Transaction) JDOPersistenceManager(org.datanucleus.api.jdo.JDOPersistenceManager) PersistenceManager(javax.jdo.PersistenceManager) Connection(java.sql.Connection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) DatabaseMetaData(java.sql.DatabaseMetaData) JDOFatalUserException(javax.jdo.JDOFatalUserException) JDOFatalInternalException(javax.jdo.JDOFatalInternalException) SQLException(java.sql.SQLException) RDBMSStoreManager(org.datanucleus.store.rdbms.RDBMSStoreManager) HashSet(java.util.HashSet)

Example 60 with ManagedConnection

use of org.datanucleus.store.connection.ManagedConnection in project tests by datanucleus.

the class SchemaTest method testList.

/**
 * Test the schema generation for Lists with all possible types of declarations.
 */
public void testList() throws Exception {
    addClassesToSchema(new Class[] { ListHolder.class });
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    RDBMSStoreManager databaseMgr = (RDBMSStoreManager) storeMgr;
    Connection conn = null;
    ManagedConnection mconn = null;
    try {
        tx.begin();
        mconn = databaseMgr.getConnectionManager().getConnection(0);
        conn = (Connection) mconn.getConnection();
        DatabaseMetaData dmd = conn.getMetaData();
        HashSet columnNames = new HashSet();
        columnNames.add("LISTHOLDER_ID");
        // List<String> serialised
        columnNames.add("LISTNONPC_SERIAL_1");
        // List<Date> serialised
        columnNames.add("LISTNONPC_SERIAL_2");
        // List<String> with no join table, so serialised
        columnNames.add("LISTNONPC_1");
        // List<Date> with no join table, so serialised
        columnNames.add("LISTNONPC_2");
        // List<PC> embedded with no join table, so serialised
        columnNames.add("LISTPC_EMBEDDED");
        // FK for self-referring List
        columnNames.add("LISTHOLDER_FK2_ID_OID");
        // IDX for self-referring List
        columnNames.add("LISTHOLDER_FK2_IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER", columnNames);
        columnNames.clear();
        // Liset<PC> using join table
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_ID");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER_PC", columnNames);
        columnNames.clear();
        // List<String> using join table
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("STRING_ELEMENT");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER_NONPC1", columnNames);
        columnNames.clear();
        // List<Date> using join table
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("DATE_ELEMENT");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER_NONPC2", columnNames);
        columnNames.clear();
        // List<PC> using join table with elements serialised
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_SERIAL");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER_PCSERIAL", columnNames);
        columnNames.clear();
        // List<PC> using shared join table
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("PCJOINELEMENT_ID");
        columnNames.add("IDX");
        columnNames.add("COLLECTION_TYPE");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "LISTHOLDER_SHARED", columnNames);
        columnNames.clear();
        // List<PC> using FK
        columnNames.add("PCFKLISTELEMENT_ID");
        columnNames.add("NAME");
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("LISTHOLDER2_ID_OID");
        columnNames.add("IDX");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "PCFKLISTELEMENT", columnNames);
        columnNames.clear();
        // List<PC> using FK shared
        columnNames.add("PCFKLISTELEMENTSHARE_ID");
        columnNames.add("NAME");
        columnNames.add("LISTHOLDER_ID_OID");
        columnNames.add("IDX");
        columnNames.add("COLLECTION_TYPE");
        RDBMSTestHelper.checkColumnsForTable(storeMgr, dmd, "PCFKLISTELEMENTSHARE", columnNames);
        columnNames.clear();
        tx.commit();
    } catch (Exception e) {
        LOG.error(e);
        fail("Specification of table and column names for various types of List fields is incorrect. Exception was thrown : " + e.getMessage());
    } finally {
        if (conn != null) {
            mconn.close();
        }
        if (tx.isActive()) {
            tx.rollback();
        }
        pm.close();
    }
}
Also used : Transaction(javax.jdo.Transaction) JDOPersistenceManager(org.datanucleus.api.jdo.JDOPersistenceManager) PersistenceManager(javax.jdo.PersistenceManager) Connection(java.sql.Connection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) ManagedConnection(org.datanucleus.store.connection.ManagedConnection) DatabaseMetaData(java.sql.DatabaseMetaData) JDOFatalUserException(javax.jdo.JDOFatalUserException) JDOFatalInternalException(javax.jdo.JDOFatalInternalException) SQLException(java.sql.SQLException) RDBMSStoreManager(org.datanucleus.store.rdbms.RDBMSStoreManager) HashSet(java.util.HashSet)

Aggregations

ManagedConnection (org.datanucleus.store.connection.ManagedConnection)157 SQLException (java.sql.SQLException)125 RDBMSStoreManager (org.datanucleus.store.rdbms.RDBMSStoreManager)80 Connection (java.sql.Connection)75 NucleusDataStoreException (org.datanucleus.exceptions.NucleusDataStoreException)74 PreparedStatement (java.sql.PreparedStatement)70 ExecutionContext (org.datanucleus.ExecutionContext)64 SQLController (org.datanucleus.store.rdbms.SQLController)63 HashSet (java.util.HashSet)62 DatabaseMetaData (java.sql.DatabaseMetaData)58 PersistenceManager (javax.jdo.PersistenceManager)46 Transaction (javax.jdo.Transaction)46 JDOFatalUserException (javax.jdo.JDOFatalUserException)45 JDOPersistenceManager (org.datanucleus.api.jdo.JDOPersistenceManager)45 ResultSet (java.sql.ResultSet)37 JDOFatalInternalException (javax.jdo.JDOFatalInternalException)24 JDODataStoreException (javax.jdo.JDODataStoreException)21 JDOUserException (javax.jdo.JDOUserException)21 MappedDatastoreException (org.datanucleus.store.rdbms.exceptions.MappedDatastoreException)21 EntityTransaction (javax.persistence.EntityTransaction)19