This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push: new 7365715b5 CAY-2552 fix bug with flattened attributes new 2965b9a0c Merge pull request #556 from aperaverzeu/4.3-FEATURE-CAY-2552-ColumnQuery-bug-with-flattened-attribute 7365715b5 is described below commit 7365715b5b2bb37fb6007ca765135225995ba06c Author: Aliaksei Peraverzeu <dev.mroja...@gmail.com> AuthorDate: Fri Dec 30 13:49:57 2022 +0300 CAY-2552 fix bug with flattened attributes --- .../select/DescriptorColumnExtractor.java | 17 ++- .../access/DataContextFlattenedAttributesIT.java | 147 ++++++++++++++++++++- .../cayenne/access/VerticalInheritanceIT.java | 109 ++++++++++++++- .../select/DescriptorColumnExtractorIT.java | 83 ++++++++++++ .../map/DefaultEntityResultSegmentTest.java | 54 ++++++++ .../testdo/inheritance_vertical/auto/_Iv1Root.java | 6 +- .../testdo/inheritance_vertical/auto/_Iv1Sub1.java | 6 +- .../testdo/inheritance_vertical/auto/_Iv2Root.java | 6 +- .../testdo/inheritance_vertical/auto/_Iv2Sub1.java | 5 +- .../testdo/inheritance_vertical/auto/_Iv2X.java | 7 +- .../inheritance_vertical/auto/_IvAbstract.java | 6 +- .../testdo/inheritance_vertical/auto/_IvBase.java | 6 +- .../inheritance_vertical/auto/_IvBaseWithLock.java | 6 +- .../inheritance_vertical/auto/_IvConcrete.java | 4 +- .../inheritance_vertical/auto/_IvGenKeyRoot.java | 6 +- .../inheritance_vertical/auto/_IvGenKeySub.java | 7 +- .../testdo/inheritance_vertical/auto/_IvImpl.java | 5 +- .../inheritance_vertical/auto/_IvImplWithLock.java | 5 +- .../testdo/inheritance_vertical/auto/_IvOther.java | 6 +- .../testdo/inheritance_vertical/auto/_IvRoot.java | 6 +- .../testdo/inheritance_vertical/auto/_IvSub1.java | 26 +++- .../inheritance_vertical/auto/_IvSub1Sub1.java | 6 +- .../testdo/inheritance_vertical/auto/_IvSub2.java | 6 +- .../testdo/inheritance_vertical/auto/_IvSub3.java | 5 +- .../test/resources/inheritance-vertical.map.xml | 4 + 25 files changed, 514 insertions(+), 30 deletions(-) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java index 7f8025976..0ecd53fe4 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractor.java @@ -118,9 +118,16 @@ class DescriptorColumnExtractor extends BaseColumnExtractor implements PropertyV int count = result.getDbAttributes().size(); for(int i=0; i<count; i++) { ResultNodeDescriptor resultNodeDescriptor = processTranslationResult(result, i); - if(resultNodeDescriptor != null && i == count - 1) { + if(resultNodeDescriptor != null) { resultNodeDescriptor.setJavaType(oa.getType()); - addEntityResultField(oa.getDbAttribute()); + if (result.getDbAttributes().size() >= 2) { + DbAttribute dbAttribute = result.getDbAttributes().get(i); + String dataRowKey = result.getAttributePaths().get(i) + "." + dbAttribute.getName(); + resultNodeDescriptor.setDataRowKey(dataRowKey); + addEntityResultField(dataRowKey); + } else { + addEntityResultField(result.getDbAttributes().get(i)); + } } } @@ -177,6 +184,12 @@ class DescriptorColumnExtractor extends BaseColumnExtractor implements PropertyV } } + private void addEntityResultField(String nameForFlattenedAttribute) { + if (context.getQuery().needsResultSetMapping()) { + entityResult.addDbField(nameForFlattenedAttribute, nameForFlattenedAttribute); + } + } + @Override public boolean visitToMany(ToManyProperty property) { return true; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java index adb152b79..4ec42b608 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextFlattenedAttributesIT.java @@ -22,8 +22,11 @@ package org.apache.cayenne.access; import org.apache.cayenne.Cayenne; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.PersistenceState; +import org.apache.cayenne.access.translator.select.DefaultSelectTranslator; import org.apache.cayenne.configuration.server.ServerRuntime; import org.apache.cayenne.di.Inject; +import org.apache.cayenne.map.DefaultEntityResultSegment; +import org.apache.cayenne.query.ColumnSelect; import org.apache.cayenne.query.EJBQLQuery; import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.SelectById; @@ -37,6 +40,7 @@ import org.apache.cayenne.testdo.testmap.Gallery; import org.apache.cayenne.unit.di.server.CayenneProjects; import org.apache.cayenne.unit.di.server.ServerCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; +import org.junit.Before; import org.junit.Test; import java.math.BigDecimal; @@ -61,11 +65,17 @@ public class DataContextFlattenedAttributesIT extends ServerCase { @Inject private DBHelper dbHelper; - private void createTestDataSet() throws Exception { - TableHelper tArtist = new TableHelper(dbHelper, "ARTIST"); + private TableHelper tArtist; + private TableHelper tPainting; + private TableHelper tPaintingInfo; + private TableHelper tGallery; + + @Before + public void createTestDataSetStructure() { + tArtist = new TableHelper(dbHelper, "ARTIST"); tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH"); - TableHelper tPainting = new TableHelper(dbHelper, "PAINTING"); + tPainting = new TableHelper(dbHelper, "PAINTING"); tPainting.setColumns( "PAINTING_ID", "PAINTING_TITLE", @@ -78,12 +88,14 @@ public class DataContextFlattenedAttributesIT extends ServerCase { Types.DECIMAL, Types.INTEGER); - TableHelper tPaintingInfo = new TableHelper(dbHelper, "PAINTING_INFO"); + tPaintingInfo = new TableHelper(dbHelper, "PAINTING_INFO"); tPaintingInfo.setColumns("PAINTING_ID", "TEXT_REVIEW"); - TableHelper tGallery = new TableHelper(dbHelper, "GALLERY"); + tGallery = new TableHelper(dbHelper, "GALLERY"); tGallery.setColumns("GALLERY_ID", "GALLERY_NAME"); + } + private void createTestDataSet() throws Exception { long dateBase = System.currentTimeMillis(); for (int i = 1; i <= 4; i++) { tArtist.insert(i + 1, "artist" + i, new java.sql.Date(dateBase @@ -193,6 +205,115 @@ public class DataContextFlattenedAttributesIT extends ServerCase { assertNotNull(objects); } + @Test + public void testColumnQueryWithFlattenedAttribute() throws Exception { + createTestDataSet(); + ColumnSelect<Object[]> originalQuery = ObjectSelect.query(CompoundPaintingLongNames.class) + .columns(CompoundPaintingLongNames.SELF); + + DataNode dataNode = context.getParentDataDomain().getDataNodes().iterator().next(); + DefaultSelectTranslator translator = + new DefaultSelectTranslator(originalQuery, dataNode.getAdapter(), context.getEntityResolver()); + + translator.getSql(); + + DefaultEntityResultSegment segment = (DefaultEntityResultSegment) originalQuery + .getMetaData(context.getEntityResolver()) + .getResultSetMapping() + .get(0); + + assertEquals(12, segment.getFields().size()); + assertEquals(12, translator.getResultColumns().length); + assertEquals(segment.getFields().size(), translator.getResultColumns().length); + } + + @Test + public void testSelectColumnQuery() throws Exception { + createTestDataWithDeletion(); + + ColumnSelect<CompoundPaintingLongNames> originalQuery = ObjectSelect.query(CompoundPaintingLongNames.class) + .column(CompoundPaintingLongNames.SELF); + + CompoundPaintingLongNames beforeCompoundPainting = originalQuery + .where(CompoundPaintingLongNames.PAINTING_ID_PK_PROPERTY.eq(1)) + .selectOne(context); + + String beforeArtistNameFromContext = beforeCompoundPainting.getArtistLongName(); + String beforePaintingTitleFromContext = beforeCompoundPainting.getPaintingTitle(); + + String beforeArtistNameFromDatabase = (String) tArtist.selectAll().get(0)[1]; + String beforePaintingTitleFromDatabase = (String) tPainting.selectAll().get(0)[1]; + + assertNotNull(beforeArtistNameFromDatabase); + assertNotNull(beforePaintingTitleFromDatabase); + + assertEquals(beforeArtistNameFromDatabase.trim(), beforeArtistNameFromContext); + assertEquals(beforePaintingTitleFromDatabase.trim(), beforePaintingTitleFromContext); + + beforeCompoundPainting.setArtistLongName("some"); + beforeCompoundPainting.setPaintingTitle("omes"); + context.commitChanges(); + + CompoundPaintingLongNames afterCompoundPainting = originalQuery + .where(CompoundPaintingLongNames.PAINTING_ID_PK_PROPERTY.eq(1)) + .selectOne(context); + + String afterArtistNameFromContext = afterCompoundPainting.getArtistLongName(); + String afterPaintingTitleFromContext = afterCompoundPainting.getPaintingTitle(); + + String afterArtistNameFromDatabase = (String) tArtist.selectAll().get(0)[1]; + String afterPaintingTitleFromDatabase = (String) tPainting.selectAll().get(0)[1]; + + assertNotNull(afterArtistNameFromDatabase); + assertNotNull(afterPaintingTitleFromDatabase); + + assertEquals((afterArtistNameFromDatabase).trim(), afterArtistNameFromContext); + assertEquals((afterPaintingTitleFromDatabase).trim(), afterPaintingTitleFromContext); + } + + @Test + public void testObjectSelectQuery() throws Exception { + createTestDataWithDeletion(); + + ObjectSelect<CompoundPaintingLongNames> originalQuery = ObjectSelect.query(CompoundPaintingLongNames.class); + + CompoundPaintingLongNames beforeCompoundPainting = originalQuery + .where(CompoundPaintingLongNames.PAINTING_ID_PK_PROPERTY.eq(1)) + .selectOne(context); + + String beforeArtistNameFromContext = beforeCompoundPainting.getArtistLongName(); + String beforePaintingTitleFromContext = beforeCompoundPainting.getPaintingTitle(); + + String beforeArtistNameFromDatabase = (String) tArtist.selectAll().get(0)[1]; + String beforePaintingTitleFromDatabase = (String) tPainting.selectAll().get(0)[1]; + + assertNotNull(beforeArtistNameFromDatabase); + assertNotNull(beforePaintingTitleFromDatabase); + + assertEquals(beforeArtistNameFromDatabase.trim(), beforeArtistNameFromContext); + assertEquals(beforePaintingTitleFromDatabase.trim(), beforePaintingTitleFromContext); + + beforeCompoundPainting.setArtistLongName("some"); + beforeCompoundPainting.setPaintingTitle("omes"); + context.commitChanges(); + + CompoundPaintingLongNames afterCompoundPainting = originalQuery + .where(CompoundPaintingLongNames.PAINTING_ID_PK_PROPERTY.eq(1)) + .selectOne(context); + + String afterArtistNameFromContext = afterCompoundPainting.getArtistLongName(); + String afterPaintingTitleFromContext = afterCompoundPainting.getPaintingTitle(); + + String afterArtistNameFromDatabase = (String) tArtist.selectAll().get(0)[1]; + String afterPaintingTitleFromDatabase = (String) tPainting.selectAll().get(0)[1]; + + assertNotNull(afterArtistNameFromDatabase); + assertNotNull(afterPaintingTitleFromDatabase); + + assertEquals(afterArtistNameFromDatabase.trim(), afterArtistNameFromContext); + assertEquals(afterPaintingTitleFromDatabase.trim(), afterPaintingTitleFromContext); + } + @Test public void testSelectEJQBQL() throws Exception { createTestDataSet(); @@ -423,4 +544,20 @@ public class DataContextFlattenedAttributesIT extends ServerCase { assertEquals("TX1", o3.getTextReview()); } } + + /** + * Guarantee initial structure of database via deletion all data inside + */ + private void createTestDataWithDeletion() throws Exception { + tPaintingInfo.deleteAll(); + tPainting.deleteAll(); + tGallery.deleteAll(); + tArtist.deleteAll(); + + long dateBase = System.currentTimeMillis(); + tArtist.insert(1, "artist1", new java.sql.Date(dateBase + 1000 * 60 * 60 * 24)); + tGallery.insert(1, "gallery1"); + tPainting.insert(1, "painting1", 1, new BigDecimal("1000"), 1); + tPaintingInfo.insert(1, "painting review1"); + } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java index 7bcbff3ea..645a3f68b 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java @@ -22,6 +22,7 @@ import org.apache.cayenne.Cayenne; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.configuration.server.ServerRuntime; import org.apache.cayenne.di.Inject; +import org.apache.cayenne.query.ColumnSelect; import org.apache.cayenne.query.EJBQLQuery; import org.apache.cayenne.query.ObjectSelect; import org.apache.cayenne.query.SelectById; @@ -262,14 +263,15 @@ public class VerticalInheritanceIT extends ServerCase { ivRootTable.setColumns("ID", "NAME", "DISCRIMINATOR"); TableHelper ivSub1Table = new TableHelper(dbHelper, "IV_SUB1"); - ivSub1Table.setColumns("ID", "SUB1_NAME"); + ivSub1Table.setColumns("ID", "SUB1_NAME", "SUB1_PRICE"); TableHelper ivSub1Sub1Table = new TableHelper(dbHelper, "IV_SUB1_SUB1"); - ivSub1Sub1Table.setColumns("ID", "SUB1_SUB1_NAME"); + ivSub1Sub1Table.setColumns("ID", "SUB1_SUB1_NAME", "SUB1_SUB1_PRICE"); IvSub1Sub1 sub1Sub1 = context.newObject(IvSub1Sub1.class); sub1Sub1.setName("XyZN"); sub1Sub1.setSub1Name("mDA"); + sub1Sub1.setPrice(42.0); sub1Sub1.setSub1Sub1Name("3DQa"); sub1Sub1.getObjectContext().commitChanges(); @@ -285,14 +287,16 @@ public class VerticalInheritanceIT extends ServerCase { assertEquals("IvSub1Sub1", data[2]); Object[] subdata = ivSub1Table.select(); - assertEquals(2, subdata.length); + assertEquals(3, subdata.length); assertEquals(data[0], subdata[0]); assertEquals("mDA", subdata[1]); + assertNull(subdata[2]); Object[] subsubdata = ivSub1Sub1Table.select(); - assertEquals(2, subsubdata.length); + assertEquals(3, subsubdata.length); assertEquals(data[0], subsubdata[0]); assertEquals("3DQa", subsubdata[1]); + assertNull(subdata[2]); } @Test @@ -748,4 +752,101 @@ public class VerticalInheritanceIT extends ServerCase { assertTrue(Cayenne.intPKForObject(sub) > 0); } + + @Test + public void testColumnSelectVerticalInheritance_Sub1() throws SQLException { + TableHelper ivRootTable = new TableHelper(dbHelper, "IV_ROOT"); + ivRootTable.setColumns("ID", "NAME", "DISCRIMINATOR"); + + TableHelper ivSub1Table = new TableHelper(dbHelper, "IV_SUB1"); + ivSub1Table.setColumns("ID", "SUB1_NAME", "SUB1_PRICE"); + + TableHelper ivSub1Sub1Table = new TableHelper(dbHelper, "IV_SUB1_SUB1"); + ivSub1Sub1Table.setColumns("ID", "SUB1_SUB1_NAME", "SUB1_SUB1_PRICE"); + + IvSub1Sub1 sub1Sub1 = context.newObject(IvSub1Sub1.class); + sub1Sub1.setName("XyZN"); + sub1Sub1.setSub1Name("mDA"); + sub1Sub1.setPrice(42.0); + sub1Sub1.setSub1Sub1Name("3DQa"); + sub1Sub1.getObjectContext().commitChanges(); + + assertEquals(1, ivRootTable.getRowCount()); + assertEquals(1, ivSub1Table.getRowCount()); + assertEquals(1, ivSub1Sub1Table.getRowCount()); + + Object[] data = ivRootTable.select(); + assertEquals(3, data.length); + assertTrue(data[0] instanceof Number); + assertTrue(((Number) data[0]).intValue() > 0); + assertEquals("XyZN", data[1]); + assertEquals("IvSub1Sub1", data[2]); + + Object[] subdata = ivSub1Table.select(); + assertEquals(3, subdata.length); + assertEquals(data[0], subdata[0]); + assertEquals("mDA", subdata[1]); + + Object[] subsubdata = ivSub1Sub1Table.select(); + assertEquals(3, subsubdata.length); + assertEquals(data[0], subsubdata[0]); + assertEquals("3DQa", subsubdata[1]); + + ColumnSelect<IvSub1> originalQueryForSub1 = ObjectSelect.query(IvSub1.class) + .column(IvSub1.SELF); + + IvSub1 result = originalQueryForSub1.selectOne(context); + assertEquals("XyZN", result.getName()); + assertEquals(Double.valueOf(42.0), result.getPrice()); + assertEquals("mDA", result.getSub1Name()); + } + + @Test + public void testColumnSelectVerticalInheritance_Sub1Sub1() throws SQLException { + TableHelper ivRootTable = new TableHelper(dbHelper, "IV_ROOT"); + ivRootTable.setColumns("ID", "NAME", "DISCRIMINATOR"); + + TableHelper ivSub1Table = new TableHelper(dbHelper, "IV_SUB1"); + ivSub1Table.setColumns("ID", "SUB1_NAME", "SUB1_PRICE"); + + TableHelper ivSub1Sub1Table = new TableHelper(dbHelper, "IV_SUB1_SUB1"); + ivSub1Sub1Table.setColumns("ID", "SUB1_SUB1_NAME", "SUB1_SUB1_PRICE"); + + IvSub1Sub1 sub1Sub1 = context.newObject(IvSub1Sub1.class); + sub1Sub1.setName("XyZN"); + sub1Sub1.setSub1Name("mDA"); + sub1Sub1.setPrice(42.0); + sub1Sub1.setSub1Sub1Name("3DQa"); + sub1Sub1.getObjectContext().commitChanges(); + + assertEquals(1, ivRootTable.getRowCount()); + assertEquals(1, ivSub1Table.getRowCount()); + assertEquals(1, ivSub1Sub1Table.getRowCount()); + + Object[] data = ivRootTable.select(); + assertEquals(3, data.length); + assertTrue(data[0] instanceof Number); + assertTrue(((Number) data[0]).intValue() > 0); + assertEquals("XyZN", data[1]); + assertEquals("IvSub1Sub1", data[2]); + + Object[] subdata = ivSub1Table.select(); + assertEquals(3, subdata.length); + assertEquals(data[0], subdata[0]); + assertEquals("mDA", subdata[1]); + + Object[] subsubdata = ivSub1Sub1Table.select(); + assertEquals(3, subsubdata.length); + assertEquals(data[0], subsubdata[0]); + assertEquals("3DQa", subsubdata[1]); + + ColumnSelect<IvSub1Sub1> originalQueryForSub1Sub1 = ObjectSelect.query(IvSub1Sub1.class) + .column(IvSub1Sub1.SELF); + + IvSub1Sub1 result = originalQueryForSub1Sub1.selectOne(context); + assertEquals("XyZN", result.getName()); + assertEquals(Double.valueOf(42.0), result.getPrice()); + assertEquals("mDA", result.getSub1Name()); + assertEquals("3DQa", result.getSub1Sub1Name()); + } } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorIT.java new file mode 100644 index 000000000..ff76c4c04 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorIT.java @@ -0,0 +1,83 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.access.translator.select; + +import org.apache.cayenne.ObjectContext; +import org.apache.cayenne.dba.DbAdapter; +import org.apache.cayenne.di.Inject; +import org.apache.cayenne.map.EntityResolver; +import org.apache.cayenne.query.ObjectSelect; +import org.apache.cayenne.reflect.ClassDescriptor; +import org.apache.cayenne.testdo.testmap.CompoundPaintingLongNames; +import org.apache.cayenne.unit.di.server.CayenneProjects; +import org.apache.cayenne.unit.di.server.ServerCase; +import org.apache.cayenne.unit.di.server.UseServerRuntime; +import org.junit.Test; +import org.mockito.Mockito; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertEquals; + +@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT) +public class DescriptorColumnExtractorIT extends ServerCase { + @Inject + private ObjectContext context; + + private final List<String> expectedFlattenedDbFields = List.of( + "toArtist.ARTIST_ID", + "toArtist.ARTIST_NAME", + "toGallery.GALLERY_ID", + "toGallery.GALLERY_NAME", + "toPaintingInfo.PAINTING_ID", + "toPaintingInfo.TEXT_REVIEW"); + + @Test + public void testEntityResultAddDbFieldsForFlattenedAttributes() { + + EntityResolver resolver = context.getEntityResolver(); + ClassDescriptor classDescriptor = resolver.getClassDescriptor("CompoundPaintingLongNames"); + + TranslatorContext translatorContext = new TranslatorContext( + new FluentSelectWrapper(ObjectSelect.query(CompoundPaintingLongNames.class) + .column(CompoundPaintingLongNames.SELF)), + Mockito.mock(DbAdapter.class), + resolver, + null); + + DescriptorColumnExtractor descriptor = new DescriptorColumnExtractor(translatorContext, classDescriptor); + descriptor.extract(); + + List<String> actualFlattenedDbFields = translatorContext.getRootEntityResult() + .getDbFields(resolver) + .keySet() + .stream() + .filter(key -> key.startsWith("to")) + .sorted() + .collect(Collectors.toList()); + + assertEquals(expectedFlattenedDbFields.get(0), actualFlattenedDbFields.get(0)); + assertEquals(expectedFlattenedDbFields.get(1), actualFlattenedDbFields.get(1)); + assertEquals(expectedFlattenedDbFields.get(2), actualFlattenedDbFields.get(2)); + assertEquals(expectedFlattenedDbFields.get(3), actualFlattenedDbFields.get(3)); + assertEquals(expectedFlattenedDbFields.get(4), actualFlattenedDbFields.get(4)); + assertEquals(expectedFlattenedDbFields.get(5), actualFlattenedDbFields.get(5)); + } +} \ No newline at end of file diff --git a/cayenne-server/src/test/java/org/apache/cayenne/map/DefaultEntityResultSegmentTest.java b/cayenne-server/src/test/java/org/apache/cayenne/map/DefaultEntityResultSegmentTest.java new file mode 100644 index 000000000..317b63c71 --- /dev/null +++ b/cayenne-server/src/test/java/org/apache/cayenne/map/DefaultEntityResultSegmentTest.java @@ -0,0 +1,54 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ +package org.apache.cayenne.map; + +import org.apache.cayenne.reflect.PersistentDescriptor; +import org.junit.Test; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; + +public class DefaultEntityResultSegmentTest { + private final List<String> expectedColumnPath = List.of("key1", "key2"); + + private final Map<String, String> fields = + new ConcurrentHashMap<>(Map.of("key1", "value1", "key2", "value2")); + + private final DefaultEntityResultSegment resultSegment = + new DefaultEntityResultSegment(new PersistentDescriptor(), fields, fields.size()); + + @Test + public void testGetColumnPath() { + List<String> actualColumnPath = fields.values() + .stream() + .map(resultSegment::getColumnPath) + .collect(Collectors.toList()); + + assertEquals(expectedColumnPath.size(), actualColumnPath.size()); + + IntStream.range(0, actualColumnPath.size()) + .forEach(i -> assertEquals(expectedColumnPath.get(i), actualColumnPath.get(i))); + } + +} \ No newline at end of file diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java index ca063539d..51f57bdbc 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Root.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root; /** * Class _Iv1Root was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _Iv1Root extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<Iv1Root> SELF = PropertyFactory.createSelf(Iv1Root.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java index 18f538111..e63f47dae 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv1Sub1.java @@ -4,9 +4,11 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root; +import org.apache.cayenne.testdo.inheritance_vertical.Iv1Sub1; /** * Class _Iv1Sub1 was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.Iv1Root; */ public abstract class _Iv1Sub1 extends Iv1Root { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<Iv1Sub1> SELF = PropertyFactory.createSelf(Iv1Sub1.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java index 97d5e0c10..349d7cba4 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Root.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.Iv2Root; /** * Class _Iv2Root was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _Iv2Root extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<Iv2Root> SELF = PropertyFactory.createSelf(Iv2Root.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java index 7ad3f83ec..a8ec72e20 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2Sub1.java @@ -7,6 +7,7 @@ import java.io.ObjectOutputStream; import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.testdo.inheritance_vertical.Iv2Root; +import org.apache.cayenne.testdo.inheritance_vertical.Iv2Sub1; import org.apache.cayenne.testdo.inheritance_vertical.Iv2X; /** @@ -17,7 +18,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.Iv2X; */ public abstract class _Iv2Sub1 extends Iv2Root { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<Iv2Sub1> SELF = PropertyFactory.createSelf(Iv2Sub1.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java index c43ad20ab..f24176cf3 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_Iv2X.java @@ -5,6 +5,9 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; +import org.apache.cayenne.exp.property.PropertyFactory; +import org.apache.cayenne.testdo.inheritance_vertical.Iv2X; /** * Class _Iv2X was generated by Cayenne. @@ -14,7 +17,9 @@ import org.apache.cayenne.BaseDataObject; */ public abstract class _Iv2X extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<Iv2X> SELF = PropertyFactory.createSelf(Iv2X.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java index b77509e77..d14cfa395 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvAbstract.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.IvAbstract; /** * Class _IvAbstract was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _IvAbstract extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvAbstract> SELF = PropertyFactory.createSelf(IvAbstract.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java index cd554f207..a8e850f56 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBase.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.IvBase; /** * Class _IvBase was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _IvBase extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvBase> SELF = PropertyFactory.createSelf(IvBase.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java index 601ccde21..052c73a35 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvBaseWithLock.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.IvBaseWithLock; /** * Class _IvBaseWithLock was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _IvBaseWithLock extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvBaseWithLock> SELF = PropertyFactory.createSelf(IvBaseWithLock.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java index 6c479ed68..3f140a568 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvConcrete.java @@ -20,7 +20,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvConcrete; */ public abstract class _IvConcrete extends IvAbstract { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvConcrete> SELF = PropertyFactory.createSelf(IvConcrete.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java index c0c9a0d95..504287ea2 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeyRoot.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.IvGenKeyRoot; /** * Class _IvGenKeyRoot was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _IvGenKeyRoot extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvGenKeyRoot> SELF = PropertyFactory.createSelf(IvGenKeyRoot.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java index 62d534579..7326efe73 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvGenKeySub.java @@ -4,7 +4,10 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.apache.cayenne.exp.property.EntityProperty; +import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.testdo.inheritance_vertical.IvGenKeyRoot; +import org.apache.cayenne.testdo.inheritance_vertical.IvGenKeySub; /** * Class _IvGenKeySub was generated by Cayenne. @@ -14,7 +17,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvGenKeyRoot; */ public abstract class _IvGenKeySub extends IvGenKeyRoot { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvGenKeySub> SELF = PropertyFactory.createSelf(IvGenKeySub.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java index 86ab1abf4..da1ea5578 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImpl.java @@ -8,6 +8,7 @@ import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvBase; +import org.apache.cayenne.testdo.inheritance_vertical.IvImpl; import org.apache.cayenne.testdo.inheritance_vertical.IvOther; /** @@ -18,7 +19,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvOther; */ public abstract class _IvImpl extends IvBase { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvImpl> SELF = PropertyFactory.createSelf(IvImpl.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java index 19e3e4e76..5eacdf279 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvImplWithLock.java @@ -8,6 +8,7 @@ import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvBaseWithLock; +import org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock; import org.apache.cayenne.testdo.inheritance_vertical.IvOther; /** @@ -18,7 +19,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvOther; */ public abstract class _IvImplWithLock extends IvBaseWithLock { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvImplWithLock> SELF = PropertyFactory.createSelf(IvImplWithLock.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java index ae8c98b38..c2d0791b1 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvOther.java @@ -6,11 +6,13 @@ import java.io.ObjectOutputStream; import java.util.List; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.ListProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvImpl; import org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock; +import org.apache.cayenne.testdo.inheritance_vertical.IvOther; /** * Class _IvOther was generated by Cayenne. @@ -20,7 +22,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvImplWithLock; */ public abstract class _IvOther extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvOther> SELF = PropertyFactory.createSelf(IvOther.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java index 78277c64e..fb101ac15 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvRoot.java @@ -5,8 +5,10 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; +import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; /** * Class _IvRoot was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.exp.property.StringProperty; */ public abstract class _IvRoot extends BaseDataObject { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvRoot> SELF = PropertyFactory.createSelf(IvRoot.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java index 8fef82ea4..8d861755f 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1.java @@ -4,9 +4,12 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.apache.cayenne.exp.property.EntityProperty; +import org.apache.cayenne.exp.property.NumericProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; +import org.apache.cayenne.testdo.inheritance_vertical.IvSub1; /** * Class _IvSub1 was generated by Cayenne. @@ -16,15 +19,29 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; */ public abstract class _IvSub1 extends IvRoot { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvSub1> SELF = PropertyFactory.createSelf(IvSub1.class); public static final String ID_PK_COLUMN = "ID"; + public static final NumericProperty<Double> PRICE = PropertyFactory.createNumeric("price", Double.class); public static final StringProperty<String> SUB1NAME = PropertyFactory.createString("sub1Name", String.class); + protected Double price; protected String sub1Name; + public void setPrice(Double price) { + beforePropertyWrite("price", this.price, price); + this.price = price; + } + + public Double getPrice() { + beforePropertyRead("price"); + return this.price; + } + public void setSub1Name(String sub1Name) { beforePropertyWrite("sub1Name", this.sub1Name, sub1Name); this.sub1Name = sub1Name; @@ -42,6 +59,8 @@ public abstract class _IvSub1 extends IvRoot { } switch(propName) { + case "price": + return this.price; case "sub1Name": return this.sub1Name; default: @@ -56,6 +75,9 @@ public abstract class _IvSub1 extends IvRoot { } switch (propName) { + case "price": + this.price = (Double)val; + break; case "sub1Name": this.sub1Name = (String)val; break; @@ -75,12 +97,14 @@ public abstract class _IvSub1 extends IvRoot { @Override protected void writeState(ObjectOutputStream out) throws IOException { super.writeState(out); + out.writeObject(this.price); out.writeObject(this.sub1Name); } @Override protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException { super.readState(in); + this.price = (Double)in.readObject(); this.sub1Name = (String)in.readObject(); } diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java index bf6a8b6a4..4a5c6a100 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub1Sub1.java @@ -4,9 +4,11 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvSub1; +import org.apache.cayenne.testdo.inheritance_vertical.IvSub1Sub1; /** * Class _IvSub1Sub1 was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvSub1; */ public abstract class _IvSub1Sub1 extends IvSub1 { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvSub1Sub1> SELF = PropertyFactory.createSelf(IvSub1Sub1.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java index 6b133b91a..2da2e503b 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub2.java @@ -4,9 +4,11 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; +import org.apache.cayenne.testdo.inheritance_vertical.IvSub2; /** * Class _IvSub2 was generated by Cayenne. @@ -16,7 +18,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; */ public abstract class _IvSub2 extends IvRoot { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvSub2> SELF = PropertyFactory.createSelf(IvSub2.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java index 50fdb3053..6d1ba67dd 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/inheritance_vertical/auto/_IvSub3.java @@ -7,6 +7,7 @@ import java.io.ObjectOutputStream; import org.apache.cayenne.exp.property.EntityProperty; import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; +import org.apache.cayenne.testdo.inheritance_vertical.IvSub3; /** * Class _IvSub3 was generated by Cayenne. @@ -16,7 +17,9 @@ import org.apache.cayenne.testdo.inheritance_vertical.IvRoot; */ public abstract class _IvSub3 extends IvRoot { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; + + public static final EntityProperty<IvSub3> SELF = PropertyFactory.createSelf(IvSub3.class); public static final String ID_PK_COLUMN = "ID"; diff --git a/cayenne-server/src/test/resources/inheritance-vertical.map.xml b/cayenne-server/src/test/resources/inheritance-vertical.map.xml index cbad1bccb..4cf9f46e9 100644 --- a/cayenne-server/src/test/resources/inheritance-vertical.map.xml +++ b/cayenne-server/src/test/resources/inheritance-vertical.map.xml @@ -76,10 +76,12 @@ <db-entity name="IV_SUB1"> <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> <db-attribute name="SUB1_NAME" type="VARCHAR" length="100"/> + <db-attribute name="SUB1_PRICE" type="DOUBLE"/> </db-entity> <db-entity name="IV_SUB1_SUB1"> <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> <db-attribute name="SUB1_SUB1_NAME" type="VARCHAR" length="100"/> + <db-attribute name="SUB1_SUB1_PRICE" type="INTEGER"/> </db-entity> <db-entity name="IV_SUB2"> <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" isMandatory="true"/> @@ -147,6 +149,7 @@ </obj-entity> <obj-entity name="IvSub1" superEntityName="IvRoot" className="org.apache.cayenne.testdo.inheritance_vertical.IvSub1"> <qualifier><![CDATA[discriminator = "IvSub1"]]></qualifier> + <obj-attribute name="price" type="java.lang.Double" db-attribute-path="sub1.SUB1_PRICE"/> <obj-attribute name="sub1Name" type="java.lang.String" db-attribute-path="sub1.SUB1_NAME"/> <attribute-override name="discrimiantor" db-attribute-path="DISCRIMINATOR"/> <attribute-override name="discriminator" db-attribute-path="DISCRIMINATOR"/> @@ -155,6 +158,7 @@ <obj-entity name="IvSub1Sub1" superEntityName="IvSub1" className="org.apache.cayenne.testdo.inheritance_vertical.IvSub1Sub1"> <qualifier><![CDATA[discriminator = "IvSub1Sub1"]]></qualifier> <obj-attribute name="sub1Sub1Name" type="java.lang.String" db-attribute-path="sub1.sub1Sub1.SUB1_SUB1_NAME"/> + <attribute-override name="price" db-attribute-path="sub1.sub1Sub1.SUB1_SUB1_PRICE"/> <attribute-override name="sub1Name" db-attribute-path="sub1.SUB1_NAME"/> </obj-entity> <obj-entity name="IvSub2" superEntityName="IvRoot" className="org.apache.cayenne.testdo.inheritance_vertical.IvSub2">