in grails-plugin/src/main/groovy/grails/plugin/hibernate/commands/SchemaExportCommand.groovy [48:103]
boolean handle(ExecutionContext executionContext) {
CommandLine commandLine = executionContext.commandLine
String filename = "${executionContext.targetDir}/ddl.sql"
boolean export = false
boolean stdout = false
for (arg in commandLine.remainingArgs) {
switch(arg) {
case 'export': export = true; break
case 'generate': export = false; break
case 'stdout': stdout = true; break
default: filename = arg
}
}
def argsMap = commandLine.undeclaredOptions
String dataSourceName = argsMap.datasource ? argsMap.datasource : ConnectionSource.DEFAULT
def file = new File(filename)
file.parentFile.mkdirs()
HibernateDatastore hibernateDatastore = applicationContext.getBean("hibernateDatastore", HibernateDatastore)
hibernateDatastore = hibernateDatastore.getDatastoreForConnection(dataSourceName)
def serviceRegistry = ((SessionFactoryImplementor)hibernateDatastore.sessionFactory).getServiceRegistry()
.getParentServiceRegistry()
def metadata = hibernateDatastore.metadata
def schemaExport = new HibernateSchemaExport()
.setHaltOnError(true)
.setOutputFile(file.path)
.setDelimiter(';')
String action = export ? "Exporting" : "Generating script to ${file.path}"
String ds = argsMap.datasource ? "for DataSource '$argsMap.datasource'" : "for the default DataSource"
println "$action in environment '${Environment.current.name}' $ds"
EnumSet<TargetType> targetTypes
if(stdout) {
targetTypes = EnumSet.of(TargetType.SCRIPT, TargetType.STDOUT)
}
else {
targetTypes = EnumSet.of(TargetType.SCRIPT)
}
schemaExport.execute(targetTypes, HibernateSchemaExport.Action.CREATE, metadata, serviceRegistry)
if (schemaExport.exceptions) {
def e = (Exception)schemaExport.exceptions[0]
e.printStackTrace()
return false
}
return true
}