blob: f9028884409b8d67ae9f77fcab522e4bf330f52e [file] [log] [blame]
package org.eclipse.persistence.testing.tests.dynamic.simple.mappings;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import junit.framework.Assert;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.dynamic.DynamicClassLoader;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.dynamic.DynamicHelper;
import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.dynamic.DynamicTypeBuilder;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.internal.dynamic.DynamicEntityImpl;
import org.eclipse.persistence.mappings.DirectToFieldMapping;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.queries.ReportQuery;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.testing.tests.dynamic.EclipseLinkORMTest;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
public class SimpleTypes_MultiTable extends EclipseLinkORMTest {
@Test
public void verifyConfig() throws Exception {
DynamicHelper helper = new DynamicHelper(getSharedSession());
ClassDescriptor descriptorA = helper.getSession().getClassDescriptorForAlias("SimpleA");
assertNotNull("No descriptor found for alias='SimpleA'", descriptorA);
DynamicType simpleTypeA = helper.getType("SimpleA");
assertNotNull("'SimpleA' EntityType not found", simpleTypeA);
assertEquals(descriptorA, simpleTypeA.getDescriptor());
assertTrue(descriptorA.hasMultipleTables());
assertEquals(3, descriptorA.getTables().size());
DirectToFieldMapping a_id = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("id");
assertEquals(int.class, a_id.getAttributeClassification());
DirectToFieldMapping a_value1 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value1");
assertEquals(String.class, a_value1.getAttributeClassification());
DirectToFieldMapping a_value2 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value2");
assertEquals(boolean.class, a_value2.getAttributeClassification());
DirectToFieldMapping a_value3 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value3");
assertEquals(String.class, a_value3.getAttributeClassification());
DirectToFieldMapping a_value4 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value4");
assertEquals(double.class, a_value4.getAttributeClassification());
DirectToFieldMapping a_value5 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value5");
assertEquals(String.class, a_value5.getAttributeClassification());
}
@Test
public void verifyProperties() {
DynamicHelper helper = new DynamicHelper(getSharedSession());
DynamicType simpleTypeA = helper.getType("SimpleA");
Assert.assertNotNull(simpleTypeA);
assertEquals(6, simpleTypeA.getNumberOfProperties());
assertEquals("id", simpleTypeA.getPropertiesNames().get(0));
assertEquals(int.class, simpleTypeA.getPropertyType(0));
assertEquals("value1", simpleTypeA.getPropertiesNames().get(1));
assertEquals(String.class, simpleTypeA.getPropertyType(1));
assertEquals("value2", simpleTypeA.getPropertiesNames().get(2));
assertEquals(boolean.class, simpleTypeA.getPropertyType(2));
assertEquals("value3", simpleTypeA.getPropertiesNames().get(3));
assertEquals(String.class, simpleTypeA.getPropertyType(3));
assertEquals("value4", simpleTypeA.getPropertiesNames().get(4));
assertEquals(double.class, simpleTypeA.getPropertyType(4));
assertEquals("value5", simpleTypeA.getPropertiesNames().get(5));
assertEquals(String.class, simpleTypeA.getPropertyType(5));
}
@Test
public void createSimpleA() {
DynamicHelper helper = new DynamicHelper(getSharedSession());
DynamicType simpleTypeA = helper.getType("SimpleA");
Assert.assertNotNull(simpleTypeA);
DynamicEntity a = simpleTypeA.newDynamicEntity();
assertNotNull(a);
assertTrue(a.isSet("id"));
assertFalse(a.isSet("value1"));
assertTrue(a.isSet("value2"));
assertFalse(a.isSet("value3"));
assertTrue(a.isSet("value4"));
assertFalse(a.isSet("value5"));
}
@Test
public void persistSimpleA() {
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
DynamicType simpleTypeA = helper.getType("SimpleA");
Assert.assertNotNull(simpleTypeA);
DynamicEntity simpleInstance = simpleTypeA.newDynamicEntity();
simpleInstance.set("id", 1);
simpleInstance.set("value1", "A1");
UnitOfWork uow = session.acquireUnitOfWork();
uow.registerNewObject(simpleInstance);
uow.commit();
ReportQuery countQuery = helper.newReportQuery("SimpleA", new ExpressionBuilder());
countQuery.addCount();
countQuery.setShouldReturnSingleValue(true);
int simpleCount = ((Number) session.executeQuery(countQuery)).intValue();
Assert.assertEquals(1, simpleCount);
session.release();
}
@Test
public void verifyChangeTracking() {
persistSimpleA();
DynamicHelper helper = new DynamicHelper(getSharedSession());
Session session = getSession();
DynamicType simpleTypeA = helper.getType("SimpleA");
Assert.assertNotNull(simpleTypeA);
UnitOfWork uow = session.acquireUnitOfWork();
ReadObjectQuery findQuery = helper.newReadObjectQuery("SimpleA");
findQuery.setSelectionCriteria(findQuery.getExpressionBuilder().get("id").equal(1));
DynamicEntityImpl a = (DynamicEntityImpl) uow.executeQuery(findQuery);
assertNotNull(a);
assertNotNull(a._persistence_getPropertyChangeListener());
uow.release();
session.release();
}
@Override
protected DatabaseSession createSharedSession() {
DatabaseSession shared = super.createSharedSession();
DynamicHelper helper = new DynamicHelper(shared);
DynamicClassLoader dcl = helper.getDynamicClassLoader();
Class<?> simpleTypeA = dcl.createDynamicClass("model.SimpleA");
DynamicTypeBuilder typeBuilder = new DynamicTypeBuilder(simpleTypeA, null, "SIMPLE_TYPE_A", "SIMPLE_TYPE_B", "SIMPLE_TYPE_C");
typeBuilder.setPrimaryKeyFields("SIMPLE_TYPE_A.SID");
typeBuilder.addDirectMapping("id", int.class, "SIMPLE_TYPE_A.SID");
typeBuilder.addDirectMapping("value1", String.class, "SIMPLE_TYPE_A.VAL_1");
typeBuilder.addDirectMapping("value2", boolean.class, "SIMPLE_TYPE_B.VAL_2");
typeBuilder.addDirectMapping("value3", String.class, "SIMPLE_TYPE_B.VAL_3");
typeBuilder.addDirectMapping("value4", double.class, "SIMPLE_TYPE_C.VAL_4");
typeBuilder.addDirectMapping("value5", String.class, "SIMPLE_TYPE_C.VAL_5");
shared.login();
helper.addTypes(true, true, typeBuilder.getType());
return shared;
}
@After
public void clearDynamicTables() {
getSharedSession().executeNonSelectingSQL("DELETE FROM SIMPLE_TYPE_C");
getSharedSession().executeNonSelectingSQL("DELETE FROM SIMPLE_TYPE_B");
getSharedSession().executeNonSelectingSQL("DELETE FROM SIMPLE_TYPE_A");
}
@AfterClass
public static void shutdown() {
sharedSession.executeNonSelectingSQL("DROP TABLE SIMPLE_TYPE_A CASCADE CONSTRAINTS");
sharedSession.executeNonSelectingSQL("DROP TABLE SIMPLE_TYPE_B CASCADE CONSTRAINTS");
sharedSession.executeNonSelectingSQL("DROP TABLE SIMPLE_TYPE_C CASCADE CONSTRAINTS");
}
}