You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by bo...@apache.org on 2026/04/16 02:23:46 UTC
(grails-core) 02/02: CodeStyke and CodeNarc
This is an automated email from the ASF dual-hosted git repository.
borinquenkid pushed a commit to branch 8.0.x-hibernate7-dev
in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit 4807c1c76e2a06e29f7037d76955817719fa10ea
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Wed Apr 15 21:23:38 2026 -0500
CodeStyke and CodeNarc
---
.../grails/buildsrc/GrailsCodeStylePlugin.groovy | 2 +-
.../buildsrc/GrailsCodeStylePluginSpec.groovy | 50 ++++++++++++++++++++++
.../grails/orm/HibernateCriteriaBuilder.java | 4 +-
.../orm/hibernate/ChildHibernateDatastore.java | 5 ++-
.../grails/orm/hibernate/HibernateDatastore.java | 1 -
.../org/grails/orm/hibernate/HibernateSession.java | 7 +--
.../orm/hibernate/SchemaTenantGormEnhancer.java | 18 ++++----
.../grails/orm/hibernate/cfg/IdentityEnumType.java | 2 +-
.../grails/orm/hibernate/query/AliasRegistry.java | 3 +-
.../orm/hibernate/query/HqlQueryContext.java | 2 +-
.../orm/hibernate/query/HqlQueryDelegate.java | 1 -
.../grails/orm/hibernate/query/JoinTracker.java | 3 +-
.../hibernate/query/JpaCriteriaQueryCreator.java | 24 +++++------
.../orm/hibernate/query/JpaProjectionAdapter.java | 10 ++---
.../hibernate/query/JpaProjectionTranslator.java | 4 +-
.../orm/hibernate/query/JpaQueryContext.java | 3 +-
.../orm/hibernate/query/PredicateGenerator.java | 48 ++++++++++++---------
.../grails/orm/hibernate/query/SelectHqlQuery.java | 28 ++++++------
.../gorm/finders/FindOrCreateByFinder.java | 8 ++--
19 files changed, 144 insertions(+), 79 deletions(-)
diff --git a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
index a1612aabb5..326ec56747 100644
--- a/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
+++ b/build-logic/plugins/src/main/groovy/org/apache/grails/buildsrc/GrailsCodeStylePlugin.groovy
@@ -838,7 +838,7 @@ class GrailsCodeStylePlugin implements Plugin<Project> {
content = content.replaceAll(/(\(\s*(?:[\w\-.]+|'[^']+'|"[^"]+")):([^\s\/])/, '$1: $2')
// 3. UnnecessaryGString
- content = content.replaceAll(/(?<!")"([^"$\n\\]*)"(?!")/) { all, inner ->
+ content = content.replaceAll(/(?<!\\)(?<!")"([^"$\n\\]*)"(?!")/) { all, inner ->
if (!inner.contains("'")) {
return "'$inner'"
}
diff --git a/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy b/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
index 49d416ffbd..4dff85a593 100644
--- a/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
+++ b/build-logic/plugins/src/test/groovy/org/apache/grails/buildsrc/GrailsCodeStylePluginSpec.groovy
@@ -166,4 +166,54 @@ class Test{
!fixedContent.contains(";")
fixedContent.count('\n\n') == 3 // ConsecutiveBlankLines
}
+
+ def "test codenarcFix task does not break strings with single quotes"() {
+ given: "a file with double quoted strings containing single quotes"
+ groovyFile.text = """package org.test
+
+class Test {
+ def s1 = "it's a test"
+ def s2 = "format 'yyyy-MM-dd'"
+ def s3 = "contains \\"double\\" and 'single' quotes"
+}
+"""
+ when: "running codenarcFix"
+ def result = GradleRunner.create()
+ .withProjectDir(testProjectDir.toFile())
+ .withArguments('codenarcFix', '--stacktrace')
+ .withPluginClasspath()
+ .build()
+
+ then: "task finished successfully"
+ result.task(':codenarcFix').outcome == org.gradle.testkit.runner.TaskOutcome.SUCCESS
+
+ and: "strings with single quotes are NOT changed to single quotes (which would break them)"
+ def content = groovyFile.text
+ content.contains('def s1 = "it\'s a test"')
+ content.contains('def s2 = "format \'yyyy-MM-dd\'"')
+ // s3 has escaped double quotes, so it should also remain double quoted
+ content.contains('def s3 = "contains \\"double\\" and \'single\' quotes"')
+ }
+
+ def "test codenarcFix task does not break escaped double quotes in double quotes"() {
+ given: "a file with escaped double quotes"
+ groovyFile.text = """package org.test
+
+class Test {
+ def s = "\\"\\\$it\\""
+}
+"""
+ when: "running codenarcFix"
+ def result = GradleRunner.create()
+ .withProjectDir(testProjectDir.toFile())
+ .withArguments('codenarcFix', '--stacktrace')
+ .withPluginClasspath()
+ .build()
+
+ then: "task finished successfully"
+ result.task(':codenarcFix').outcome == org.gradle.testkit.runner.TaskOutcome.SUCCESS
+
+ and: "escaped quotes are NOT broken"
+ groovyFile.text.contains('"\\"\\$it\\""')
+ }
}
diff --git a/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java b/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
index e9306bbfb5..2103d08e23 100644
--- a/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
+++ b/grails-data-hibernate7/core/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java
@@ -169,11 +169,11 @@ public class HibernateCriteriaBuilder extends GroovyObjectSupport implements Bui
return (Objects.nonNull(alias) ? alias + ALIAS_SEPARATOR : "") + propertyName;
}
- public org.grails.datastore.mapping.query.api.Criteria exists(Closure subquery) {
+ public org.grails.datastore.mapping.query.api.Criteria exists(Closure subquery) {
return exists(new grails.gorm.DetachedCriteria(targetClass).build(subquery));
}
- public org.grails.datastore.mapping.query.api.Criteria notExists(Closure subquery) {
+ public org.grails.datastore.mapping.query.api.Criteria notExists(Closure subquery) {
return notExists(new grails.gorm.DetachedCriteria(targetClass).build(subquery));
}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
index f526518320..c3be048d73 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/ChildHibernateDatastore.java
@@ -18,12 +18,13 @@
*/
package org.grails.orm.hibernate;
+import org.hibernate.SessionFactory;
+
+import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher;
import org.grails.datastore.mapping.core.connections.ConnectionSource;
import org.grails.datastore.mapping.core.connections.ConnectionSources;
import org.grails.orm.hibernate.cfg.HibernateMappingContext;
import org.grails.orm.hibernate.cfg.Settings;
-import org.hibernate.SessionFactory;
-import org.grails.datastore.gorm.events.ConfigurableApplicationEventPublisher;
import org.grails.orm.hibernate.connections.HibernateConnectionSourceSettings;
/**
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
index 8b4d97be1b..07465a8a5b 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateDatastore.java
@@ -69,7 +69,6 @@ import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionSynchronizationManager;
-import grails.gorm.MultiTenant;
import grails.gorm.multitenancy.Tenants;
import org.grails.datastore.gorm.events.AutoTimestampEventListener;
import org.grails.datastore.gorm.events.ConfigurableApplicationContextEventPublisher;
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
index 9f0b9f155e..7ff7be93f6 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/HibernateSession.java
@@ -29,10 +29,8 @@ import java.util.Map;
import jakarta.persistence.FlushModeType;
import jakarta.persistence.LockModeType;
+
import org.hibernate.LockMode;
-import org.grails.orm.hibernate.query.HibernateHqlQueryCreator;
-import org.grails.orm.hibernate.query.HqlQueryContext;
-import org.grails.orm.hibernate.query.MutationHqlQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.proxy.HibernateProxy;
@@ -62,7 +60,10 @@ import org.grails.datastore.mapping.transactions.Transaction;
import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentEntity;
import org.grails.orm.hibernate.proxy.HibernateProxyHandler;
+import org.grails.orm.hibernate.query.HibernateHqlQueryCreator;
import org.grails.orm.hibernate.query.HibernateQuery;
+import org.grails.orm.hibernate.query.HqlQueryContext;
+import org.grails.orm.hibernate.query.MutationHqlQuery;
/**
* Session implementation that wraps a Hibernate {@link org.hibernate.Session}.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
index be412f3c99..c5e11ba047 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/SchemaTenantGormEnhancer.java
@@ -18,20 +18,20 @@
*/
package org.grails.orm.hibernate;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.transaction.PlatformTransactionManager;
+
import grails.gorm.MultiTenant;
+import org.grails.datastore.gorm.jdbc.schema.SchemaHandler;
import org.grails.datastore.mapping.core.Datastore;
+import org.grails.datastore.mapping.model.PersistentEntity;
import org.grails.datastore.mapping.multitenancy.AllTenantsResolver;
import org.grails.datastore.mapping.multitenancy.TenantResolver;
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.gorm.jdbc.schema.SchemaHandler;
import org.grails.orm.hibernate.connections.HibernateConnectionSource;
-import org.springframework.transaction.PlatformTransactionManager;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
/**
* A {@link HibernateGormEnhancer} for SCHEMA multi-tenancy mode that resolves all tenant qualifiers
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
index 58e3ff693a..a465c7e5fd 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/IdentityEnumType.java
@@ -18,8 +18,8 @@ import org.hibernate.MappingException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.JavaType;
-import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.IntegerJdbcType;
+import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.VarcharJdbcType;
import org.hibernate.type.spi.TypeConfiguration;
import org.hibernate.usertype.ParameterizedType;
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
index 4c834fc43c..66f28ad066 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/AliasRegistry.java
@@ -15,10 +15,11 @@
*/
package org.grails.orm.hibernate.query;
-import jakarta.persistence.criteria.Expression;
import java.util.HashMap;
import java.util.Map;
+import jakarta.persistence.criteria.Expression;
+
/**
* Registry for user-defined and auto-generated aliases in a JPA query.
*
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
index fbf0638011..bf38f30742 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryContext.java
@@ -35,8 +35,8 @@ import jakarta.annotation.Nonnull;
import jakarta.annotation.Nullable;
import org.hibernate.jpa.AvailableHints;
-import org.grails.datastore.mapping.model.PersistentEntity;
+import org.grails.datastore.mapping.model.PersistentEntity;
import static org.grails.orm.hibernate.query.HqlQueryMethods.convertValue;
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
index 13eb06fb90..567dc55db9 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/HqlQueryDelegate.java
@@ -57,7 +57,6 @@ public interface HqlQueryDelegate extends Serializable {
// ── select-only (no-ops for mutation queries) ─────────────────────────────
-
default void setMaxResults(int n) {}
default void setFirstResult(int n) {}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
index 8539111d23..1a1f20096d 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JoinTracker.java
@@ -15,10 +15,11 @@
*/
package org.grails.orm.hibernate.query;
-import jakarta.persistence.criteria.From;
import java.util.HashMap;
import java.util.Map;
+import jakarta.persistence.criteria.From;
+
/**
* Tracks physical JPA Joins and Roots to ensure consistency and avoid duplicate joins.
*
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
index 545c18c160..0846e1b316 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaCriteriaQueryCreator.java
@@ -15,29 +15,27 @@
*/
package org.grails.orm.hibernate.query;
-import grails.gorm.DetachedCriteria;
-import jakarta.persistence.Tuple;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
import jakarta.persistence.criteria.AbstractQuery;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Expression;
-import jakarta.persistence.criteria.From;
-import jakarta.persistence.criteria.Order;
import jakarta.persistence.criteria.Root;
-import jakarta.persistence.criteria.Selection;
-import jakarta.persistence.criteria.Subquery;
-import org.grails.datastore.mapping.model.PersistentEntity;
-import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
-import org.grails.datastore.mapping.query.Query;
-import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
+
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
import org.hibernate.query.criteria.JpaCriteriaQuery;
import org.hibernate.query.criteria.JpaSubQuery;
+
import org.springframework.core.convert.ConversionService;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import grails.gorm.DetachedCriteria;
+import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
+import org.grails.datastore.mapping.model.PersistentEntity;
+import org.grails.datastore.mapping.query.Query;
+import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
/**
* A class that creates a JPA {@link CriteriaQuery} from a GORM {@link Query} and {@link DetachedCriteria}.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
index 351dce98c3..5f1f7c9ff7 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionAdapter.java
@@ -15,17 +15,17 @@
*/
package org.grails.orm.hibernate.query;
+import java.util.ArrayList;
+import java.util.List;
+
import jakarta.persistence.Tuple;
-import jakarta.persistence.criteria.AbstractQuery;
-import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Selection;
import jakarta.persistence.criteria.Subquery;
-import org.grails.datastore.mapping.query.Query;
+
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
-import java.util.ArrayList;
-import java.util.List;
+import org.grails.datastore.mapping.query.Query;
/**
* Adapts Grails datastore projections to JPA Selections.
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
index 2950497c56..d6858d8130 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaProjectionTranslator.java
@@ -17,9 +17,11 @@ package org.grails.orm.hibernate.query;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Expression;
-import org.grails.datastore.mapping.query.Query;
+
import org.hibernate.query.criteria.JpaExpression;
+import org.grails.datastore.mapping.query.Query;
+
/**
* A class that translates GORM projections to JPA expressions.
*
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
index 423f840c0f..c12153df2b 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/JpaQueryContext.java
@@ -15,10 +15,11 @@
*/
package org.grails.orm.hibernate.query;
+import java.util.List;
+
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.From;
import jakarta.persistence.criteria.Path;
-import java.util.List;
/**
* Orchestrator for JPA query translation state (Aliases, Joins, Expressions).
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
index 2e4c1eb72e..4ce1aa0cbe 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/PredicateGenerator.java
@@ -18,26 +18,34 @@
*/
package org.grails.orm.hibernate.query;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import jakarta.persistence.criteria.AbstractQuery;
+import jakarta.persistence.criteria.Expression;
+import jakarta.persistence.criteria.From;
+import jakarta.persistence.criteria.JoinType;
+import jakarta.persistence.criteria.Predicate;
+import jakarta.persistence.criteria.Subquery;
+
+import org.hibernate.query.criteria.HibernateCriteriaBuilder;
+import org.hibernate.query.criteria.JpaSubQuery;
+
+import org.springframework.core.convert.ConversionService;
+
import grails.gorm.DetachedCriteria;
-import jakarta.persistence.criteria.*;
import org.grails.datastore.gorm.query.criteria.DetachedAssociationCriteria;
+import org.grails.datastore.mapping.core.exceptions.ConfigurationException;
import org.grails.datastore.mapping.model.PersistentProperty;
-import org.grails.datastore.mapping.query.Query;
import org.grails.datastore.mapping.query.Projections;
+import org.grails.datastore.mapping.query.Query;
import org.grails.datastore.mapping.query.api.QueryableCriteria;
-import org.grails.datastore.mapping.core.exceptions.ConfigurationException;
import org.grails.orm.hibernate.cfg.domainbinding.hibernate.GrailsHibernatePersistentEntity;
import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernatePersistentProperty;
import org.grails.orm.hibernate.cfg.domainbinding.hibernate.HibernateToManyProperty;
-import org.hibernate.query.criteria.HibernateCriteriaBuilder;
-import org.hibernate.query.criteria.JpaSubQuery;
-import org.springframework.core.convert.ConversionService;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
/**
* A class that generates predicates for a given list of criteria.
@@ -199,7 +207,7 @@ public class PredicateGenerator {
if (associationRoot == null) {
// Check if we already have it in our parent or alias map
Expression<?> expr = fromsByProvider.getFullyQualifiedExpression(associationName);
- if (expr instanceof From<?,?> from) {
+ if (expr instanceof From<?, ?> from) {
associationRoot = from;
} else {
associationRoot = fromsByProvider.getRoot().join(associationName);
@@ -223,7 +231,7 @@ public class PredicateGenerator {
From<?, ?> associationRoot = fromsByProvider.getFrom(associationName);
if (associationRoot == null) {
Expression<?> expr = fromsByProvider.getFullyQualifiedExpression(associationName);
- if (expr instanceof From<?,?> from) {
+ if (expr instanceof From<?, ?> from) {
associationRoot = from;
} else {
associationRoot = fromsByProvider.getRoot().join(associationName, JoinType.INNER);
@@ -371,13 +379,13 @@ public class PredicateGenerator {
private Predicate handlePropertyNameCriterion(JpaQueryContext fromsByProvider, Query.PropertyNameCriterion c) {
Expression<?> propertyPath = fromsByProvider.getFullyQualifiedExpression(c.getProperty());
- if (((Object)c) instanceof Query.IsNull) {
+ if (((Object) c) instanceof Query.IsNull) {
return criteriaBuilder.isNull(propertyPath);
- } else if (((Object)c) instanceof Query.IsNotNull) {
+ } else if (((Object) c) instanceof Query.IsNotNull) {
return criteriaBuilder.isNotNull(propertyPath);
- } else if (((Object)c) instanceof Query.IsEmpty) {
+ } else if (((Object) c) instanceof Query.IsEmpty) {
return criteriaBuilder.isEmpty((Expression<java.util.Collection<?>>) propertyPath);
- } else if (((Object)c) instanceof Query.IsNotEmpty) {
+ } else if (((Object) c) instanceof Query.IsNotEmpty) {
return criteriaBuilder.isNotEmpty((Expression<java.util.Collection<?>>) propertyPath);
}
throw new UnsupportedOperationException("Unsupported property name criterion: " + c.getClass().getName());
@@ -402,7 +410,7 @@ public class PredicateGenerator {
}
}
- creator.populateSubquery((JpaSubQuery)subquery);
+ creator.populateSubquery((JpaSubQuery) subquery);
return criteriaBuilder.equal(propertyPath, subquery);
} else {
return criteriaBuilder.equal(propertyPath, convertComparisonValue(entity, pc.getProperty(), pc.getValue(), fromsByProvider, propertyPath));
@@ -455,7 +463,7 @@ public class PredicateGenerator {
Subquery<?> subquery = criteriaQuery.subquery(subqueryEntity.getJavaClass());
var creator = new JpaCriteriaQueryCreator(new Query.ProjectionList(), criteriaBuilder, subqueryEntity, (DetachedCriteria) subqueryCriteria, conversionService);
creator.setParentContext(fromsByProvider);
- creator.populateSubquery((JpaSubQuery)subquery);
+ creator.populateSubquery((JpaSubQuery) subquery);
return criteriaBuilder.exists(subquery);
}
diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
index b619fa8e03..a487f3ddf7 100644
--- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
+++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/query/SelectHqlQuery.java
@@ -72,17 +72,21 @@ public class SelectHqlQuery extends Query implements HqlQueryMethods, Serializab
return delegate.selectQuery();
}
-@Override
-public Integer getMax() {
- if (max != null && max > -1) return max;
- Object m = queryContext.querySettings().get(HibernateQueryArgument.MAX.value());
- return m instanceof Number n ? n.intValue() : -1;
-}
+ @Override
+ public Integer getMax() {
+ if (max != null && max > -1) {
+ return max;
+ }
+ Object m = queryContext.querySettings().get(HibernateQueryArgument.MAX.value());
+ return m instanceof Number n ? n.intValue() : -1;
+ }
-@Override
-public Integer getOffset() {
- if (offset != null && offset > -1) return offset;
- Object o = queryContext.querySettings().get(HibernateQueryArgument.OFFSET.value());
- return o instanceof Number n ? n.intValue() : 0;
-}
+ @Override
+ public Integer getOffset() {
+ if (offset != null && offset > -1) {
+ return offset;
+ }
+ Object o = queryContext.querySettings().get(HibernateQueryArgument.OFFSET.value());
+ return o instanceof Number n ? n.intValue() : 0;
+ }
}
diff --git a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
index 93d073de3b..8205dec00b 100644
--- a/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
+++ b/grails-datamapping-core/src/main/groovy/org/grails/datastore/gorm/finders/FindOrCreateByFinder.java
@@ -93,10 +93,10 @@ public class FindOrCreateByFinder extends AbstractFindByFinder {
protected void validateInvocation(DynamicFinderInvocation invocation) {
for (MethodExpression methodExpression : invocation.getExpressions()) {
- if (methodExpression instanceof MethodExpression.GreaterThan
- || methodExpression instanceof MethodExpression.LessThan
- || methodExpression instanceof MethodExpression.GreaterThanEquals
- || methodExpression instanceof MethodExpression.LessThanEquals) {
+ if (methodExpression instanceof MethodExpression.GreaterThan ||
+ methodExpression instanceof MethodExpression.LessThan ||
+ methodExpression instanceof MethodExpression.GreaterThanEquals ||
+ methodExpression instanceof MethodExpression.LessThanEquals) {
throw new ConfigurationException("Only equality-based expressions are supported for " + invocation.getMethodName());
}
}