diff --git a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/ColumnConfig.groovy b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/ColumnConfig.groovy index f2b52d24e03..7923ca4b4a3 100644 --- a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/ColumnConfig.groovy +++ b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/ColumnConfig.groovy @@ -30,6 +30,8 @@ class ColumnConfig { int length = -1 int precision = -1 int scale = -1 + String defaultValue + String comment String toString() { "column[name:$name, index:$index, unique:$unique, length:$length, precision:$precision, scale:$scale]" diff --git a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java index 22e4d145ae3..b477fa06eef 100644 --- a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java +++ b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java @@ -1813,6 +1813,10 @@ protected static void createClassProperties(GrailsDomainClass domainClass, Persi Mapping gormMapping = getMapping(domainClass.getClazz()); + if (gormMapping != null) { + table.setComment(gormMapping.getComment()); + } + for (GrailsDomainClassProperty currentGrailsProp : persistentProperties) { // if its inherited skip @@ -2683,6 +2687,11 @@ private static void bindSimpleValue(String type, SimpleValue simpleValue, boolea private static void bindColumn(GrailsDomainClassProperty property, GrailsDomainClassProperty parentProperty, Column column, ColumnConfig cc, String path, Table table, String sessionFactoryBeanName) { + if (cc != null) { + column.setComment(cc.getComment()); + column.setDefaultValue(cc.getDefaultValue()); + } + Class userType = getUserType(property); String columnName = getColumnNameForPropertyAndPath(property, path, cc, sessionFactoryBeanName); if ((property.isAssociation() || property.isBasicCollectionType()) && userType == null) { diff --git a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy index 45e7494a687..c3362bd0d6c 100644 --- a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy +++ b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy @@ -422,6 +422,8 @@ class HibernateMappingBuilder { if (namedArgs["enumType"]) cc.enumType = namedArgs["enumType"] if (namedArgs["index"]) cc.index = namedArgs["index"] if (namedArgs["unique"]) cc.unique = namedArgs["unique"] + if (namedArgs.defaultValue) cc.defaultValue = namedArgs.defaultValue + if (namedArgs.comment) cc.comment = namedArgs.comment cc.length = namedArgs["length"] ?: -1 cc.precision = namedArgs["precision"] ?: -1 cc.scale = namedArgs["scale"] ?: -1 @@ -537,6 +539,10 @@ class HibernateMappingBuilder { mapping.datasources = names } + void comment(String comment) { + mapping.comment = comment + } + void methodMissing(String name, args) { if ('user-type' == name && args && (args[0] instanceof Map)) { hibernateCustomUserType(args[0]) diff --git a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/Mapping.groovy b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/Mapping.groovy index 69be81c37f7..87a4f9872da 100644 --- a/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/Mapping.groovy +++ b/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/Mapping.groovy @@ -114,7 +114,7 @@ class Mapping { ColumnConfig discriminatorColumn /** - * Obtains a ColumnConfig object for the given name + * Obtains a PropertyConfig object for the given name */ PropertyConfig getPropertyConfig(String name) { columns[name] } @@ -143,4 +143,9 @@ class Mapping { * @return the datasource names */ List datasources = [GrailsDomainClassProperty.DEFAULT_DATA_SOURCE] + + /** + * DDL comment. + */ + String comment } diff --git a/grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateMappingBuilderTests.groovy b/grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateMappingBuilderTests.groovy index e877256cd69..3862635b036 100644 --- a/grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateMappingBuilderTests.groovy +++ b/grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateMappingBuilderTests.groovy @@ -737,4 +737,36 @@ class HibernateMappingBuilderTests extends GroovyTestCase { assertTrue mapping.getPropertyConfig('firstName').updateable assertFalse mapping.getPropertyConfig('lastName').updateable } + + void testDefaultValue() { + def builder = new HibernateMappingBuilder("Foo") + def mapping = builder.evaluate { + comment 'wahoo' + name comment: 'bar' + foo defaultValue: '5' + } + assertEquals '5', mapping.getPropertyConfig('foo').columns[0].defaultValue + assertNull mapping.getPropertyConfig('name').columns[0].defaultValue + } + + void testColumnComment() { + def builder = new HibernateMappingBuilder("Foo") + def mapping = builder.evaluate { + comment 'wahoo' + name comment: 'bar' + foo defaultValue: '5' + } + assertEquals 'bar', mapping.getPropertyConfig('name').columns[0].comment + assertNull mapping.getPropertyConfig('foo').columns[0].comment + } + + void testTableComment() { + def builder = new HibernateMappingBuilder("Foo") + def mapping = builder.evaluate { + comment 'wahoo' + name comment: 'bar' + foo defaultValue: '5' + } + assertEquals 'wahoo', mapping.comment + } }