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/03/10 23:07:31 UTC
(grails-core) 09/09: hibernate 7: added GormDatabaseSpec
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 7756c3b0f3e4a779b071fd74952a23d6c1af6a4f
Author: Walter Duque de Estrada <wb...@mac.com>
AuthorDate: Tue Mar 10 18:02:47 2026 -0500
hibernate 7: added GormDatabaseSpec
---
.../liquibase/GormDatabase.groovy | 36 ++++-----
.../liquibase/GormDatabaseSpec.groovy | 89 ++++++++++++++++++++++
2 files changed, 108 insertions(+), 17 deletions(-)
diff --git a/grails-data-hibernate7/dbmigration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabase.groovy b/grails-data-hibernate7/dbmigration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabase.groovy
index a378c38f25..a25ae7ebc8 100644
--- a/grails-data-hibernate7/dbmigration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabase.groovy
+++ b/grails-data-hibernate7/dbmigration/src/main/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabase.groovy
@@ -19,21 +19,22 @@
package org.grails.plugins.databasemigration.liquibase
import groovy.transform.CompileStatic
-
import liquibase.database.DatabaseConnection
-import liquibase.database.OfflineConnection
import liquibase.exception.DatabaseException
import liquibase.ext.hibernate.database.HibernateDatabase
-import liquibase.snapshot.DatabaseSnapshot
-import liquibase.snapshot.JdbcDatabaseSnapshot
-import liquibase.snapshot.SnapshotControl
-import liquibase.structure.DatabaseObject
+import liquibase.database.jvm.JdbcConnection
+import liquibase.ext.hibernate.database.connection.HibernateConnection
+import org.grails.orm.hibernate.HibernateDatastore
import org.hibernate.boot.Metadata
import org.hibernate.boot.MetadataSources
import org.hibernate.dialect.Dialect
-import org.grails.orm.hibernate.HibernateDatastore
-
+/**
+ * A Liquibase database implementation that uses GORM's metadata.
+ *
+ * @author Graeme Rocher
+ * @since 2.0
+ */
@CompileStatic
class GormDatabase extends HibernateDatabase {
@@ -46,25 +47,26 @@ class GormDatabase extends HibernateDatabase {
super()
this.dialect = dialect
this.gormDatastore = hibernateDatastore
- SnapshotControl snapshotControl = new SnapshotControl(this, null, null)
- GormDatabase database = this
- OfflineConnection connection = new OfflineConnection('offline:gorm', null) {
- DatabaseSnapshot getSnapshot(DatabaseObject[] examples) {
- new JdbcDatabaseSnapshot(examples, database, snapshotControl)
- }
- }
- setConnection(connection)
+ setConnection(new JdbcConnection(new HibernateConnection('hibernate:gorm', null)))
+ }
+
+ @Override
+ protected String findDialectName() {
+ dialect?.getClass()?.getName()
}
/**
* Return the hibernate {@link Metadata} used by this database.
*/
-
@Override
Metadata getMetadata() {
gormDatastore.getMetadata()
}
+ DatabaseConnection getDatabaseConnection() {
+ return super.getConnection()
+ }
+
HibernateDatastore getGormDatastore() {
gormDatastore
}
diff --git a/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabaseSpec.groovy b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabaseSpec.groovy
new file mode 100644
index 0000000000..7a5b153708
--- /dev/null
+++ b/grails-data-hibernate7/dbmigration/src/test/groovy/org/grails/plugins/databasemigration/liquibase/GormDatabaseSpec.groovy
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.grails.plugins.databasemigration.liquibase
+
+import liquibase.database.DatabaseConnection
+import liquibase.database.jvm.JdbcConnection
+import liquibase.snapshot.DatabaseSnapshot
+import liquibase.snapshot.JdbcDatabaseSnapshot
+import liquibase.structure.DatabaseObject
+
+import org.grails.orm.hibernate.HibernateDatastore
+import org.hibernate.boot.Metadata
+import org.hibernate.boot.MetadataSources
+import org.hibernate.boot.internal.MetadataBuilderImpl
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder
+import org.hibernate.dialect.H2Dialect
+import spock.lang.Specification
+
+class GormDatabaseSpec extends Specification {
+
+ protected Metadata createRealMetadata() {
+ def serviceRegistry = new StandardServiceRegistryBuilder()
+ .applySetting("hibernate.dialect", H2Dialect.class.getName())
+ .build()
+ return new MetadataBuilderImpl(
+ new MetadataSources(serviceRegistry)
+ ).build()
+ }
+
+ def "test GormDatabase initialization and properties"() {
+ given:
+ def dialect = new H2Dialect()
+ Metadata metadata = createRealMetadata()
+ HibernateDatastore datastore = Mock {
+ getMetadata() >> metadata
+ }
+
+ when:
+ GormDatabase gormDb = Spy(GormDatabase, constructorArgs: [dialect, datastore])
+ gormDb.getMetadata() >> metadata
+
+ then:
+ gormDb.getDialect().getClass() == dialect.getClass()
+ gormDb.getMetadata() == metadata
+ gormDb.getGormDatastore() == datastore
+ gormDb.getShortName() == 'GORM'
+ gormDb.getDefaultDatabaseProductName() == 'getDefaultDatabaseProductName'
+ gormDb.supportsAutoIncrement()
+ !gormDb.isCorrectDatabaseImplementation(Mock(DatabaseConnection))
+ }
+
+ def "test GormDatabase connection and snapshot"() {
+ given:
+ def dialect = new H2Dialect()
+ Metadata metadata = createRealMetadata()
+ HibernateDatastore datastore = Mock()
+ datastore.getMetadata() >> metadata
+
+ when:
+ GormDatabase gormDb = new GormDatabase(dialect, datastore)
+
+ then:
+ gormDb.getDatabaseConnection() instanceof JdbcConnection
+ gormDb.getDatabaseConnection().getURL() == 'hibernate:gorm'
+
+ when: "creating a snapshot for the database"
+ def snapshot = new JdbcDatabaseSnapshot([] as DatabaseObject[], gormDb)
+
+ then: "it returns a DatabaseSnapshot"
+ snapshot instanceof DatabaseSnapshot
+ snapshot.database == gormDb
+ }
+}