This is an automated email from the ASF dual-hosted git repository. abulatski pushed a commit to branch STABLE-4.1 in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/STABLE-4.1 by this push: new dc0b650 CAY-2565 Can't use new generated PK properties with dot() operator dc0b650 is described below commit dc0b6507bb9a29d7f5d0939d1806b404f28d1929 Author: Arseni Bulatski <ancars...@gmail.com> AuthorDate: Tue Aug 6 15:05:33 2019 +0300 CAY-2565 Can't use new generated PK properties with dot() operator --- RELEASE-NOTES.txt | 1 + .../main/java/org/apache/cayenne/exp/Property.java | 19 ++++++------------- .../java/org/apache/cayenne/exp/PropertyTest.java | 22 ++++++++++++++++------ 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 92f7dad..b483e72 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -20,6 +20,7 @@ Bug Fixes: CAY-2417 Modeler: wrong title in attribute context menu CAY-2553 Wrong disjoint prefetch query qualifier +CAY-2565 Can't use new generated PK properties with dot() operator CAY-2573 DI field injection is triggered when creating sql Driver CAY-2580 Cgen: Can't use custom templates for client mode CAY-2582 Double insert of manyToMany relationship mapped to Set diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java index 449934c..10c7e66 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java @@ -94,12 +94,7 @@ public class Property<E> { */ protected Property(final String name, final Class<? super E> type) { this.name = name; - expressionProvider = new ExpressionProvider() { - @Override - public Expression get() { - return ExpressionFactory.pathExp(name); - } - }; + expressionProvider = () -> ExpressionFactory.pathExp(name); this.type = type; } @@ -114,12 +109,7 @@ public class Property<E> { */ protected Property(final String name, final Expression expression, final Class<? super E> type) { this.name = name; - expressionProvider = new ExpressionProvider() { - @Override - public Expression get() { - return expression.deepCopy(); - } - }; + expressionProvider = () -> expression.deepCopy(); this.type = type; } @@ -200,6 +190,9 @@ public class Property<E> { * @return a newly created Property object. */ public <T> Property<T> dot(Property<T> property) { + if(property.getExpression().getType() != getExpression().getType()) { + throw new CayenneRuntimeException("Can't process path with not the same segment's types."); + } return create(getName() + "." + property.getName(), property.getType()); } @@ -643,7 +636,7 @@ public class Property<E> { public Property<Long> count() { return create(FunctionExpressionFactory.countExp(getExpression()), Long.class); } - + /** * @see FunctionExpressionFactory#countDistinctExp(Expression) * @since 4.1 diff --git a/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java b/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java index 3630384..c8eeffa 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java @@ -18,14 +18,10 @@ ****************************************************************/ package org.apache.cayenne.exp; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - import java.util.Arrays; import java.util.List; +import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.exp.parser.ASTAbs; import org.apache.cayenne.exp.parser.ASTAvg; import org.apache.cayenne.exp.parser.ASTConcat; @@ -48,6 +44,11 @@ import org.apache.cayenne.exp.parser.PatternMatchNode; import org.apache.cayenne.reflect.TstJavaBean; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + public class PropertyTest { @Test @@ -348,7 +349,7 @@ public class PropertyTest { assertTrue(newProp.getExpression() instanceof ASTCount); assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); } - + @Test public void testCountDistinct() { Property<String> p = Property.create("test", String.class); @@ -489,4 +490,13 @@ public class PropertyTest { assertEquals(3, newProp.getExpression().getOperand(2)); // getOperand unwrapping ASTScalar assertEquals(p2.getExpression(), newProp.getExpression().getOperand(3)); } + + @Test(expected = CayenneRuntimeException.class) + public void testMixDbAndObjPath() { + Property<Integer> dbPathProperty = Property + .create(ExpressionFactory.dbPathExp("db_path"), Integer.class); + Property<String> objPathProperty = Property + .create(ExpressionFactory.pathExp("obj_path"), String.class); + objPathProperty.dot(dbPathProperty); + } }