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
commit 83177d99df4d3988e4ca6ca72b716ee2fa41eade Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Thu Jun 30 17:55:27 2022 +0300 CAY-2737 Cayenne 4.3: cleanup deprecated code - remove old Property class --- .../org/apache/cayenne/lifecycle/db/auto/_E3.java | 5 +- .../org/apache/cayenne/lifecycle/db/auto/_E4.java | 5 +- .../apache/cayenne/lifecycle/db/auto/_SortDep.java | 5 +- .../cayenne/lifecycle/db/auto/_SortRoot.java | 5 +- .../cayenne/lifecycle/db/auto/_UuidRoot1.java | 5 +- .../main/java/org/apache/cayenne/exp/Property.java | 452 ------------------- .../apache/cayenne/exp/property/BaseProperty.java | 13 - .../org/apache/cayenne/query/ColumnSelect.java | 20 - .../org/apache/cayenne/query/ObjectSelect.java | 20 - .../java/org/apache/cayenne/exp/PropertyTest.java | 494 --------------------- .../auto/_Author.java | 5 +- .../auto/_Song.java | 8 +- 12 files changed, 23 insertions(+), 1014 deletions(-) diff --git a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java index 2bc35b97c..f646337d4 100644 --- a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java +++ b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java @@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto; import java.util.List; import org.apache.cayenne.CayenneDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.ListProperty; +import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.lifecycle.db.E4; /** @@ -18,7 +19,7 @@ public abstract class _E3 extends CayenneDataObject { public static final String ID_PK_COLUMN = "ID"; - public static final Property<List<E4>> E4S = Property.create("e4s", List.class); + public static final ListProperty<E4> E4S = PropertyFactory.createList("e4s", E4.class); public void addToE4s(E4 obj) { addToManyTarget("e4s", obj, true); diff --git a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java index 42ea901df..5298d361a 100644 --- a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java +++ b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java @@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto; import java.util.List; import org.apache.cayenne.CayenneDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.ListProperty; +import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.lifecycle.db.E3; /** @@ -18,7 +19,7 @@ public abstract class _E4 extends CayenneDataObject { public static final String ID_PK_COLUMN = "ID"; - public static final Property<List<E3>> E3S = Property.create("e3s", List.class); + public static final ListProperty<E3> E3S = PropertyFactory.createList("e3s", E3.class); public void addToE3s(E3 obj) { addToManyTarget("e3s", obj, true); diff --git a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java index 83b82d6b7..d5d20a3d1 100644 --- a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java +++ b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java @@ -1,7 +1,8 @@ package org.apache.cayenne.lifecycle.db.auto; import org.apache.cayenne.CayenneDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.EntityProperty; +import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.lifecycle.db.SortRoot; /** @@ -16,7 +17,7 @@ public abstract class _SortDep extends CayenneDataObject { public static final String ID_PK_COLUMN = "ID"; - public static final Property<SortRoot> ROOT = Property.create("root", SortRoot.class); + public static final EntityProperty<SortRoot> ROOT = PropertyFactory.createEntity("root", SortRoot.class); public void setRoot(SortRoot root) { setToOneTarget("root", root, true); diff --git a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java index 45991eee3..6172c713e 100644 --- a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java +++ b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java @@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto; import java.util.List; import org.apache.cayenne.CayenneDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.ListProperty; +import org.apache.cayenne.exp.property.PropertyFactory; import org.apache.cayenne.lifecycle.db.SortDep; /** @@ -18,7 +19,7 @@ public abstract class _SortRoot extends CayenneDataObject { public static final String ID_PK_COLUMN = "ID"; - public static final Property<List<SortDep>> DEPS = Property.create("deps", List.class); + public static final ListProperty<SortDep> DEPS = PropertyFactory.createList("deps", SortDep.class); public void addToDeps(SortDep obj) { addToManyTarget("deps", obj, true); diff --git a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java index a9ad9bc96..e81912af9 100644 --- a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java +++ b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java @@ -1,7 +1,8 @@ package org.apache.cayenne.lifecycle.db.auto; import org.apache.cayenne.CayenneDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.PropertyFactory; +import org.apache.cayenne.exp.property.StringProperty; /** * Class _UuidRoot1 was generated by Cayenne. @@ -15,7 +16,7 @@ public abstract class _UuidRoot1 extends CayenneDataObject { public static final String ID_PK_COLUMN = "ID"; - public static final Property<String> UUID = Property.create("uuid", String.class); + public static final StringProperty<String> UUID = PropertyFactory.createString("uuid", String.class); public void setUuid(String uuid) { writeProperty("uuid", uuid); 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 deleted file mode 100644 index f214a0763..000000000 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java +++ /dev/null @@ -1,452 +0,0 @@ -/***************************************************************** - * 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.exp; - -import java.util.Collection; -import java.util.Map; - -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.Persistent; -import org.apache.cayenne.exp.property.BaseProperty; -import org.apache.cayenne.exp.property.ComparableProperty; -import org.apache.cayenne.exp.property.RelationshipProperty; - -/** - * <p> - * A property in a {@link org.apache.cayenne.DataObject}. - * </p> - * <p> - * Used to construct Expressions quickly and with type-safety, and to construct Orderings. - * </p> - * <p> - * Instances of this class are immutable. - * </p> - * <p> - * Must be created via factory methods {@link Property#create(String, Class) Property.create(..)} - * </p> - * - * @param <E> The type this property returns. - * - * @see Property#create(String, Class) - * @see Property#create(Expression, Class) - * @see Property#create(String, Expression, Class) - * - * @see org.apache.cayenne.exp.property.PropertyFactory - * - * @since 4.0 - * @deprecated since 4.2 in favour of type-specific set of properties, see {@link org.apache.cayenne.exp.property.PropertyFactory} - * and {@link org.apache.cayenne.exp.property} package. - */ -@Deprecated -public class Property<E> extends BaseProperty<E> implements ComparableProperty<E>, RelationshipProperty<E> { - - /** - * <p>Property that can be used in COUNT(*) queries</p> - * <p> - * <pre>{@code - * List<Object[]> result = ObjectSelect - * .columnQuery(Artist.class, Property.COUNT, Artist.ARTIST_NAME) - * .having(Property.COUNT.gt(1L)) - * .select(context); - * }</pre> - * </p> - * @deprecated since 4.2 use {@link org.apache.cayenne.exp.property.PropertyFactory#COUNT} - */ - @Deprecated - public static final Property<Long> COUNT = Property.create(FunctionExpressionFactory.countExp(), Long.class); - - /** - * Constructs a new property with the given name and type. - * - * @param name of the property (usually it's obj path) - * @param type of the property - * - * @see Property#create(String, Class) - */ - protected Property(final String name, final Class<E> type) { - super(name, null, type); - } - - /** - * Constructs a new property with the given name and expression - * - * @param name of the property (will be used as alias for the expression) - * @param expression expression for property - * @param type of the property - * - * @see Property#create(String, Expression, Class) - */ - protected Property(final String name, final Expression expression, final Class<E> type) { - super(name, expression, type); - } - - /** - * @param pattern a pattern matching property value. Pattern may include "_" and - * "%" wildcard symbols to match any single character or a - * sequence of characters. To prevent "_" and "%" from being - * treated as wildcards, they need to be escaped and escape char - * passed with {@link #like(String, char)} method. - * @return An expression for a Database "LIKE" query. - */ - public Expression like(String pattern) { - return ExpressionFactory.likeExp(path(), pattern); - } - - /** - * @param pattern a properly escaped pattern matching property value. Pattern - * may include "_" and "%" wildcard symbols to match any single - * character or a sequence of characters. - * @param escapeChar an escape character used in the pattern to escape "%" and "_". - * @return An expression for a Database "LIKE" query. - */ - public Expression like(String pattern, char escapeChar) { - return ExpressionFactory.likeExp(path(), pattern, escapeChar); - } - - /** - * @return An expression for a case insensitive "LIKE" query. - */ - public Expression likeIgnoreCase(String pattern) { - return ExpressionFactory.likeIgnoreCaseExp(path(), pattern); - } - - /** - * @return An expression for a Database "NOT LIKE" query. - */ - public Expression nlike(String value) { - return ExpressionFactory.notLikeExp(path(), value); - } - - /** - * @return An expression for a case insensitive "NOT LIKE" query. - */ - public Expression nlikeIgnoreCase(String value) { - return ExpressionFactory.notLikeIgnoreCaseExp(path(), value); - } - - /** - * Creates an expression for a database "LIKE" query with the value converted to a pattern matching anywhere in the - * String. - * - * @param substring a String to match against property value. "_" and "%" symbols - * are NOT treated as wildcards and are escaped when converted to - * a LIKE expression. - * @return a newly created expression. - */ - public Expression contains(String substring) { - return ExpressionFactory.containsExp(path(), substring); - } - - /** - * Creates an expression for a database "LIKE" query with the value converted to a pattern matching the beginning of - * a String. - * - * @param value a String to match against property value. "_" and "%" symbols - * are NOT treated as wildcards and are escaped when converted to - * a LIKE expression. - * @return a newly created expression. - */ - public Expression startsWith(String value) { - return ExpressionFactory.startsWithExp(path(), value); - } - - /** - * Creates an expression for a database "LIKE" query with the value - * converted to a pattern matching the tail of a String. - * - * @param value a String to match against property value. "_" and "%" symbols - * are NOT treated as wildcards and are escaped when converted to - * a LIKE expression. - * @return a newly created expression. - */ - public Expression endsWith(String value) { - return ExpressionFactory.endsWithExp(path(), value); - } - - /** - * Same as {@link #contains(String)}, only using case-insensitive - * comparison. - */ - public Expression containsIgnoreCase(String value) { - return ExpressionFactory.containsIgnoreCaseExp(path(), value); - } - - /** - * Same as {@link #startsWith(String)}, only using case-insensitive - * comparison. - */ - public Expression startsWithIgnoreCase(String value) { - return ExpressionFactory.startsWithIgnoreCaseExp(path(), value); - } - - /** - * Same as {@link #endsWith(String)}, only using case-insensitive - * comparison. - */ - public Expression endsWithIgnoreCase(String value) { - return ExpressionFactory.endsWithIgnoreCaseExp(path(), value); - } - - /** - * @see FunctionExpressionFactory#lengthExp(Expression) - */ - public Property<Integer> length() { - return create(FunctionExpressionFactory.lengthExp(path()), Integer.class); - } - - /** - * @see FunctionExpressionFactory#locateExp(String, Expression) - */ - public Property<Integer> locate(String string) { - return create(FunctionExpressionFactory.locateExp(ExpressionFactory.wrapScalarValue(string), path()), Integer.class); - } - - /** - * @see FunctionExpressionFactory#locateExp(Expression, Expression) - */ - public Property<Integer> locate(Property<? extends String> property) { - return create(FunctionExpressionFactory.locateExp(property.path(), path()), Integer.class); - } - - /** - * @see FunctionExpressionFactory#trimExp(Expression) - */ - public Property<String> trim() { - return create(FunctionExpressionFactory.trimExp(path()), String.class); - } - - /** - * @see FunctionExpressionFactory#upperExp(Expression) - */ - public Property<String> upper() { - return create(FunctionExpressionFactory.upperExp(path()), String.class); - } - - /** - * @see FunctionExpressionFactory#lowerExp(Expression) - */ - public Property<String> lower() { - return create(FunctionExpressionFactory.lowerExp(path()), String.class); - } - - /** - * <p>Arguments will be converted as follows: - * <ul> - * <li>if argument is a {@link Property} than its expression will be used</li> - * <li>if argument is a {@link Expression} than it will be used as is </li> - * <li>all other values will be converted to String</li> - * </ul> - * </p> - * <p> - * Usage: - * <pre>{@code - * Property<String> fullName = Artist.FIRST_NAME.concat(" ", Artist.SECOND_NAME); - * }</pre> - * </p> - * @see FunctionExpressionFactory#concatExp(Expression...) - */ - public Property<String> concat(Object... args) { - Expression[] exp = new Expression[args.length + 1]; - int i = 0; - exp[i++] = path(); - for(Object arg : args) { - if(arg instanceof org.apache.cayenne.exp.property.Property) { - exp[i++] = ((org.apache.cayenne.exp.property.Property<?>) arg).getExpression(); - } else if(arg instanceof Expression) { - exp[i++] = (Expression) arg; - } else if(arg != null) { - exp[i++] = ExpressionFactory.wrapScalarValue(arg.toString()); - } - } - return create(FunctionExpressionFactory.concatExp(exp), String.class); - } - - /** - * @see FunctionExpressionFactory#substringExp(Expression, int, int) - */ - public Property<String> substring(int offset, int length) { - return create(FunctionExpressionFactory.substringExp(path(), offset, length), String.class); - } - - // TODO: end of StringProperty related methods - - // TODO: start of NumericProperty related methods - - /** - * @see FunctionExpressionFactory#avgExp(Expression) - */ - public Property<E> avg() { - return create(FunctionExpressionFactory.avgExp(path()), getType()); - } - - /** - * @see FunctionExpressionFactory#sumExp(Expression) - */ - public Property<E> sum() { - return create(FunctionExpressionFactory.sumExp(path()), getType()); - } - - /** - * @see FunctionExpressionFactory#modExp(Expression, Number) - */ - public Property<E> mod(Number number) { - return create(FunctionExpressionFactory.modExp(path(), number), getType()); - } - - /** - * @see FunctionExpressionFactory#absExp(Expression) - */ - public Property<E> abs() { - return create(FunctionExpressionFactory.absExp(path()), getType()); - } - - /** - * @see FunctionExpressionFactory#sqrtExp(Expression) - */ - public Property<E> sqrt() { - return create(FunctionExpressionFactory.sqrtExp(path()), getType()); - } - - // TODO: end of NumericProperty related methods - - /** - * <p>Create new "flat" property for toMany relationship.</p> - * <p> - * Example: - * <pre>{@code - * List<Object[]> result = ObjectSelect - * .columnQuery(Artist.class, Artist.ARTIST_NAME, Artist.PAINTING_ARRAY.flat(Painting.class)) - * .select(context); - * }</pre> - * </p> - */ - public <T extends Persistent> Property<T> flat(Class<T> tClass) { - if(!Collection.class.isAssignableFrom(type) && !Map.class.isAssignableFrom(type)) { - throw new CayenneRuntimeException("Can use flat() function only on Property mapped on toMany relationship."); - } - return create(ExpressionFactory.fullObjectExp(path()), tClass); - } - - /** - * Creates alias with different name for this property - */ - @Override - public Property<E> alias(String alias) { - return new Property<>(alias, this.getExpression(), this.getType()); - } - - @Override - public Property<E> outer() { - return getName().endsWith("+") - ? this - : Property.create(getName() + "+", getType()); - } - - public <T> Property<T> dot(Property<T> property) { - return Property.create(getName() + "." + property.getName(), property.getType()); - } - - /** - * Constructs a property path by appending the argument to the existing property separated by a dot. - * - * @return a newly created Property object. - */ - @Override - public Property<Object> dot(String property) { - return Property.create(getName() + "." + property, null); - } - - // TODO: this method has incompatible return type in BaseProperty -// /** -// * @see FunctionExpressionFactory#countExp(Expression) -// */ -// @Override -// public NumericProperty<Long> count() { -// return Property.create(FunctionExpressionFactory.countExp(getExpression()), Long.class); -// } - - /** - * @see FunctionExpressionFactory#maxExp(Expression) - */ - @Override - public Property<E> max() { - return Property.create(FunctionExpressionFactory.maxExp(path()), getType()); - } - - /** - * @see FunctionExpressionFactory#minExp(Expression) - */ - @Override - public Property<E> min() { - return Property.create(FunctionExpressionFactory.minExp(path()), getType()); - } - - /** - * Creates property with name and type - * @see Property#create(Expression, Class) - * @see Property#create(String, Expression, Class) - */ - @SuppressWarnings("unchecked") - public static <T> Property<T> create(String name, Class<? super T> type) { - return (Property<T>)new Property<>(name, type); - } - - /** - * Creates property with expression and type - * @see Property#create(String, Class) - * @see Property#create(String, Expression, Class) - */ - @SuppressWarnings("unchecked") - public static <T> Property<T> create(Expression expression, Class<? super T> type) { - return (Property<T>)new Property<>(null, expression, type); - } - - /** - * Creates property with name, expression and type - * @see Property#create(String, Class) - * @see Property#create(Expression, Class) - */ - @SuppressWarnings("unchecked") - public static <T> Property<T> create(String name, Expression expression, Class<? super T> type) { - return (Property<T>)new Property<>(name, expression, type); - } - - /** - * <p> - * Creates "self" Property for persistent class. - * This property can be used to select full object along with some of it properties (or - * properties that can be resolved against query root) - * </p> - * <p> - * Here is sample code, that will select all Artists and count of their Paintings: - * <pre>{@code - * Property<Artist> artistFull = Property.createSelf(Artist.class); - * List<Object[]> result = ObjectSelect - * .columnQuery(Artist.class, artistFull, Artist.PAINTING_ARRAY.count()) - * .select(context); - * } - * </pre> - * </p> - */ - @SuppressWarnings("unchecked") - public static <T extends Persistent> Property<T> createSelf(Class<? super T> type) { - return (Property<T>)new Property<>(null, ExpressionFactory.fullObjectExp(), type); - } - -} \ No newline at end of file diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java index 2e1a05fe0..478de4784 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java @@ -152,19 +152,6 @@ public class BaseProperty<E> implements Property<E> { return (type == null ? property.type == null : type.equals(property.type)); } - /** - * Converts this property to a path expression. - * This method is equivalent of getExpression() which is preferred as more generic. - * - * @return a newly created expression. - * @see BaseProperty#getExpression() - * @deprecated since 4.2, use {@link #getExpression()} method instead - */ - @Deprecated - public Expression path() { - return getExpression(); - } - /** * @return An expression representing null. */ diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java index bc34d0d63..994e65345 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java @@ -470,16 +470,6 @@ public class ColumnSelect<T> extends FluentSelect<T> { return columns(property.max()); } - /** - * <p>Select average value of property</p> - * @see ColumnSelect#columns(Property[]) - * @deprecated since 4.2 use {@link #avg(NumericProperty)} - */ - @Deprecated - public ColumnSelect<Object[]> avg(org.apache.cayenne.exp.Property<?> property) { - return columns(property.avg()); - } - /** * <p>Select average value of property</p> * @see ColumnSelect#columns(Property[]) @@ -488,16 +478,6 @@ public class ColumnSelect<T> extends FluentSelect<T> { return columns(property.avg()); } - /** - * <p>Select sum of values</p> - * @see ColumnSelect#columns(Property[]) - * @deprecated since 4.2 use {@link #sum(NumericProperty)} - */ - @Deprecated - public <E extends Number> ColumnSelect<Object[]> sum(org.apache.cayenne.exp.Property<E> property) { - return columns(property.sum()); - } - /** * <p>Select sum of values</p> * @see ColumnSelect#columns(Property[]) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java index 4a54d784c..aa2b22c45 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java @@ -618,16 +618,6 @@ public class ObjectSelect<T> extends FluentSelect<T> implements ParameterizedQue return column(property.max()); } - /** - * <p>Select average value of property</p> - * @see ObjectSelect#column(Property) - * @deprecated since 4.2 use {@link #avg(NumericProperty)} - */ - @Deprecated - public <E> ColumnSelect<E> avg(org.apache.cayenne.exp.Property<E> property) { - return column(property.avg()); - } - /** * <p>Select average value of property</p> * @see ObjectSelect#column(Property) @@ -636,16 +626,6 @@ public class ObjectSelect<T> extends FluentSelect<T> implements ParameterizedQue return column(property.avg()); } - /** - * <p>Select sum of values</p> - * @see ObjectSelect#column(Property) - * @deprecated since 4.2 use {@link #sum(NumericProperty)} - */ - @Deprecated - public <E extends Number> ColumnSelect<E> sum(org.apache.cayenne.exp.Property<E> property) { - return column(property.sum()); - } - /** * <p>Select sum of values</p> * @see ObjectSelect#column(Property) 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 deleted file mode 100644 index 70c736107..000000000 --- a/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java +++ /dev/null @@ -1,494 +0,0 @@ -/***************************************************************** - * 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.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.exp.parser.ASTAbs; -import org.apache.cayenne.exp.parser.ASTAvg; -import org.apache.cayenne.exp.parser.ASTConcat; -import org.apache.cayenne.exp.parser.ASTCount; -import org.apache.cayenne.exp.parser.ASTDistinct; -import org.apache.cayenne.exp.parser.ASTLength; -import org.apache.cayenne.exp.parser.ASTLocate; -import org.apache.cayenne.exp.parser.ASTLower; -import org.apache.cayenne.exp.parser.ASTMax; -import org.apache.cayenne.exp.parser.ASTMin; -import org.apache.cayenne.exp.parser.ASTMod; -import org.apache.cayenne.exp.parser.ASTObjPath; -import org.apache.cayenne.exp.parser.ASTScalar; -import org.apache.cayenne.exp.parser.ASTSqrt; -import org.apache.cayenne.exp.parser.ASTSubstring; -import org.apache.cayenne.exp.parser.ASTSum; -import org.apache.cayenne.exp.parser.ASTTrim; -import org.apache.cayenne.exp.parser.ASTUpper; -import org.apache.cayenne.exp.parser.PatternMatchNode; -import org.apache.cayenne.exp.property.NumericProperty; -import org.apache.cayenne.reflect.TstJavaBean; -import org.junit.Test; - -@Deprecated -public class PropertyTest { - - @Test - public void testPath() { - Property<String> p = Property.create("x.y", String.class); - Expression pp = p.path(); - assertEquals(ExpressionFactory.exp("x.y"), pp); - } - - @Test - public void testIn() { - Property<String> p = Property.create("x.y", String.class); - - Expression e1 = p.in("a"); - assertEquals("x.y in (\"a\")", e1.toString()); - - Expression e2 = p.in("a", "b"); - assertEquals("x.y in (\"a\", \"b\")", e2.toString()); - - Expression e3 = p.in(Arrays.asList("a", "b")); - assertEquals("x.y in (\"a\", \"b\")", e3.toString()); - } - - @Test - public void testGetFrom() { - TstJavaBean bean = new TstJavaBean(); - bean.setIntField(7); - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - assertEquals(Integer.valueOf(7), INT_FIELD.getFrom(bean)); - } - - @Test - public void testGetFromNestedProperty() { - TstJavaBean bean = new TstJavaBean(); - TstJavaBean nestedBean = new TstJavaBean(); - nestedBean.setIntField(7); - bean.setObjectField(nestedBean); - Property<Integer> OBJECT_FIELD_INT_FIELD = Property.create("objectField.intField", Integer.class); - assertEquals(Integer.valueOf(7), OBJECT_FIELD_INT_FIELD.getFrom(bean)); - } - - @Test - public void testGetFromNestedNull() { - TstJavaBean bean = new TstJavaBean(); - bean.setObjectField(null); - Property<Integer> OBJECT_FIELD_INT_FIELD = Property.create("objectField.intField", Integer.class); - assertNull(OBJECT_FIELD_INT_FIELD.getFrom(bean)); - } - - @Test - public void testGetFromAll() { - TstJavaBean bean = new TstJavaBean(); - bean.setIntField(7); - - TstJavaBean bean2 = new TstJavaBean(); - bean2.setIntField(8); - - List<TstJavaBean> beans = Arrays.asList(bean, bean2); - - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - assertEquals(Arrays.asList(7, 8), INT_FIELD.getFromAll(beans)); - } - - @Test - public void testSetIn() { - TstJavaBean bean = new TstJavaBean(); - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - INT_FIELD.setIn(bean, 7); - assertEquals(7, bean.getIntField()); - } - - @Test - public void testSetInNestedProperty() { - TstJavaBean bean = new TstJavaBean(); - bean.setObjectField(new TstJavaBean()); - - Property<Integer> OBJECT_FIELD_INT_FIELD = Property.create("objectField.intField", Integer.class); - - OBJECT_FIELD_INT_FIELD.setIn(bean, 7); - assertEquals(7, ((TstJavaBean) bean.getObjectField()).getIntField()); - } - - @Test - public void testSetInNestedNull() { - TstJavaBean bean = new TstJavaBean(); - bean.setObjectField(null); - Property<Integer> OBJECT_FIELD_INT_FIELD = Property.create("objectField.intField", Integer.class); - OBJECT_FIELD_INT_FIELD.setIn(bean, 7); - } - - @Test - public void testSetInAll() { - TstJavaBean bean = new TstJavaBean(); - TstJavaBean bean2 = new TstJavaBean(); - List<TstJavaBean> beans = Arrays.asList(bean, bean2); - - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - INT_FIELD.setInAll(beans, 7); - assertEquals(7, bean.getIntField()); - assertEquals(7, bean2.getIntField()); - } - - @Test - public void testEqualsWithName() { - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - Property<Integer> INT_FIELD2 = Property.create("intField", Integer.class); - - assertTrue(INT_FIELD != INT_FIELD2); - assertTrue(INT_FIELD.equals(INT_FIELD2)); - } - - @Test - public void testHashCodeWithName() { - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - Property<Integer> INT_FIELD2 = Property.create("intField", Integer.class); - Property<Long> LONG_FIELD = Property.create("longField", Long.class); - - assertTrue(INT_FIELD.hashCode() == INT_FIELD2.hashCode()); - assertTrue(INT_FIELD.hashCode() != LONG_FIELD.hashCode()); - } - - @Test - public void testEqualsWithNameAndType() { - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - Property<Integer> INT_FIELD2 = Property.create("intField", Integer.class); - - assertTrue(INT_FIELD != INT_FIELD2); - assertTrue(INT_FIELD.equals(INT_FIELD2)); - } - - @Test - public void testHashCodeWithNameAndType() { - Property<Integer> INT_FIELD = Property.create("intField", Integer.class); - Property<Integer> INT_FIELD2 = Property.create("intField", Integer.class); - Property<Long> LONG_FIELD = Property.create("longField", Long.class); - - assertTrue(INT_FIELD.hashCode() == INT_FIELD2.hashCode()); - assertTrue(INT_FIELD.hashCode() != LONG_FIELD.hashCode()); - } - - @Test - public void testEqualsWithExpAndType() { - Property<Integer> INT_FIELD = new Property<>(null, ExpressionFactory.exp("1"), Integer.class); - Property<Integer> INT_FIELD2 = new Property<>(null, ExpressionFactory.exp("1"), Integer.class); - - assertTrue(INT_FIELD != INT_FIELD2); - assertTrue(INT_FIELD.equals(INT_FIELD2)); - } - - @Test - public void testHashCodeWithExpAndType() { - Property<Integer> INT_FIELD = new Property<>(null, ExpressionFactory.exp("1"), Integer.class); - Property<Integer> INT_FIELD2 = new Property<>(null, ExpressionFactory.exp("1"), Integer.class); - Property<Integer> INT_FIELD3 = new Property<>(null, ExpressionFactory.exp("2"), Integer.class); - - assertEquals(INT_FIELD.hashCode(), INT_FIELD2.hashCode()); - assertNotEquals(INT_FIELD.hashCode(), INT_FIELD3.hashCode()); - } - - @Test - public void testOuter() { - Property<String> inner = Property.create("xyz", String.class); - assertEquals("xyz+", inner.outer().getName()); - - Property<String> inner1 = Property.create("xyz.xxx", String.class); - assertEquals("xyz.xxx+", inner1.outer().getName()); - - Property<String> outer = Property.create("xyz+", String.class); - assertEquals("xyz+", outer.outer().getName()); - } - - @Test - public void testLike() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.like("abc"); - assertEquals("prop like \"abc\"", e.toString()); - } - - @Test - public void testLikeIgnoreCase() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.likeIgnoreCase("abc"); - assertEquals("prop likeIgnoreCase \"abc\"", e.toString()); - } - - @Test - public void testLike_NoEscape() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.like("ab%c"); - assertEquals("prop like \"ab%c\"", e.toString()); - assertEquals(0, ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testContains() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.contains("abc"); - assertEquals("prop like \"%abc%\"", e.toString()); - assertEquals(0, ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testStartsWith() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.startsWith("abc"); - assertEquals("prop like \"abc%\"", e.toString()); - assertEquals(0, ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testEndsWith() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.endsWith("abc"); - assertEquals("prop like \"%abc\"", e.toString()); - assertEquals(0, ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testContains_Escape1() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.contains("a%bc"); - assertEquals("prop like \"%a!%bc%\"", e.toString()); - assertEquals('!', ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testContains_Escape2() { - Property<String> p = Property.create("prop", String.class); - Expression e = p.contains("a_!bc"); - assertEquals("prop like \"%a#_!bc%\"", e.toString()); - assertEquals('#', ((PatternMatchNode) e).getEscapeChar()); - } - - @Test - public void testExpressionConstructor() { - Property<Integer> p = Property.create("testPath", new ASTObjPath("test.path"), Integer.class); - assertEquals("testPath", p.getName()); - Expression ex = p.getExpression(); - assertEquals("test.path", ex.toString()); - } - - @Test - public void testCreationWithName() { - Property<String> p1 = new Property<>("p1", String.class); - assertEquals(String.class, p1.getType()); - assertEquals("p1", p1.getName()); - assertEquals(new ASTObjPath("p1"), p1.getExpression()); - - Property<String> p2 = Property.create("p1", String.class); - assertEquals(p1, p2); - } - - @Test - public void testCreationWithExp() { - Expression exp = FunctionExpressionFactory.currentTime(); - - Property<String> p1 = new Property<>(null, exp, String.class); - assertEquals(String.class, p1.getType()); - assertEquals(null, p1.getName()); - assertEquals(exp, p1.getExpression()); - - Property<String> p2 = Property.create(exp, String.class); - assertEquals(p1, p2); - } - - @Test - public void testCreationWithNameAndExp() { - Expression exp = FunctionExpressionFactory.currentTime(); - - Property<String> p1 = new Property<>("p1", exp, String.class); - assertEquals(String.class, p1.getType()); - assertEquals("p1", p1.getName()); - assertEquals(exp, p1.getExpression()); - - Property<String> p2 = Property.create("p1", exp, String.class); - assertEquals(p1, p2); - } - - @Test - public void testAlias() { - Expression exp = FunctionExpressionFactory.currentTime(); - - Property<String> p1 = new Property<>("p1", exp, String.class); - assertEquals(String.class, p1.getType()); - assertEquals("p1", p1.getName()); - assertEquals(exp, p1.getExpression()); - - Property<String> p2 = p1.alias("p2"); - assertEquals(String.class, p2.getType()); - assertEquals("p2", p2.getName()); - assertEquals(exp, p2.getExpression()); - } - - @Test - public void testCount() { - Property<String> p = Property.create("test", String.class); - NumericProperty<Long> newProp = p.count(); - assertTrue(newProp.getExpression() instanceof ASTCount); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testCountDistinct() { - Property<String> p = Property.create("test", String.class); - NumericProperty<Long> newProp = p.countDistinct(); - assertTrue(newProp.getExpression() instanceof ASTCount); - assertTrue(newProp.getExpression().getOperand(0) instanceof ASTDistinct); - assertEquals(p.getExpression(), ((ASTDistinct)newProp.getExpression().getOperand(0)).getOperand(0)); - } - - @Test - public void testMin() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.min(); - assertTrue(newProp.getExpression() instanceof ASTMin); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testMax() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.max(); - assertTrue(newProp.getExpression() instanceof ASTMax); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testSum() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.sum(); - assertTrue(newProp.getExpression() instanceof ASTSum); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testAvg() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.avg(); - assertTrue(newProp.getExpression() instanceof ASTAvg); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testAbs() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.abs(); - assertTrue(newProp.getExpression() instanceof ASTAbs); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testMod() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.mod(3.0); - assertTrue(newProp.getExpression() instanceof ASTMod); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - assertEquals(3.0, newProp.getExpression().getOperand(1)); - } - - @Test - public void testSqrt() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.sqrt(); - assertTrue(newProp.getExpression() instanceof ASTSqrt); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testLength() { - Property<String> p = Property.create("test", String.class); - Property<Integer> newProp = p.length(); - assertTrue(newProp.getExpression() instanceof ASTLength); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testLocateString() { - Property<String> p = Property.create("test", String.class); - Property<Integer> newProp = p.locate("test"); - assertTrue(newProp.getExpression() instanceof ASTLocate); - assertEquals("test", newProp.getExpression().getOperand(0)); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(1)); - } - - @Test - public void testLocateProperty() { - Property<String> p = Property.create("test", String.class); - Property<String> p2 = Property.create("test2", String.class); - Property<Integer> newProp = p.locate(p2); - assertTrue(newProp.getExpression() instanceof ASTLocate); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(1)); - assertEquals(p2.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testSustring() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.substring(1, 2); - assertTrue(newProp.getExpression() instanceof ASTSubstring); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - assertEquals(1, newProp.getExpression().getOperand(1)); - assertEquals(2, newProp.getExpression().getOperand(2)); - } - - @Test - public void testTrim() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.trim(); - assertTrue(newProp.getExpression() instanceof ASTTrim); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testLower() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.lower(); - assertTrue(newProp.getExpression() instanceof ASTLower); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testUpper() { - Property<String> p = Property.create("test", String.class); - Property<String> newProp = p.upper(); - assertTrue(newProp.getExpression() instanceof ASTUpper); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - } - - @Test - public void testConcat() { - Property<String> p = Property.create("test", String.class); - Property<String> p2 = Property.create("concat", String.class); - Expression exp = new ASTScalar(3); - - Property<String> newProp = p.concat("string", exp, p2); - assertTrue(newProp.getExpression() instanceof ASTConcat); - assertEquals(p.getExpression(), newProp.getExpression().getOperand(0)); - assertEquals("string", newProp.getExpression().getOperand(1)); - assertEquals(3, newProp.getExpression().getOperand(2)); // getOperand unwrapping ASTScalar - assertEquals(p2.getExpression(), newProp.getExpression().getOperand(3)); - } -} diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java index 11554d9bf..77a0f08e7 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java @@ -5,7 +5,8 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.cayenne.BaseDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.PropertyFactory; +import org.apache.cayenne.exp.property.StringProperty; /** * Class _Author was generated by Cayenne. @@ -19,7 +20,7 @@ public abstract class _Author extends BaseDataObject { public static final String AUTHOR_ID_PK_COLUMN = "AUTHOR_ID"; - public static final Property<String> NAME = Property.create("name", String.class); + public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class); protected String name; diff --git a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java index 15160cacc..b2d18d900 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java @@ -6,7 +6,9 @@ import java.io.ObjectOutputStream; import java.util.Set; import org.apache.cayenne.BaseDataObject; -import org.apache.cayenne.exp.Property; +import org.apache.cayenne.exp.property.PropertyFactory; +import org.apache.cayenne.exp.property.SetProperty; +import org.apache.cayenne.exp.property.StringProperty; import org.apache.cayenne.testdo.relationships_many_to_many_join.Author; /** @@ -21,8 +23,8 @@ public abstract class _Song extends BaseDataObject { public static final String SONG_ID_PK_COLUMN = "SONG_ID"; - public static final Property<String> NAME = Property.create("name", String.class); - public static final Property<Set<Author>> AUTHORS = Property.create("authors", Set.class); + public static final StringProperty<String> NAME = PropertyFactory.createString("name", String.class); + public static final SetProperty<Author> AUTHORS = PropertyFactory.createSet("authors", Author.class); protected String name;