This is an automated email from the ASF dual-hosted git repository. borinquenkid pushed a commit to branch 8.0.x-hibernate7 in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit d80923d19cbb3ea357ea7bb0768a5869a8a1b247 Author: Walter Duque de Estrada <[email protected]> AuthorDate: Thu Feb 12 15:06:09 2026 -0600 1. Consolidated Utility Logic: BackTigsTrimmer (which had a typo and was redundant) has been completely replaced by BackticksRemover. 2. Centralized Constants: The BACKTICK constant was moved from GrailsDomainBinder to BackticksRemover. 3. Refactored `TableForManyCalculator`: Updated this class to use BackticksRemover instead of the now-deleted BackTigsTrimmer. 4. Cleaned Up Codebase: * Removed BackTigsTrimmer.java and its corresponding test BackTigsTrimmerSpec.groovy. * Updated unit tests (TableForManyCalculatorSpec.groovy) to use the consolidated logic. * Applied these changes to both grails-data-hibernate7 and grails-data-hibernate6 modules for consistency. 5. Updated Documentation: The HIBERNATE7-UPGRADE-PROGRESS.md file has been updated to reflect the removal of BackTigsTrimmer. --- .../orm/hibernate/cfg/GrailsDomainBinder.java | 1 - .../cfg/domainbinding/BackTigsTrimmer.java | 13 --------- .../cfg/domainbinding/BackticksRemover.java | 5 +++- .../cfg/domainbinding/TableForManyCalculator.java | 6 ---- .../cfg/domainbinding/BackTigsTrimmerSpec.groovy | 30 -------------------- .../TableForManyCalculatorSpec.groovy | 4 +-- .../core/HIBERNATE7-UPGRADE-PROGRESS.md | 3 +- .../orm/hibernate/cfg/GrailsDomainBinder.java | 1 - .../cfg/domainbinding/util/BackTigsTrimmer.java | 13 --------- .../cfg/domainbinding/util/BackticksRemover.java | 5 +++- .../domainbinding/util/TableForManyCalculator.java | 8 +----- .../cfg/domainbinding/BackTigsTrimmerSpec.groovy | 32 ---------------------- .../TableForManyCalculatorSpec.groovy | 4 +-- 13 files changed, 12 insertions(+), 113 deletions(-) diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java index 2bb11e0d6f..61e46bd0ba 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -124,7 +124,6 @@ public class GrailsDomainBinder implements MetadataContributor { public static final String CASCADE_ALL = "all"; public static final String CASCADE_SAVE_UPDATE = "save-update"; public static final String CASCADE_NONE = "none"; - public static final String BACKTICK = "`"; public static final String ENUM_TYPE_CLASS = org.grails.orm.hibernate.HibernateLegacyEnumType.class.getName(); public static final String ENUM_CLASS_PROP = "enumClass"; diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmer.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmer.java deleted file mode 100644 index 929a65af5b..0000000000 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmer.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding; - -import static org.grails.orm.hibernate.cfg.GrailsDomainBinder.BACKTICK; - -public class BackTigsTrimmer { - - public String trimBackTigs(String tableName) { - if (tableName != null && tableName.length() >= 2 && tableName.startsWith(BACKTICK) && tableName.endsWith(BACKTICK)) { - return tableName.substring(1, tableName.length() - 1); - } - return tableName; - } -} diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackticksRemover.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackticksRemover.java index 9ad7e4c405..6575990ac8 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackticksRemover.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackticksRemover.java @@ -4,11 +4,14 @@ import java.util.Optional; import java.util.function.Function; public class BackticksRemover implements Function<String, String> { + + public static final String BACKTICK = "`"; + @Override public String apply(String string) { return Optional.ofNullable(string) .map(String::trim) - .filter(s ->s.length()>=2 && s.startsWith("`") && s.endsWith("`")) + .filter(s ->s.length()>=2 && s.startsWith(BACKTICK) && s.endsWith(BACKTICK)) .map(s -> s.substring(1, s.length() - 1)) .orElse(string); } diff --git a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java index 71d5e453c0..c0cfc3f01b 100644 --- a/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java +++ b/grails-data-hibernate6/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculator.java @@ -20,7 +20,6 @@ public class TableForManyCalculator { private final TableNameFetcher tableNameFetcher; private final BackticksRemover backticksRemover; private final ShouldCollectionBindWithJoinColumn shouldCollectionBindWithJoinColumn; - private final BackTigsTrimmer backTigsTrimmer; private final PersistentPropertyToPropertyConfig persistentPropertyToPropertyConfig; public TableForManyCalculator(PersistentEntityNamingStrategy namingStrategy) { @@ -28,7 +27,6 @@ public class TableForManyCalculator { tableNameFetcher = new TableNameFetcher(namingStrategy); backticksRemover = new BackticksRemover(); shouldCollectionBindWithJoinColumn = new ShouldCollectionBindWithJoinColumn(); - backTigsTrimmer = new BackTigsTrimmer(); persistentPropertyToPropertyConfig = new PersistentPropertyToPropertyConfig(); } @@ -36,13 +34,11 @@ public class TableForManyCalculator { , TableNameFetcher tableNameFetcher , BackticksRemover backticksRemover , ShouldCollectionBindWithJoinColumn shouldCollectionBindWithJoinColumn - , BackTigsTrimmer backTigsTrimmer , PersistentPropertyToPropertyConfig persistentPropertyToPropertyConfig) { this.namingStrategy = namingStrategy; this.tableNameFetcher = tableNameFetcher; this.backticksRemover = backticksRemover; this.shouldCollectionBindWithJoinColumn = shouldCollectionBindWithJoinColumn; - this.backTigsTrimmer = backTigsTrimmer; this.persistentPropertyToPropertyConfig = persistentPropertyToPropertyConfig; } @@ -98,8 +94,6 @@ public class TableForManyCalculator { if (hasJoinTableMapping) { return jt.getName(); } - left = backTigsTrimmer.trimBackTigs(left); - right = backTigsTrimmer.trimBackTigs(right); return backticksRemover.apply(left) + UNDERSCORE + backticksRemover.apply(right); } diff --git a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy deleted file mode 100644 index 5d5101510a..0000000000 --- a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy +++ /dev/null @@ -1,30 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding - -import spock.lang.Specification -import spock.lang.Unroll - -class BackTigsTrimmerSpec extends Specification { - - @Unroll - def "Test that trimBackTigs correctly trims '#input' to '#expected'"() { - given: - def trimmer = new BackTigsTrimmer() - - when: - def result = trimmer.trimBackTigs(input) - - then: - result == expected - - where: - input | expected - '`table`' | 'table' - 'table' | 'table' - '`table' | '`table' - 'table`' | 'table`' - '``' | '' - '`' | '`' - '' | '' - null | null - } -} diff --git a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy index 68f988594f..991bc95b47 100644 --- a/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy +++ b/grails-data-hibernate6/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy @@ -20,11 +20,10 @@ class TableForManyCalculatorSpec extends Specification { def tableNameFetcher = Stub(TableNameFetcher) def backticksRemover = Stub(BackticksRemover) def shouldBind = Stub(ShouldCollectionBindWithJoinColumn) - def trimmer = Stub(BackTigsTrimmer) def configConverter = Stub(PersistentPropertyToPropertyConfig) // 2. Instantiate the calculator with mocks - def calculator = new TableForManyCalculator(namingStrategy, tableNameFetcher, backticksRemover, shouldBind, trimmer, configConverter) + def calculator = new TableForManyCalculator(namingStrategy, tableNameFetcher, backticksRemover, shouldBind, configConverter) // 3. Set up stubs for the property and entities def property = Stub(mockClass) @@ -55,7 +54,6 @@ class TableForManyCalculatorSpec extends Specification { // Make removers and trimmers pass through values for simplicity backticksRemover.apply(_) >> { String s -> s } - trimmer.trimBackTigs(_) >> { String s -> s } when: def result = calculator.calculateTableForMany(property, "default") diff --git a/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md b/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md index 43d727dd2f..7a41a13f0e 100644 --- a/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md +++ b/grails-data-hibernate7/core/HIBERNATE7-UPGRADE-PROGRESS.md @@ -81,7 +81,7 @@ The core idea is to reorganize the binder application logic into a single primar * **TableNameFetcher**: Resolves the table name for a given entity using the naming strategy. * **DefaultColumnNameFetcher**: Resolves default column names for properties. * **ColumnNameForPropertyAndPathFetcher**: Resolves column names considering embedded paths. -* **BackticksRemover / BackTigsTrimmer**: Utilities for handling database identifiers with quotes. +* **BackticksRemover**: Utility for handling database identifiers with quotes. Replaced redundant `BackTigsTrimmer`. * **ConfigureDerivedPropertiesConsumer**: Applies `derived` flag to properties based on mapping. * **GrailsHibernateUtil**: General utility methods for Hibernate integration. @@ -174,7 +174,6 @@ The core idea is to reorganize the binder application logic into a single primar | `TableForManyCalculator` | Migrated | | | `UniqueNameGenerator` | Migrated | | | `BackticksRemover` | Migrated | | -| `BackTigsTrimmer` | Migrated | | | `BasicValueIdCreator` | Migrated | | ## Known Issues / TODOs diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java index f3f8318102..cb85986557 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -93,7 +93,6 @@ public class GrailsDomainBinder private static final String STRING_TYPE = "string"; public static final String EMPTY_PATH = ""; public static final char UNDERSCORE = '_'; - public static final String BACKTICK = "`"; public static final String ENUM_TYPE_CLASS = org.grails.orm.hibernate.HibernateLegacyEnumType.class.getName(); public static final String ENUM_CLASS_PROP = "enumClass"; diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackTigsTrimmer.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackTigsTrimmer.java deleted file mode 100644 index 43ef407278..0000000000 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackTigsTrimmer.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding.util; - -import static org.grails.orm.hibernate.cfg.GrailsDomainBinder.BACKTICK; - -public class BackTigsTrimmer { - - public String trimBackTigs(String tableName) { - if (tableName != null && tableName.length() >= 2 && tableName.startsWith(BACKTICK) && tableName.endsWith(BACKTICK)) { - return tableName.substring(1, tableName.length() - 1); - } - return tableName; - } -} diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackticksRemover.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackticksRemover.java index c3da3bae8b..c3b73c7f49 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackticksRemover.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/BackticksRemover.java @@ -4,11 +4,14 @@ import java.util.Optional; import java.util.function.Function; public class BackticksRemover implements Function<String, String> { + + public static final String BACKTICK = "`"; + @Override public String apply(String string) { return Optional.ofNullable(string) .map(String::trim) - .filter(s ->s.length()>=2 && s.startsWith("`") && s.endsWith("`")) + .filter(s ->s.length()>=2 && s.startsWith(BACKTICK) && s.endsWith(BACKTICK)) .map(s -> s.substring(1, s.length() - 1)) .orElse(string); } diff --git a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/TableForManyCalculator.java b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/TableForManyCalculator.java index 9c783cb997..c1615e82f5 100644 --- a/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/TableForManyCalculator.java +++ b/grails-data-hibernate7/core/src/main/groovy/org/grails/orm/hibernate/cfg/domainbinding/util/TableForManyCalculator.java @@ -21,23 +21,19 @@ public class TableForManyCalculator { private final PersistentEntityNamingStrategy namingStrategy; private final TableNameFetcher tableNameFetcher; private final BackticksRemover backticksRemover; - private final BackTigsTrimmer backTigsTrimmer; public TableForManyCalculator(PersistentEntityNamingStrategy namingStrategy) { this.namingStrategy = namingStrategy; tableNameFetcher = new TableNameFetcher(namingStrategy); backticksRemover = new BackticksRemover(); - backTigsTrimmer = new BackTigsTrimmer(); } protected TableForManyCalculator(PersistentEntityNamingStrategy namingStrategy , TableNameFetcher tableNameFetcher - , BackticksRemover backticksRemover - , BackTigsTrimmer backTigsTrimmer) { + , BackticksRemover backticksRemover) { this.namingStrategy = namingStrategy; this.tableNameFetcher = tableNameFetcher; this.backticksRemover = backticksRemover; - this.backTigsTrimmer = backTigsTrimmer; } @@ -93,8 +89,6 @@ public class TableForManyCalculator { if (hasJoinTableMapping) { return jt.getName(); } - left = backTigsTrimmer.trimBackTigs(left); - right = backTigsTrimmer.trimBackTigs(right); return backticksRemover.apply(left) + UNDERSCORE + backticksRemover.apply(right); } diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy deleted file mode 100644 index f008084549..0000000000 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/BackTigsTrimmerSpec.groovy +++ /dev/null @@ -1,32 +0,0 @@ -package org.grails.orm.hibernate.cfg.domainbinding - -import spock.lang.Specification -import spock.lang.Unroll - -import org.grails.orm.hibernate.cfg.domainbinding.util.BackTigsTrimmer - -class BackTigsTrimmerSpec extends Specification { - - @Unroll - def "Test that trimBackTigs correctly trims '#input' to '#expected'"() { - given: - def trimmer = new BackTigsTrimmer() - - when: - def result = trimmer.trimBackTigs(input) - - then: - result == expected - - where: - input | expected - '`table`' | 'table' - 'table' | 'table' - '`table' | '`table' - 'table`' | 'table`' - '``' | '' - '`' | '`' - '' | '' - null | null - } -} diff --git a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy index c1be27e373..c4b1f95d7f 100644 --- a/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy +++ b/grails-data-hibernate7/core/src/test/groovy/org/grails/orm/hibernate/cfg/domainbinding/TableForManyCalculatorSpec.groovy @@ -8,7 +8,6 @@ import org.grails.orm.hibernate.cfg.JoinTable import spock.lang.Unroll -import org.grails.orm.hibernate.cfg.domainbinding.util.BackTigsTrimmer import org.grails.orm.hibernate.cfg.domainbinding.util.BackticksRemover import org.grails.orm.hibernate.cfg.domainbinding.util.TableForManyCalculator import org.grails.orm.hibernate.cfg.domainbinding.util.TableNameFetcher @@ -21,9 +20,8 @@ class TableForManyCalculatorSpec extends HibernateGormDatastoreSpec { def namingStrategy = getGrailsDomainBinder().getNamingStrategy() def tableNameFetcher = new TableNameFetcher(namingStrategy) def backticksRemover = new BackticksRemover() - def trimmer = new BackTigsTrimmer() - def calculator = new TableForManyCalculator(namingStrategy, tableNameFetcher, backticksRemover, trimmer) + def calculator = new TableForManyCalculator(namingStrategy, tableNameFetcher, backticksRemover) GrailsHibernatePersistentEntity ownerEntityInstance GrailsHibernatePersistentEntity associatedEntityInstance
