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

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

commit c03802b0890d999250c114d571416cae94d2d3ea
Author: Andrus Adamchik <[email protected]>
AuthorDate: Thu May 7 13:31:40 2026 -0400

    CAY-2935 Upgrade Cayenne 5.0 to Java 21
    
    syntax upgrade - switch statements
---
 .../cayenne/di/spi/DefaultAdhocObjectFactory.java  | 84 +++++++++-------------
 .../upgrade/handlers/UpgradeHandler_V8.java        | 24 ++-----
 .../org/apache/cayenne/ObjectContextStateLog.java  | 21 +++---
 .../java/org/apache/cayenne/PersistenceState.java  | 25 +++----
 .../cayenne/access/DataContextDeleteAction.java    | 61 +++++++---------
 .../org/apache/cayenne/access/ObjectStore.java     | 81 ++++++---------------
 .../cayenne/configuration/xml/DataMapHandler.java  | 52 ++++++--------
 .../java/org/apache/cayenne/exp/Expression.java    | 70 +++++++-----------
 .../java/org/apache/cayenne/map/DeleteRule.java    | 16 ++---
 .../org/apache/cayenne/query/MappedSelect.java     | 25 ++++---
 10 files changed, 168 insertions(+), 291 deletions(-)

diff --git 
a/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
 
b/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
index c50ea0025..22452177b 100644
--- 
a/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
+++ 
b/cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java
@@ -91,41 +91,30 @@ public class DefaultAdhocObjectFactory implements 
AdhocObjectFactory {
             return Class.forName(className, true, classLoader);
         } catch (ClassNotFoundException e) {
             if (!className.endsWith("[]")) {
-                switch (className) {
-                    case "byte":
-                        return Byte.TYPE;
-                    case "int":
-                        return Integer.TYPE;
-                    case "short":
-                        return Short.TYPE;
-                    case "char":
-                        return Character.TYPE;
-                    case "double":
-                        return Double.TYPE;
-                    case "long":
-                        return Long.TYPE;
-                    case "float":
-                        return Float.TYPE;
-                    case "boolean":
-                        return Boolean.TYPE;
-                    case "void":
-                        return Void.TYPE;
-
+                return switch (className) {
+                    case "byte" -> Byte.TYPE;
+                    case "int" -> Integer.TYPE;
+                    case "short" -> Short.TYPE;
+                    case "char" -> Character.TYPE;
+                    case "double" -> Double.TYPE;
+                    case "long" -> Long.TYPE;
+                    case "float" -> Float.TYPE;
+                    case "boolean" -> Boolean.TYPE;
+                    case "void" -> Void.TYPE;
                     // try inner class often specified with "." instead of $
-                    default:
+                    default -> {
                         int dot = className.lastIndexOf('.');
                         if (dot > 0 && dot + 1 < className.length()) {
-                            className = className.substring(0, dot) + "$" + 
className.substring(dot + 1);
+                            String innerClass = className.substring(0, dot) + 
"$" + className.substring(dot + 1);
                             try {
-                                return Class.forName(className, true, 
classLoader);
+                                yield Class.forName(innerClass, true, 
classLoader);
                             } catch (ClassNotFoundException nestedE) {
                                 // ignore, throw the original exception...
                             }
                         }
-                        break;
-                }
-
-                throw new DIRuntimeException("Invalid class: '%s'", e, 
className);
+                        throw new DIRuntimeException("Invalid class: '%s'", e, 
className);
+                    }
+                };
             }
 
             if (className.length() < 3) {
@@ -135,30 +124,23 @@ public class DefaultAdhocObjectFactory implements 
AdhocObjectFactory {
             // TODO: support for multi-dim arrays
             className = className.substring(0, className.length() - 2);
 
-            switch (className) {
-                case "byte":
-                    return byte[].class;
-                case "int":
-                    return int[].class;
-                case "long":
-                    return long[].class;
-                case "short":
-                    return short[].class;
-                case "char":
-                    return char[].class;
-                case "double":
-                    return double[].class;
-                case "float":
-                    return float[].class;
-                case "boolean":
-                    return boolean[].class;
-            }
-
-            try {
-                return Class.forName("[L" + className + ";", true, 
classLoader);
-            } catch (ClassNotFoundException e1) {
-                throw new DIRuntimeException("Invalid class: '%s'", e1, 
className);
-            }
+            return switch (className) {
+                case "byte" -> byte[].class;
+                case "int" -> int[].class;
+                case "long" -> long[].class;
+                case "short" -> short[].class;
+                case "char" -> char[].class;
+                case "double" -> double[].class;
+                case "float" -> float[].class;
+                case "boolean" -> boolean[].class;
+                default -> {
+                    try {
+                        yield Class.forName("[L" + className + ";", true, 
classLoader);
+                    } catch (ClassNotFoundException e1) {
+                        throw new DIRuntimeException("Invalid class: '%s'", 
e1, className);
+                    }
+                }
+            };
         }
     }
 }
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
index c94dc68ec..5ce9328f9 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
@@ -64,23 +64,13 @@ public class UpgradeHandler_V8 implements UpgradeHandler {
                 continue;
             }
 
-            String queryType;
-            switch (factory) {
-                case "org.apache.cayenne.map.SelectQueryBuilder":
-                    queryType = QueryDescriptor.SELECT_QUERY;
-                    break;
-                case "org.apache.cayenne.map.SQLTemplateBuilder":
-                    queryType = QueryDescriptor.SQL_TEMPLATE;
-                    break;
-                case "org.apache.cayenne.map.EjbqlBuilder":
-                    queryType = QueryDescriptor.EJBQL_QUERY;
-                    break;
-                case "org.apache.cayenne.map.ProcedureQueryBuilder":
-                    queryType = QueryDescriptor.PROCEDURE_QUERY;
-                    break;
-                default:
-                    throw new ConfigurationException("Unknown query factory: " 
+ factory);
-            }
+            String queryType = switch (factory) {
+                case "org.apache.cayenne.map.SelectQueryBuilder" -> 
QueryDescriptor.SELECT_QUERY;
+                case "org.apache.cayenne.map.SQLTemplateBuilder" -> 
QueryDescriptor.SQL_TEMPLATE;
+                case "org.apache.cayenne.map.EjbqlBuilder" -> 
QueryDescriptor.EJBQL_QUERY;
+                case "org.apache.cayenne.map.ProcedureQueryBuilder" -> 
QueryDescriptor.PROCEDURE_QUERY;
+                default -> throw new ConfigurationException("Unknown query 
factory: " + factory);
+            };
 
             queryElement.setAttribute("type", queryType);
             queryElement.removeAttribute("factory");
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/ObjectContextStateLog.java 
b/cayenne/src/main/java/org/apache/cayenne/ObjectContextStateLog.java
index ad3c147ad..de67c2541 100644
--- a/cayenne/src/main/java/org/apache/cayenne/ObjectContextStateLog.java
+++ b/cayenne/src/main/java/org/apache/cayenne/ObjectContextStateLog.java
@@ -63,14 +63,12 @@ class ObjectContextStateLog implements GraphChangeHandler {
             if (node instanceof Persistent) {
                 Persistent persistentNode = (Persistent) node;
                 switch (persistentNode.getPersistenceState()) {
-                    case PersistenceState.MODIFIED:
-                    case PersistenceState.NEW:
-                        
persistentNode.setPersistenceState(PersistenceState.COMMITTED);
-                        break;
-                    case PersistenceState.DELETED:
+                    case PersistenceState.MODIFIED, PersistenceState.NEW ->
+                            
persistentNode.setPersistenceState(PersistenceState.COMMITTED);
+                    case PersistenceState.DELETED -> {
                         deletedIds.add(id);
                         
persistentNode.setPersistenceState(PersistenceState.TRANSIENT);
-                        break;
+                    }
                 }
             }
         }
@@ -91,13 +89,10 @@ class ObjectContextStateLog implements GraphChangeHandler {
             if (node instanceof Persistent) {
                 Persistent persistentNode = (Persistent) node;
                 switch (persistentNode.getPersistenceState()) {
-                    case PersistenceState.MODIFIED:
-                    case PersistenceState.DELETED:
-                        
persistentNode.setPersistenceState(PersistenceState.COMMITTED);
-                        break;
-                    case PersistenceState.NEW:
-                        
persistentNode.setPersistenceState(PersistenceState.TRANSIENT);
-                        break;
+                    case PersistenceState.MODIFIED, PersistenceState.DELETED ->
+                            
persistentNode.setPersistenceState(PersistenceState.COMMITTED);
+                    case PersistenceState.NEW ->
+                            
persistentNode.setPersistenceState(PersistenceState.TRANSIENT);
                 }
             }
         }
diff --git a/cayenne/src/main/java/org/apache/cayenne/PersistenceState.java 
b/cayenne/src/main/java/org/apache/cayenne/PersistenceState.java
index 972c12ca6..6355bea5e 100644
--- a/cayenne/src/main/java/org/apache/cayenne/PersistenceState.java
+++ b/cayenne/src/main/java/org/apache/cayenne/PersistenceState.java
@@ -37,22 +37,15 @@ public class PersistenceState {
      * Returns String label for persistence state. Used for debugging.
      */
     public static String persistenceStateName(int persistenceState) {
-        switch (persistenceState) {
-            case PersistenceState.TRANSIENT:
-                return "transient";
-            case PersistenceState.NEW:
-                return "new";
-            case PersistenceState.MODIFIED:
-                return "modified";
-            case PersistenceState.COMMITTED:
-                return "committed";
-            case PersistenceState.HOLLOW:
-                return "hollow";
-            case PersistenceState.DELETED:
-                return "deleted";
-            default:
-                return "unknown";
-        }
+        return switch (persistenceState) {
+            case PersistenceState.TRANSIENT -> "transient";
+            case PersistenceState.NEW -> "new";
+            case PersistenceState.MODIFIED -> "modified";
+            case PersistenceState.COMMITTED -> "committed";
+            case PersistenceState.HOLLOW -> "hollow";
+            case PersistenceState.DELETED -> "deleted";
+            default -> "unknown";
+        };
     }
 
     /**
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java 
b/cayenne/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
index 82708f741..9eb4784da 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/access/DataContextDeleteAction.java
@@ -176,50 +176,43 @@ class DataContextDeleteAction {
 
             // process remaining rules
             switch (relationship.getDeleteRule()) {
-                case DeleteRule.NO_ACTION:
-                    break;
-                case DeleteRule.NULLIFY:
+                case DeleteRule.NO_ACTION -> { /* nothing to do */ }
+                case DeleteRule.NULLIFY -> {
                     ArcProperty reverseArc = 
property.getComplimentaryReverseArc();
+                    if (reverseArc != null) {
+                        reverseArc.visit(new PropertyVisitor() {
 
-                    if (reverseArc == null) {
-                        // nothing we can do here
-                        break;
-                    }
-
-                    reverseArc.visit(new PropertyVisitor() {
-
-                        public boolean visitAttribute(AttributeProperty 
property) {
-                            return false;
-                        }
-
-                        public boolean visitToMany(ToManyProperty property) {
-                            for (Persistent relatedObject : relatedObjects) {
-                                property.removeTarget(relatedObject, object, 
true);
+                            public boolean visitAttribute(AttributeProperty 
property) {
+                                return false;
                             }
-                            return false;
-                        }
-
-                        public boolean visitToOne(ToOneProperty property) {
-                            // Inverse is to-one - find all related objects and
-                            // nullify the reverse relationship
-                            for (Persistent relatedObject : relatedObjects) {
-                                property.setTarget(relatedObject, null, true);
+
+                            public boolean visitToMany(ToManyProperty 
property) {
+                                for (Persistent relatedObject : 
relatedObjects) {
+                                    property.removeTarget(relatedObject, 
object, true);
+                                }
+                                return false;
                             }
-                            return false;
-                        }
-                    });
 
-                    break;
-                case DeleteRule.CASCADE:
-                    // Delete all related objects
+                            public boolean visitToOne(ToOneProperty property) {
+                                // Inverse is to-one - find all related 
objects and
+                                // nullify the reverse relationship
+                                for (Persistent relatedObject : 
relatedObjects) {
+                                    property.setTarget(relatedObject, null, 
true);
+                                }
+                                return false;
+                            }
+                        });
+                    }
+                }
+                case DeleteRule.CASCADE -> {
                     for (Persistent relatedObject : relatedObjects) {
                         performDelete(relatedObject);
                     }
-
-                    break;
-                default:
+                }
+                default -> {
                     object.setPersistenceState(oldState);
                     throw new CayenneRuntimeException("Invalid delete rule 
%s", relationship.getDeleteRule());
+                }
             }
         }
     }
diff --git a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java 
b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
index 372fba389..82e1b3e25 100644
--- a/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
+++ b/cayenne/src/main/java/org/apache/cayenne/access/ObjectStore.java
@@ -346,25 +346,16 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
             Persistent object = it.next();
             int objectState = object.getPersistenceState();
             switch (objectState) {
-                case PersistenceState.NEW:
+                case PersistenceState.NEW -> {
                     it.remove();
-
                     object.setObjectContext(null);
                     object.setObjectId(null);
                     object.setPersistenceState(PersistenceState.TRANSIENT);
-                    break;
-                case PersistenceState.DELETED:
-                    // Do the same as for modified... deleted is only a 
persistence state,
-                    // so
-                    // rolling the object back will set the state to committed
-                case PersistenceState.MODIFIED:
-                    // this will clean any modifications and defer refresh 
from snapshot
-                    // till the next object accessor is called
-                    object.setPersistenceState(PersistenceState.HOLLOW);
-                    break;
-                default:
-                    // Transient, committed and hollow need no handling
-                    break;
+                }
+                // deleted is only a persistence state, so rolling back sets 
state to committed
+                case PersistenceState.DELETED, PersistenceState.MODIFIED ->
+                        object.setPersistenceState(PersistenceState.HOLLOW);
+                default -> { /* Transient, committed and hollow need no 
handling */ }
             }
         }
 
@@ -421,18 +412,16 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
             Persistent object = objectMap.get(id);
 
             switch (object.getPersistenceState()) {
-                case PersistenceState.DELETED:
+                case PersistenceState.DELETED -> {
                     objectMap.remove(id);
-                    if(trackedFlattenedPaths != null) {
+                    if (trackedFlattenedPaths != null) {
                         trackedFlattenedPaths.remove(id);
                     }
                     object.setObjectContext(null);
                     object.setPersistenceState(PersistenceState.TRANSIENT);
-                    break;
-                case PersistenceState.NEW:
-                case PersistenceState.MODIFIED:
-                    object.setPersistenceState(PersistenceState.COMMITTED);
-                    break;
+                }
+                case PersistenceState.NEW, PersistenceState.MODIFIED ->
+                        object.setPersistenceState(PersistenceState.COMMITTED);
             }
         }
 
@@ -610,41 +599,29 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
             DataContextDelegate delegate;
 
             switch (object.getPersistenceState()) {
-                case PersistenceState.COMMITTED:
-                case PersistenceState.HOLLOW:
-                case PersistenceState.DELETED:
-
-                    // consult delegate
+                case PersistenceState.COMMITTED, PersistenceState.HOLLOW, 
PersistenceState.DELETED -> {
                     delegate = context.nonNullDelegate();
-
                     if (delegate.shouldProcessDelete(object)) {
                         objectMap.remove(nodeId);
                         changes.remove(nodeId);
-                        if(trackedFlattenedPaths != null) {
+                        if (trackedFlattenedPaths != null) {
                             trackedFlattenedPaths.remove(nodeId);
                         }
-
                         // setting DataContext to null will also set state to 
transient
                         object.setObjectContext(null);
                         delegate.finishedProcessDelete(object);
                     }
-
-                    break;
-
-                case PersistenceState.MODIFIED:
-
-                    // consult delegate
+                }
+                case PersistenceState.MODIFIED -> {
                     delegate = context.nonNullDelegate();
                     if (delegate.shouldProcessDelete(object)) {
                         object.setPersistenceState(PersistenceState.NEW);
                         changes.remove(nodeId);
                         registerNode(nodeId, object);
                         nodeCreated(nodeId);
-
                         delegate.finishedProcessDelete(object);
                     }
-
-                    break;
+                }
             }
         }
     }
@@ -661,36 +638,22 @@ public class ObjectStore implements Serializable, 
SnapshotEventListener, GraphMa
                     continue;
                 }
 
-                // TODO: refactor "switch" to avoid code duplication
-
                 switch (object.getPersistenceState()) {
-                    case PersistenceState.COMMITTED:
-                        object.setPersistenceState(PersistenceState.HOLLOW);
-                        break;
-                    case PersistenceState.MODIFIED:
+                    case PersistenceState.COMMITTED ->
+                            
object.setPersistenceState(PersistenceState.HOLLOW);
+                    case PersistenceState.MODIFIED -> {
                         DataContext context = (DataContext) 
object.getObjectContext();
                         DataRow diff = getSnapshot(oid);
-                        // consult delegate if it exists
                         DataContextDelegate delegate = 
context.nonNullDelegate();
                         if (delegate.shouldMergeChanges(object, diff)) {
                             ClassDescriptor descriptor = context
                                     .getEntityResolver()
                                     .getClassDescriptor(oid.getEntityName());
-                            DataRowUtils.forceMergeWithSnapshot(
-                                    context,
-                                    descriptor,
-                                    object,
-                                    diff);
+                            DataRowUtils.forceMergeWithSnapshot(context, 
descriptor, object, diff);
                             delegate.finishedMergeChanges(object);
                         }
-
-                    case PersistenceState.HOLLOW:
-                        // do nothing
-                        break;
-
-                    case PersistenceState.DELETED:
-                        // TODO: Do nothing? Or treat as merged?
-                        break;
+                    }
+                    case PersistenceState.HOLLOW, PersistenceState.DELETED -> 
{ /* do nothing */ }
                 }
             }
         }
diff --git 
a/cayenne/src/main/java/org/apache/cayenne/configuration/xml/DataMapHandler.java
 
b/cayenne/src/main/java/org/apache/cayenne/configuration/xml/DataMapHandler.java
index f219277a7..b46f21f32 100644
--- 
a/cayenne/src/main/java/org/apache/cayenne/configuration/xml/DataMapHandler.java
+++ 
b/cayenne/src/main/java/org/apache/cayenne/configuration/xml/DataMapHandler.java
@@ -61,46 +61,34 @@ public class DataMapHandler extends 
NamespaceAwareNestedTagHandler {
     @Override
     protected boolean processElement(String namespaceURI, String localName,
                                      Attributes attributes) throws 
SAXException {
-        switch (localName) {
-            case PROPERTY_TAG:
+        return switch (localName) {
+            case PROPERTY_TAG -> {
                 addProperty(attributes);
-                return true;
-
-            case DATA_MAP_TAG:
+                yield true;
+            }
+            case DATA_MAP_TAG -> {
                 this.dataMap = new DataMap();
-                return true;
-        }
-
-        return false;
+                yield true;
+            }
+            default -> false;
+        };
     }
 
     @Override
     protected ContentHandler createChildTagHandler(String namespaceURI, String 
localName,
                                                    String qName, Attributes 
attributes) {
 
-        if(namespaceURI.equals(targetNamespace)) {
-            switch (localName) {
-                case DB_ENTITY_TAG:
-                    return new DbEntityHandler(this, dataMap);
-
-                case OBJ_ENTITY_TAG:
-                    return new ObjEntityHandler(this, dataMap);
-
-                case DB_RELATIONSHIP_TAG:
-                    return new DbRelationshipHandler(this, dataMap);
-
-                case OBJ_RELATIONSHIP_TAG:
-                    return new ObjRelationshipHandler(this, dataMap);
-
-                case PROCEDURE_TAG:
-                    return new ProcedureHandler(this, dataMap);
-
-                case QUERY_TAG:
-                    return new QueryDescriptorHandler(this, dataMap);
-
-                case EMBEDDABLE_TAG:
-                    return new EmbeddableHandler(this, dataMap);
-            }
+        if (namespaceURI.equals(targetNamespace)) {
+            return switch (localName) {
+                case DB_ENTITY_TAG -> new DbEntityHandler(this, dataMap);
+                case OBJ_ENTITY_TAG -> new ObjEntityHandler(this, dataMap);
+                case DB_RELATIONSHIP_TAG -> new DbRelationshipHandler(this, 
dataMap);
+                case OBJ_RELATIONSHIP_TAG -> new ObjRelationshipHandler(this, 
dataMap);
+                case PROCEDURE_TAG -> new ProcedureHandler(this, dataMap);
+                case QUERY_TAG -> new QueryDescriptorHandler(this, dataMap);
+                case EMBEDDABLE_TAG -> new EmbeddableHandler(this, dataMap);
+                default -> super.createChildTagHandler(namespaceURI, 
localName, qName, attributes);
+            };
         }
 
         return super.createChildTagHandler(namespaceURI, localName, qName, 
attributes);
diff --git a/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java 
b/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
index a3319db2b..5b845ab14 100644
--- a/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
+++ b/cayenne/src/main/java/org/apache/cayenne/exp/Expression.java
@@ -244,52 +244,30 @@ public abstract class Expression implements Serializable, 
XMLSerializable {
         * Returns String label for this expression. Used for debugging.
         */
        public String expName() {
-               switch (type) {
-               case AND:
-                       return "AND";
-               case OR:
-                       return "OR";
-               case NOT:
-                       return "NOT";
-               case EQUAL_TO:
-                       return "=";
-               case NOT_EQUAL_TO:
-                       return "<>";
-               case LESS_THAN:
-                       return "<";
-               case LESS_THAN_EQUAL_TO:
-                       return "<=";
-               case GREATER_THAN:
-                       return ">";
-               case GREATER_THAN_EQUAL_TO:
-                       return ">=";
-               case BETWEEN:
-                       return "BETWEEN";
-               case IN:
-                       return "IN";
-               case LIKE:
-                       return "LIKE";
-               case LIKE_IGNORE_CASE:
-                       return "LIKE_IGNORE_CASE";
-               case OBJ_PATH:
-                       return "OBJ_PATH";
-               case DB_PATH:
-                       return "DB_PATH";
-               case LIST:
-                       return "LIST";
-               case NOT_BETWEEN:
-                       return "NOT BETWEEN";
-               case NOT_IN:
-                       return "NOT IN";
-               case NOT_LIKE:
-                       return "NOT LIKE";
-               case NOT_LIKE_IGNORE_CASE:
-                       return "NOT LIKE IGNORE CASE";
-               case FUNCTION_CALL:
-                       return "FUNCTION_CALL";
-               default:
-                       return "other";
-               }
+               return switch (type) {
+                       case AND -> "AND";
+                       case OR -> "OR";
+                       case NOT -> "NOT";
+                       case EQUAL_TO -> "=";
+                       case NOT_EQUAL_TO -> "<>";
+                       case LESS_THAN -> "<";
+                       case LESS_THAN_EQUAL_TO -> "<=";
+                       case GREATER_THAN -> ">";
+                       case GREATER_THAN_EQUAL_TO -> ">=";
+                       case BETWEEN -> "BETWEEN";
+                       case IN -> "IN";
+                       case LIKE -> "LIKE";
+                       case LIKE_IGNORE_CASE -> "LIKE_IGNORE_CASE";
+                       case OBJ_PATH -> "OBJ_PATH";
+                       case DB_PATH -> "DB_PATH";
+                       case LIST -> "LIST";
+                       case NOT_BETWEEN -> "NOT BETWEEN";
+                       case NOT_IN -> "NOT IN";
+                       case NOT_LIKE -> "NOT LIKE";
+                       case NOT_LIKE_IGNORE_CASE -> "NOT LIKE IGNORE CASE";
+                       case FUNCTION_CALL -> "FUNCTION_CALL";
+                       default -> "other";
+               };
        }
 
        @Override
diff --git a/cayenne/src/main/java/org/apache/cayenne/map/DeleteRule.java 
b/cayenne/src/main/java/org/apache/cayenne/map/DeleteRule.java
index 987e6db2f..4767f8f05 100644
--- a/cayenne/src/main/java/org/apache/cayenne/map/DeleteRule.java
+++ b/cayenne/src/main/java/org/apache/cayenne/map/DeleteRule.java
@@ -64,16 +64,12 @@ public class DeleteRule {
      * with loading old maps.
      */
     public static String deleteRuleName(int deleteRule) {
-        switch (deleteRule) {
-            case DeleteRule.NULLIFY :
-                return NULLIFY_NAME;
-            case DeleteRule.CASCADE :
-                return CASCADE_NAME;
-            case DeleteRule.DENY :
-                return DENY_NAME;
-            default :
-                return NO_ACTION_NAME;
-        }
+        return switch (deleteRule) {
+            case DeleteRule.NULLIFY -> NULLIFY_NAME;
+            case DeleteRule.CASCADE -> CASCADE_NAME;
+            case DeleteRule.DENY -> DENY_NAME;
+            default -> NO_ACTION_NAME;
+        };
     }
 
     /**
diff --git a/cayenne/src/main/java/org/apache/cayenne/query/MappedSelect.java 
b/cayenne/src/main/java/org/apache/cayenne/query/MappedSelect.java
index 18e5f669b..c6322221f 100644
--- a/cayenne/src/main/java/org/apache/cayenne/query/MappedSelect.java
+++ b/cayenne/src/main/java/org/apache/cayenne/query/MappedSelect.java
@@ -198,7 +198,7 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
         }
 
         switch (descriptor.getType()) {
-            case QueryDescriptor.SELECT_QUERY:
+            case QueryDescriptor.SELECT_QUERY -> {
                 ObjectSelect<?> selectQuery = (ObjectSelect<?>) query;
                 if (fetchLimit != null) {
                     selectQuery.limit(fetchLimit);
@@ -215,8 +215,8 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (cacheStrategyOverride != null) {
                     selectQuery.setCacheStrategy(cacheStrategyOverride);
                 }
-                break;
-            case QueryDescriptor.SQL_TEMPLATE:
+            }
+            case QueryDescriptor.SQL_TEMPLATE -> {
                 SQLTemplate sqlTemplate = (SQLTemplate) query;
                 if (fetchLimit != null) {
                     sqlTemplate.setFetchLimit(fetchLimit);
@@ -227,7 +227,7 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (statementFetchSize != null) {
                     sqlTemplate.setStatementFetchSize(statementFetchSize);
                 }
-                if(queryTimeout != null) {
+                if (queryTimeout != null) {
                     sqlTemplate.setQueryTimeout(queryTimeout);
                 }
                 if (pageSize != null) {
@@ -236,8 +236,8 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (cacheStrategyOverride != null) {
                     sqlTemplate.setCacheStrategy(cacheStrategyOverride);
                 }
-                break;
-            case QueryDescriptor.EJBQL_QUERY:
+            }
+            case QueryDescriptor.EJBQL_QUERY -> {
                 EJBQLQuery ejbqlQuery = (EJBQLQuery) query;
                 if (fetchLimit != null) {
                     ejbqlQuery.setFetchLimit(fetchLimit);
@@ -248,7 +248,7 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (statementFetchSize != null) {
                     ejbqlQuery.setStatementFetchSize(statementFetchSize);
                 }
-                if(queryTimeout != null) {
+                if (queryTimeout != null) {
                     ejbqlQuery.setQueryTimeout(queryTimeout);
                 }
                 if (pageSize != null) {
@@ -257,8 +257,8 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (cacheStrategyOverride != null) {
                     ejbqlQuery.setCacheStrategy(cacheStrategyOverride);
                 }
-                break;
-            case QueryDescriptor.PROCEDURE_QUERY:
+            }
+            case QueryDescriptor.PROCEDURE_QUERY -> {
                 ProcedureQuery procedureQuery = (ProcedureQuery) query;
                 if (fetchLimit != null) {
                     procedureQuery.setFetchLimit(fetchLimit);
@@ -269,7 +269,7 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (statementFetchSize != null) {
                     procedureQuery.setStatementFetchSize(statementFetchSize);
                 }
-                if(queryTimeout != null) {
+                if (queryTimeout != null) {
                     procedureQuery.setQueryTimeout(queryTimeout);
                 }
                 if (pageSize != null) {
@@ -278,9 +278,8 @@ public class MappedSelect<T> extends AbstractMappedQuery 
implements Select<T> {
                 if (cacheStrategyOverride != null) {
                     procedureQuery.setCacheStrategy(cacheStrategyOverride);
                 }
-                break;
-            default:
-                throw new CayenneRuntimeException("Unknown query type: %s", 
descriptor.getType());
+            }
+            default -> throw new CayenneRuntimeException("Unknown query type: 
%s", descriptor.getType());
         }
 
         return query;

Reply via email to