This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit d86f8be720b2eefc018ea256204c2c90358e96a9
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun Aug 30 13:44:28 2026 -0400

    Query cleanup... AbstractQuery is uneeded
---
 .../apache/cayenne/map/SelectQueryDescriptor.java  |   1 -
 .../org/apache/cayenne/query/AbstractQuery.java    | 100 ---------------------
 .../org/apache/cayenne/query/FluentSelect.java     |   2 +-
 .../org/apache/cayenne/query/ProcedureQuery.java   |  49 +++++++++-
 .../java/org/apache/cayenne/query/SQLTemplate.java |  49 ++++++++--
 .../cayenne/map/SelectQueryDescriptorTest.java     |   2 +-
 .../apache/cayenne/query/AbstractQueryTest.java    |  65 --------------
 .../apache/cayenne/query/MockAbstractQuery.java    |  38 --------
 .../apache/cayenne/query/ProcedureQueryTest.java   |  22 +++++
 .../org/apache/cayenne/query/SQLTemplateTest.java  |  46 ++++++++++
 10 files changed, 160 insertions(+), 214 deletions(-)

diff --git 
a/cayenne/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java 
b/cayenne/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
index 0c0ba5684..1422c418e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/SelectQueryDescriptor.java
@@ -163,7 +163,6 @@ public class SelectQueryDescriptor extends QueryDescriptor {
 
         ObjectSelect<?> query = ObjectSelect.query(Object.class, qualifier);
         query.entityName(rootEntityName);
-        query.setRoot(root);
 
         List<Ordering> orderings = this.getOrderings();
         if (orderings != null && !orderings.isEmpty()) {
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java 
b/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java
deleted file mode 100644
index f3dfa8fa5..000000000
--- a/cayenne/src/main/java/org/apache/cayenne/query/AbstractQuery.java
+++ /dev/null
@@ -1,100 +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.query;
-
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.Procedure;
-import org.apache.cayenne.util.ToStringBuilder;
-
-/**
- * A common superclass of Cayenne queries.
- */
-public abstract class AbstractQuery extends CacheableQuery {
-
-    /**
-     * The root object this query. May be an entity name, Java class, 
ObjEntity or
-     * DbEntity, depending on the specific query and how it was constructed.
-     */
-    protected Object root;
-
-    /**
-     * Returns default select parameters.
-     * 
-     * @since 1.2
-     */
-    public QueryMetadata getMetaData(EntityResolver resolver) {
-        BaseQueryMetadata md = new BaseQueryMetadata();
-        md.resolve(getRoot(), resolver);
-        return md;
-    }
-
-    /**
-     * Returns the root of this query.
-     */
-    public Object getRoot() {
-        return root;
-    }
-
-    /**
-     * Sets the root of the query
-     * 
-     * @param value The new root
-     * @throws IllegalArgumentException if value is not a String, ObjEntity, 
DbEntity,
-     *             Procedure, DataMap, Class or null.
-     */
-    public void setRoot(Object value) {
-        if (value == null) {
-            this.root = null;
-        }
-
-        // sanity check
-        if (!((value instanceof String)
-                || (value instanceof ObjEntity)
-                || (value instanceof DbEntity)
-                || (value instanceof Class)
-                || (value instanceof Procedure) || (value instanceof 
DataMap))) {
-
-            String rootClass = (value != null) ? value.getClass().getName() : 
"null";
-
-            throw new IllegalArgumentException(
-                    getClass().getName()
-                            + ": \"setRoot(..)\" takes a DataMap, String, 
ObjEntity, DbEntity, Procedure, "
-                            + "or Class. It was passed a "
-                            + rootClass);
-        }
-
-        this.root = value;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this)
-                .append("root", root)
-                .toString();
-    }
-
-    /**
-     * @since 1.2
-     */
-    public abstract SQLAction createSQLAction(SQLActionVisitor visitor);
-}
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java 
b/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java
index e7cfb1512..73d2517d7 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/FluentSelect.java
@@ -41,7 +41,7 @@ import org.apache.cayenne.map.ObjEntity;
  *
  * @since 4.0
  */
-public abstract class FluentSelect<T, S extends FluentSelect<T, S>> extends 
AbstractQuery implements Select<T> {
+public abstract class FluentSelect<T, S extends FluentSelect<T, S>> extends 
CacheableQuery implements Select<T> {
 
     // root
     protected Class<?> entityType;
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/ProcedureQuery.java 
b/cayenne/src/main/java/org/apache/cayenne/query/ProcedureQuery.java
index 5e07d4bee..3d30c1358 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/ProcedureQuery.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/ProcedureQuery.java
@@ -19,8 +19,12 @@
 
 package org.apache.cayenne.query;
 
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.Procedure;
+import org.apache.cayenne.util.ToStringBuilder;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -50,7 +54,7 @@ import java.util.Map;
  * {@link org.apache.cayenne.access.DataContext#performGenericQuery(Query)}.
  * </p>
  */
-public class ProcedureQuery extends AbstractQuery {
+public class ProcedureQuery extends CacheableQuery {
 
     public static final String COLUMN_NAME_CAPITALIZATION_PROPERTY = 
"cayenne.ProcedureQuery.columnNameCapitalization";
 
@@ -61,6 +65,49 @@ public class ProcedureQuery extends AbstractQuery {
     ProcedureQueryMetadata metaData = new ProcedureQueryMetadata();
     protected List<ProcedureColumn[]> resultDescriptors;
 
+    /**
+     * The root object of this query. May be an entity name, Java class, 
ObjEntity or
+     * DbEntity, depending on the specific query and how it was constructed.
+     */
+    protected Object root;
+
+    /**
+     * Returns the root of this query.
+     */
+    public Object getRoot() {
+        return root;
+    }
+
+    /**
+     * Sets the root of the query.
+     *
+     * @param value The new root
+     * @throws IllegalArgumentException if value is not a String, ObjEntity, 
DbEntity,
+     *             Procedure, DataMap, Class or null.
+     */
+    public void setRoot(Object value) {
+        if (value != null && !(value instanceof String
+                || value instanceof ObjEntity
+                || value instanceof DbEntity
+                || value instanceof Class
+                || value instanceof Procedure
+                || value instanceof DataMap)) {
+
+            throw new IllegalArgumentException(("%s: \"setRoot(..)\" takes a 
DataMap, String, ObjEntity, DbEntity, "
+                    + "Procedure, or Class. It was passed a %s")
+                    .formatted(getClass().getName(), 
value.getClass().getName()));
+        }
+
+        this.root = value;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this)
+                .append("root", root)
+                .toString();
+    }
+
     /**
      * Creates an empty procedure query. The query would fetch DataRows. 
Fetching
      * Persistent objects can be achieved either by using
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java 
b/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java
index 157541adb..980bcd34f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/SQLTemplate.java
@@ -25,7 +25,9 @@ import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.SQLResult;
+import org.apache.cayenne.util.ToStringBuilder;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -65,7 +67,7 @@ import java.util.stream.Stream;
  * 
  * @since 1.1
  */
-public class SQLTemplate extends AbstractQuery {
+public class SQLTemplate extends CacheableQuery {
 
        private static final long serialVersionUID = -3073521388289663641L;
 
@@ -116,14 +118,47 @@ public class SQLTemplate extends AbstractQuery {
                Collections.addAll(resultColumnsTypes, types);
        }
 
-       @Override
+       /**
+        * The root object of this query. May be an entity name, Java class, 
ObjEntity or
+        * DbEntity, depending on how the query was constructed. Null root is 
allowed.
+        */
+       protected Object root;
+
+       /**
+        * Returns the root of this query.
+        */
+       public Object getRoot() {
+               return root;
+       }
+
+       /**
+        * Sets the root of the query.
+        *
+        * @param value The new root
+        * @throws IllegalArgumentException if value is not a String, 
ObjEntity, DbEntity,
+        *             Procedure, DataMap, Class or null.
+        */
        public void setRoot(Object value) {
-               // allow null root...
-               if (value == null) {
-                       this.root = null;
-               } else {
-                       super.setRoot(value);
+               if (value != null && !(value instanceof String
+                               || value instanceof ObjEntity
+                               || value instanceof DbEntity
+                               || value instanceof Class
+                               || value instanceof Procedure
+                               || value instanceof DataMap)) {
+
+                       throw new IllegalArgumentException(("%s: 
\"setRoot(..)\" takes a DataMap, String, ObjEntity, DbEntity, "
+                                       + "Procedure, or Class. It was passed a 
%s")
+                                       .formatted(getClass().getName(), 
value.getClass().getName()));
                }
+
+               this.root = value;
+       }
+
+       @Override
+       public String toString() {
+               return new ToStringBuilder(this)
+                               .append("root", root)
+                               .toString();
        }
 
        @Override
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java 
b/cayenne/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
index 92ba8fa45..69815aac9 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/map/SelectQueryDescriptorTest.java
@@ -47,7 +47,7 @@ public class SelectQueryDescriptorTest {
         builder.setRoot(entity);
 
         assertTrue(builder.buildQuery() instanceof ObjectSelect);
-        assertSame(entity, builder.buildQuery().getRoot());
+        assertEquals(entity.getName(), builder.buildQuery().getEntityName());
     }
 
     @Test
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/query/AbstractQueryTest.java 
b/cayenne/src/test/java/org/apache/cayenne/query/AbstractQueryTest.java
deleted file mode 100644
index e260d91df..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/query/AbstractQueryTest.java
+++ /dev/null
@@ -1,65 +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.query;
-
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.testdo.testmap.Artist;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
-public class AbstractQueryTest {
-
-    @Test
-    public void setRootEntityName() {
-        AbstractQuery query = new MockAbstractQuery();
-        assertNull(query.getRoot());
-        query.setRoot("SomeEntity");
-        assertSame("SomeEntity", query.getRoot());
-    }
-
-    @Test
-    public void setRootObjEntity() {
-        AbstractQuery query = new MockAbstractQuery();
-
-        assertNull(query.getRoot());
-        ObjEntity e = new ObjEntity("ABC");
-        query.setRoot(e);
-        assertSame(e, query.getRoot());
-    }
-
-    @Test
-    public void setRootClass() {
-        AbstractQuery query = new MockAbstractQuery();
-        assertNull(query.getRoot());
-        query.setRoot(Artist.class);
-        assertSame(Artist.class, query.getRoot());
-    }
-
-    @Test
-    public void setInvalidRoot() {
-        AbstractQuery query = new MockAbstractQuery();
-        assertNull(query.getRoot());
-        assertThrows(IllegalArgumentException.class, () -> query.setRoot(1));
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/query/MockAbstractQuery.java 
b/cayenne/src/test/java/org/apache/cayenne/query/MockAbstractQuery.java
deleted file mode 100644
index c56510665..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/query/MockAbstractQuery.java
+++ /dev/null
@@ -1,38 +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.query;
-
-
-public class MockAbstractQuery extends AbstractQuery {
-
-    public MockAbstractQuery() {
-
-    }
-
-    @Override
-    public SQLAction createSQLAction(SQLActionVisitor visitor) {
-        return null;
-    }
-
-    @Override
-    protected BaseQueryMetadata getBaseMetaData() {
-        return null;
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/query/ProcedureQueryTest.java 
b/cayenne/src/test/java/org/apache/cayenne/query/ProcedureQueryTest.java
index 167e75895..e37b3a26b 100644
--- a/cayenne/src/test/java/org/apache/cayenne/query/ProcedureQueryTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/query/ProcedureQueryTest.java
@@ -19,16 +19,38 @@
 
 package org.apache.cayenne.query;
 
+import org.apache.cayenne.map.Procedure;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ProcedureQueryTest {
 
+    @Test
+    public void setRootProcedureName() {
+        ProcedureQuery query = new ProcedureQuery("SomeProcedure");
+        assertSame("SomeProcedure", query.getRoot());
+    }
+
+    @Test
+    public void setRootProcedure() {
+        Procedure procedure = new Procedure("ABC");
+        ProcedureQuery query = new ProcedureQuery(procedure);
+        assertSame(procedure, query.getRoot());
+    }
+
+    @Test
+    public void setInvalidRoot() {
+        ProcedureQuery query = new ProcedureQuery();
+        assertNull(query.getRoot());
+        assertThrows(IllegalArgumentException.class, () -> query.setRoot(1));
+    }
+
     @Test
     public void columnNameCapitalization() {
         ProcedureQuery q1 = new ProcedureQuery();
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/query/SQLTemplateTest.java 
b/cayenne/src/test/java/org/apache/cayenne/query/SQLTemplateTest.java
index 95d1212e7..0cdbd4c83 100644
--- a/cayenne/src/test/java/org/apache/cayenne/query/SQLTemplateTest.java
+++ b/cayenne/src/test/java/org/apache/cayenne/query/SQLTemplateTest.java
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotSame;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
 
@@ -32,11 +33,56 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.cayenne.map.EntityResolver;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.util.Util;
 import org.junit.jupiter.api.Test;
 
 public class SQLTemplateTest {
 
+       @Test
+       public void setRootEntityName() {
+               SQLTemplate query = new SQLTemplate();
+               assertNull(query.getRoot());
+
+               query.setRoot("SomeEntity");
+               assertSame("SomeEntity", query.getRoot());
+       }
+
+       @Test
+       public void setRootObjEntity() {
+               SQLTemplate query = new SQLTemplate();
+               assertNull(query.getRoot());
+
+               ObjEntity e = new ObjEntity("ABC");
+               query.setRoot(e);
+               assertSame(e, query.getRoot());
+       }
+
+       @Test
+       public void setRootClass() {
+               SQLTemplate query = new SQLTemplate();
+               assertNull(query.getRoot());
+
+               query.setRoot(Artist.class);
+               assertSame(Artist.class, query.getRoot());
+       }
+
+       @Test
+       public void setRootNull() {
+               SQLTemplate query = new SQLTemplate();
+               query.setRoot("SomeEntity");
+
+               query.setRoot(null);
+               assertNull(query.getRoot());
+       }
+
+       @Test
+       public void setInvalidRoot() {
+               SQLTemplate query = new SQLTemplate();
+               assertThrows(IllegalArgumentException.class, () -> 
query.setRoot(1));
+       }
+
        @Test
        public void setParams() throws Exception {
                SQLTemplate query = new SQLTemplate();

Reply via email to