You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2019/08/26 12:35:30 UTC

[cayenne] branch master updated: CAY-2610 Align methods in ObjectSelect and SQLSelect

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 be23f59  CAY-2610 Align methods in ObjectSelect and SQLSelect
be23f59 is described below

commit be23f59f5c371d9eef02eb1550d8fe68d970da1e
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Mon Aug 26 15:35:16 2019 +0300

    CAY-2610 Align methods in ObjectSelect and SQLSelect
---
 .../org/apache/cayenne/query/ColumnSelect.java     | 29 +++++++++--------
 .../org/apache/cayenne/query/ObjectSelect.java     | 15 ++++-----
 .../java/org/apache/cayenne/query/SQLSelect.java   | 37 +++++++++++-----------
 .../java/org/apache/cayenne/query/SQLSelectIT.java | 14 ++++----
 4 files changed, 48 insertions(+), 47 deletions(-)

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 b82c8c8..a102fcd 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
@@ -384,18 +384,19 @@ public class ColumnSelect<T> extends FluentSelect<T> {
      * }
      * </pre>
      *
-     * @param firstProperty first property
-     * @param otherProperties array of properties to select
+     * @param properties array of properties to select
      * @see ColumnSelect#column(BaseProperty)
      * @see ColumnSelect#columns(Collection)
      */
     @SuppressWarnings("unchecked")
-    public ColumnSelect<Object[]> columns(BaseProperty<?> firstProperty, BaseProperty<?>... otherProperties) {
+    public ColumnSelect<Object[]> columns(BaseProperty<?>... properties) {
+        if (properties.length == 0) {
+            throw new IllegalArgumentException("properties must contain at least one element");
+        }
         if (columns == null) {
-            columns = new ArrayList<>(otherProperties.length + 1);
+            columns = new ArrayList<>(properties.length);
         }
-        columns.add(firstProperty);
-        Collections.addAll(columns, otherProperties);
+        Collections.addAll(columns, properties);
         singleColumn = false;
         return (ColumnSelect<Object[]>)this;
     }
@@ -406,7 +407,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
      * (root entity properties, function call expressions, properties of relationships, etc).</p>
      * <p>
      * @param properties collection of properties, <b>must</b> contain at least one element
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      */
     @SuppressWarnings("unchecked")
     public ColumnSelect<Object[]> columns(Collection<BaseProperty<?>> properties) {
@@ -438,7 +439,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
     }
 
     /**
-     * <p>Shortcut for {@link #columns(BaseProperty, BaseProperty[])} columns}(Property.COUNT)</p>
+     * <p>Shortcut for {@link #columns(BaseProperty[])} columns}(Property.COUNT)</p>
      */
     public ColumnSelect<Object[]> count() {
         return columns(PropertyFactory.COUNT);
@@ -455,7 +456,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select minimum value of property</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      */
     public ColumnSelect<Object[]> min(ComparableProperty<?> property) {
         return columns(property.min());
@@ -463,7 +464,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select maximum value of property</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      */
     public ColumnSelect<Object[]> max(ComparableProperty<?> property) {
         return columns(property.max());
@@ -471,7 +472,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select average value of property</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      * @deprecated since 4.2 use {@link #avg(NumericProperty)}
      */
     @Deprecated
@@ -481,7 +482,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select average value of property</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      */
     public ColumnSelect<Object[]> avg(NumericProperty<?> property) {
         return columns(property.avg());
@@ -489,7 +490,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select sum of values</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      * @deprecated since 4.2 use {@link #sum(NumericProperty)}
      */
     @Deprecated
@@ -499,7 +500,7 @@ public class ColumnSelect<T> extends FluentSelect<T> {
 
     /**
      * <p>Select sum of values</p>
-     * @see ColumnSelect#columns(BaseProperty, BaseProperty[])
+     * @see ColumnSelect#columns(BaseProperty[])
      */
     public <E extends Number> ColumnSelect<Object[]> sum(NumericProperty<E> property) {
         return columns(property.sum());
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 1ce27ac..6638d9a 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
@@ -143,11 +143,10 @@ public class ObjectSelect<T> extends FluentSelect<T> {
      * Creates a ColumnSelect that will fetch multiple columns of a given {@link ObjEntity}
      *
      * @param entityType base persistent class that will be used as a root for this query
-     * @param firstColumn column to select
-     * @param otherColumns columns to select
+     * @param columns columns to select
      */
-    public static ColumnSelect<Object[]> columnQuery(Class<?> entityType, BaseProperty<?> firstColumn, BaseProperty<?>... otherColumns) {
-        return new ColumnSelect<Object[]>().entityType(entityType).columns(firstColumn, otherColumns);
+    public static ColumnSelect<Object[]> columnQuery(Class<?> entityType, BaseProperty<?>... columns) {
+        return new ColumnSelect<Object[]>().entityType(entityType).columns(columns);
     }
 
     protected ObjectSelect() {
@@ -543,15 +542,15 @@ public class ObjectSelect<T> extends FluentSelect<T> {
      * @param properties array of properties to select
      * @see ObjectSelect#column(BaseProperty)
      */
-    public ColumnSelect<Object[]> columns(BaseProperty<?> firstProperty, BaseProperty<?>... properties) {
-        return new ColumnSelect<>(this).columns(firstProperty, properties);
+    public ColumnSelect<Object[]> columns(BaseProperty<?>... properties) {
+        return new ColumnSelect<>(this).columns(properties);
     }
 
     /**
      * <p>Select one specific property.</p>
      * <p>Can be any property that can be resolved against root entity type
      * (root entity's property, function call expression, property of relationships, etc)</p>
-     * <p>If you need several columns use {@link ObjectSelect#columns(BaseProperty, BaseProperty[])} method.</p>
+     * <p>If you need several columns use {@link ObjectSelect#columns(BaseProperty[])} method.</p>
      * <p>
      * <pre>
      * {@code
@@ -562,7 +561,7 @@ public class ObjectSelect<T> extends FluentSelect<T> {
      * </pre>
      * </p>
      * @param property single property to select
-     * @see ObjectSelect#columns(BaseProperty, BaseProperty[])
+     * @see ObjectSelect#columns(BaseProperty[])
      */
     public <E> ColumnSelect<E> column(BaseProperty<E> property) {
         return new ColumnSelect<>(this).column(property);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
index b2f426f..2102a9f 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/SQLSelect.java
@@ -137,7 +137,7 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 * Creates query that selects scalar value and uses default routing
 	 *
 	 * @since 4.1
-	 * @deprecated since 4.2. Use {@link #arrayQuery(String)}
+	 * @deprecated since 4.2. Use {@link #columnQuery(String)}
 	 */
 	@Deprecated
 	public static SQLSelect<Object[]> scalarQuery(String sql) {
@@ -146,11 +146,11 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	}
 
 	/**
-	 *  Creates query that selects scalar value and uses default routing
+	 *  Creates query that selects scalar values (as Object[]) and uses default routing
 	 *
 	 *  @since 4.2
 	 */
-	public static SQLSelect<Object[]> arrayQuery(String sql) {
+	public static SQLSelect<Object[]> columnQuery(String sql) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
 		return query.useScalar();
 	}
@@ -159,7 +159,7 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 * Creates query that selects scalar values (as Object[]) and uses routing based on the
 	 * provided DataMap name.
 	 * @since 4.1
-	 * @deprecated since 4.2. Use {@link #arrayQuery(String, String)}
+	 * @deprecated since 4.2. Use {@link #columnQuery(String, String)}
 	 */
 	@Deprecated
 	public static SQLSelect<Object[]> scalarQuery(String sql, String dataMapName) {
@@ -174,7 +174,7 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 *
 	 * @since 4.2
 	 */
-	public static SQLSelect<Object[]> arrayQuery(String sql, String dataMapName) {
+	public static SQLSelect<Object[]> columnQuery(String sql, String dataMapName) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
 		query.dataMapName = dataMapName;
 		return query.useScalar();
@@ -184,12 +184,12 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 * Creates query that selects scalar values (as Object[]) and uses default routing
 	 *
 	 * @since 4.1
-	 * @deprecated since 4.2. Use {@link #arrayQuery(String, Class, Class...)}
+	 * @deprecated since 4.2. Use {@link #columnQuery(String, Class...)}
 	 */
 	@Deprecated
-	public static SQLSelect<Object[]> scalarQuery(String sql, Class<?> firstType, Class<?>... types) {
+	public static SQLSelect<Object[]> scalarQuery(String sql, Class<?>... types) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
-		return query.resultColumnsTypes(firstType).resultColumnsTypes(types).useScalar();
+		return query.resultColumnsTypes(types).useScalar();
 	}
 
 	/**
@@ -197,9 +197,9 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 *
 	 * @since 4.2
 	 */
-	public static SQLSelect<Object[]> arrayQuery(String sql, Class<?> firstType, Class<?>... types) {
+	public static SQLSelect<Object[]> columnQuery(String sql, Class<?>... types) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
-		return query.resultColumnsTypes(firstType).resultColumnsTypes(types).useScalar();
+		return query.resultColumnsTypes(types).useScalar();
 	}
 
 	/**
@@ -207,16 +207,15 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 * provided DataMap name.
 	 *
 	 * @since 4.1
-	 * @deprecated since 4.2. Use {@link #arrayQuery(String, String, Class, Class...)}
+	 * @deprecated since 4.2. Use {@link #columnQuery(String, String, Class...)}
 	 */
 	@Deprecated
 	public static SQLSelect<Object[]> scalarQuery(String sql,
 												  String dataMapName,
-												  Class<?> firstType,
 												  Class<?>... types) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
 		query.dataMapName = dataMapName;
-		return query.resultColumnsTypes(firstType).resultColumnsTypes(types).useScalar();
+		return query.resultColumnsTypes(types).useScalar();
 	}
 
 	/**
@@ -225,17 +224,19 @@ public class SQLSelect<T> extends IndirectQuery implements Select<T> {
 	 *
 	 * @since 4.2
 	 */
-	public static SQLSelect<Object[]> arrayQuery(String sql,
-												 String dataMapName,
-												 Class<?> firstType,
-												 Class<?>... types) {
+	public static SQLSelect<Object[]> columnQuery(String sql,
+												  String dataMapName,
+												  Class<?>... types) {
 		SQLSelect<Object[]> query = new SQLSelect<>(sql);
 		query.dataMapName = dataMapName;
-		return query.resultColumnsTypes(firstType).resultColumnsTypes(types).useScalar();
+		return query.resultColumnsTypes(types).useScalar();
 	}
 
 	@SuppressWarnings("unchecked")
 	private <E> SQLSelect<E> resultColumnsTypes(Class<?>... types) {
+		if(types.length == 0) {
+			throw new IllegalArgumentException("Empty types");
+		}
 		if(resultColumnsTypes == null) {
 			resultColumnsTypes = new ArrayList<>(types.length);
 		}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
index 4185bb7..d1484d1 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/query/SQLSelectIT.java
@@ -150,7 +150,7 @@ public class SQLSelectIT extends ServerCase {
 	public void testObjectArrayWithDefaultTypesReturnAndDirectives() throws Exception {
 		createArtistDataSet();
 
-		List<Object[]> result = SQLSelect.arrayQuery("SELECT #result('ARTIST_ID' 'java.lang.Long'), #result('ARTIST_NAME' 'java.lang.String') FROM ARTIST_CT")
+		List<Object[]> result = SQLSelect.columnQuery("SELECT #result('ARTIST_ID' 'java.lang.Long'), #result('ARTIST_NAME' 'java.lang.String') FROM ARTIST_CT")
 				.select(context);
 
 		assertEquals(2, result.size());
@@ -164,7 +164,7 @@ public class SQLSelectIT extends ServerCase {
 	public void testObjectArrayReturnAndDirectives() throws Exception {
 		createArtistDataSet();
 
-		SQLSelect.arrayQuery("SELECT #result('ARTIST_ID' 'java.lang.Long'), #result('ARTIST_NAME' 'java.lang.String') FROM ARTIST_CT",
+		SQLSelect.columnQuery("SELECT #result('ARTIST_ID' 'java.lang.Long'), #result('ARTIST_NAME' 'java.lang.String') FROM ARTIST_CT",
 				Integer.class, String.class).select(context);
 	}
 
@@ -172,7 +172,7 @@ public class SQLSelectIT extends ServerCase {
 	public void testObjectArrayWithOneObjectDefaultTypesReturnAndDirectives() throws Exception {
 		createArtistDataSet();
 
-		List<Object[]> result = SQLSelect.arrayQuery("SELECT #result('ARTIST_ID' 'java.lang.Long') FROM ARTIST_CT")
+		List<Object[]> result = SQLSelect.columnQuery("SELECT #result('ARTIST_ID' 'java.lang.Long') FROM ARTIST_CT")
 				.select(context);
 
 		assertEquals(2, result.size());
@@ -185,7 +185,7 @@ public class SQLSelectIT extends ServerCase {
 	public void test_ObjectArrayQueryWithDefaultTypes() throws Exception {
 		createPaintingsDataSet();
 
-		List<Object[]> result = SQLSelect.arrayQuery("SELECT PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE FROM PAINTING")
+		List<Object[]> result = SQLSelect.columnQuery("SELECT PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE FROM PAINTING")
 				.select(context);
 
 		assertEquals(20, result.size());
@@ -196,7 +196,7 @@ public class SQLSelectIT extends ServerCase {
 	public void test_ObjectQueryWithDefaultType() throws Exception {
 		createPaintingsDataSet();
 
-		List<Object[]> result = SQLSelect.arrayQuery("SELECT PAINTING_ID FROM PAINTING")
+		List<Object[]> result = SQLSelect.columnQuery("SELECT PAINTING_ID FROM PAINTING")
 				.select(context);
 		assertEquals(20, result.size());
 		assertTrue(result.get(0) instanceof Object[]);
@@ -207,7 +207,7 @@ public class SQLSelectIT extends ServerCase {
 	public void test_ObjectArrayQueryException() throws Exception {
 		createPaintingsDataSet();
 
-		SQLSelect<Object[]> query = SQLSelect.arrayQuery("SELECT PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE FROM PAINTING", Integer.class, String.class);
+		SQLSelect<Object[]> query = SQLSelect.columnQuery("SELECT PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE FROM PAINTING", Integer.class, String.class);
 		context.performQuery(query);
 	}
 
@@ -225,7 +225,7 @@ public class SQLSelectIT extends ServerCase {
 	public void testObjectArrayWithCustomType() throws SQLException {
 		createArtistDataSet();
 
-		List<Object[]> results = SQLSelect.arrayQuery("SELECT * FROM ARTIST_CT",
+		List<Object[]> results = SQLSelect.columnQuery("SELECT * FROM ARTIST_CT",
 				Integer.class, String.class, LocalDateTime.class).select(context);
 
 		assertEquals(2, results.size());