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: