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 2025/09/04 01:53:48 UTC

(grails-core) 02/05: More fixes

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

borinquenkid pushed a commit to branch merge-hibernate6
in repository https://gitbox.apache.org/repos/asf/grails-core.git

commit 84159c5d1c44731507ca655433d4ce2a759b939f
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Tue Sep 2 18:04:14 2025 -0500

    More fixes
---
 .../orm/hibernate/HibernateGormStaticApi.groovy    | 90 +---------------------
 .../grails/orm/hibernate/query/HibernateQuery.java |  8 +-
 .../tck/tests/FirstAndLastMethodSpec.groovy        |  8 +-
 3 files changed, 13 insertions(+), 93 deletions(-)

diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
index 2aec8f67f4..213815f8d9 100644
--- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
+++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/HibernateGormStaticApi.groovy
@@ -526,20 +526,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
         return queryArgs
     }
 
-    protected String buildOrdinalParameterQueryFromGString(GString query, List params) {
-        StringBuilder sqlString = new StringBuilder()
-        int i = 0
-        Object[] values = query.values
-        def strings = query.getStrings()
-        for (str in strings) {
-            sqlString.append(str)
-            if (i < values.length) {
-                sqlString.append('?')
-                params.add(values[i++])
-            }
-        }
-        return sqlString.toString()
-    }
+
 
     protected String buildNamedParameterQueryFromGString(GString query, Map params) {
         StringBuilder sqlString = new StringBuilder()
@@ -598,78 +585,15 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
         return id
     }
 
-    protected void populateQueryWithNamedArguments(Query q, Map queryNamedArgs) {
-        if (queryNamedArgs) {
-            for (Map.Entry entry in queryNamedArgs.entrySet()) {
-                def key = entry.key
-                if (!(key instanceof CharSequence)) {
-                    throw new GrailsQueryException("Named parameter's name must be String: $queryNamedArgs")
-                }
-                String stringKey = key.toString()
-                def value = entry.value
-
-                if(value == null) {
-                    q.setParameter stringKey, null
-                } else if (value instanceof CharSequence) {
-                    q.setParameter stringKey, value.toString()
-                } else if (List.class.isAssignableFrom(value.getClass())) {
-                    q.setParameterList stringKey, (List) value
-                } else if (Set.class.isAssignableFrom(value.getClass())) {
-                    q.setParameterList stringKey, (Set) value
-                } else if (value.getClass().isArray()) {
-                    q.setParameterList stringKey, (Object[]) value
-                } else {
-                    q.setParameter stringKey, value
-                }
-            }
-        }
-    }
 
-    protected Integer intValue(Map args, String key) {
-        def value = args.get(key)
-        if(value) {
-            return conversionService.convert(value, Integer.class)
-        }
-        return null
-    }
 
-    protected void populateQueryArguments(Query q, Map args) {
-        Integer max = intValue(args, DynamicFinder.ARGUMENT_MAX)
-        args.remove(DynamicFinder.ARGUMENT_MAX)
-        Integer offset = intValue(args, DynamicFinder.ARGUMENT_OFFSET)
-        args.remove(DynamicFinder.ARGUMENT_OFFSET)
 
-        if (max != null) {
-            q.maxResults = max
-        }
-        if (offset != null) {
-            q.firstResult = offset
-        }
 
-        if (args.containsKey(DynamicFinder.ARGUMENT_CACHE)) {
-            q.cacheable = ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_CACHE, args)
-        }
-        if (args.containsKey(DynamicFinder.ARGUMENT_FETCH_SIZE)) {
-            Integer fetchSizeParam = conversionService.convert(args.remove(DynamicFinder.ARGUMENT_FETCH_SIZE), Integer.class);
-            q.setFetchSize(fetchSizeParam.intValue());
-        }
-        if (args.containsKey(DynamicFinder.ARGUMENT_TIMEOUT)) {
-            Integer timeoutParam = conversionService.convert(args.remove(DynamicFinder.ARGUMENT_TIMEOUT), Integer.class);
-            q.setTimeout(timeoutParam.intValue());
-        }
-        if (args.containsKey(DynamicFinder.ARGUMENT_READ_ONLY)) {
-            q.setReadOnly((Boolean)args.remove(DynamicFinder.ARGUMENT_READ_ONLY));
-        }
-        if (args.containsKey(DynamicFinder.ARGUMENT_FLUSH_MODE)) {
-            q.setHibernateFlushMode((FlushMode)args.remove(DynamicFinder.ARGUMENT_FLUSH_MODE));
-        }
 
-        args.remove(DynamicFinder.ARGUMENT_CACHE)
-    }
 
     private String normalizeMultiLineQueryString(String query) {
         if (query?.indexOf('\n') != -1)
-           return query.trim().replace('\n', ' ')
+           return query?.trim().replace('\n', ' ')
         return query
     }
 
@@ -751,15 +675,7 @@ class HibernateGormStaticApi<D> extends GormStaticApi<D> {
         doInternalExecuteUpdate(query,[:],indexedParams,args)
     }
 
-    protected <T> T withQueryEvents(Query query, Closure<T> callable) {
-        HibernateDatastore hibernateDatastore = (HibernateDatastore)datastore
-        def eventPublisher = hibernateDatastore.applicationEventPublisher
-        def hqlQuery = new HibernateHqlQuery(new HibernateSession(hibernateDatastore, sessionFactory), persistentEntity, query)
-        eventPublisher.publishEvent(new PreQueryEvent(hibernateDatastore, hqlQuery))
-        def result = callable.call()
-        eventPublisher.publishEvent(new PostQueryEvent(hibernateDatastore, hqlQuery, Collections.singletonList(result)))
-        return result
-    }
+
 
     protected void firePostQueryEvent(Object result) {
         def hibernateQuery = new HibernateQuery(new HibernateSession((HibernateDatastore) datastore, sessionFactory), persistentEntity)
diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java
index 875a5e09af..b0090b1bb9 100644
--- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java
+++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/query/HibernateQuery.java
@@ -646,8 +646,12 @@ public class HibernateQuery extends Query {
         final GrailsHibernateTemplate hibernateTemplate = (GrailsHibernateTemplate) hibernateSession.getNativeInterface();
         return hibernateTemplate.execute((GrailsHibernateTemplate.HibernateCallback<Object>) session -> {
             HibernateQuery hibernateQuery = new HibernateQuery(hibernateSession, entity);
-            hibernateQuery.max(this.max);
-            hibernateQuery.offset(this.offset);
+            if (this.max != null) {
+                hibernateQuery.max(this.max);
+            }
+            if (this.offset != null) {
+                hibernateQuery.offset(this.offset);
+            }
             hibernateQuery.setDetachedCriteria(this.detachedCriteria.clone());
             return hibernateQuery;
         });
diff --git a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/FirstAndLastMethodSpec.groovy b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/FirstAndLastMethodSpec.groovy
index b268a3e3e1..6711b05248 100644
--- a/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/FirstAndLastMethodSpec.groovy
+++ b/grails-datamapping-tck/src/main/groovy/org/apache/grails/data/testing/tck/tests/FirstAndLastMethodSpec.groovy
@@ -168,10 +168,10 @@ class FirstAndLastMethodSpec extends GrailsDataTckSpec {
     )
     void "Test first and last method with composite key"() {
         given:
-        assert new PersonWithCompositeKey(firstName: 'Steve', lastName: 'Harris', age: 56).save()
-        assert new PersonWithCompositeKey(firstName: 'Dave', lastName: 'Murray', age: 54).save()
-        assert new PersonWithCompositeKey(firstName: 'Adrian', lastName: 'Smith', age: 55).save()
-        assert new PersonWithCompositeKey(firstName: 'Bruce', lastName: 'Dickinson', age: 53).save()
+        assert new PersonWithCompositeKey(firstName: 'Steve', lastName: 'Harris', age: 56).save(failOnError: true)
+        assert new PersonWithCompositeKey(firstName: 'Dave', lastName: 'Murray', age: 54).save(failOnError: true)
+        assert new PersonWithCompositeKey(firstName: 'Adrian', lastName: 'Smith', age: 55).save(failOnError: true)
+        assert new PersonWithCompositeKey(firstName: 'Bruce', lastName: 'Dickinson', age: 53).save(failOnError: true, flush: true)
         assert PersonWithCompositeKey.count() == 4
 
         when: