Grails db-migration dbm-db-doc script fails -


i tried run "dbm-db-doc" script. seems script not working because failed on changelog been executed. change:

changeset(author: "bernardo (generated)", id: "1436991688243-1") {     addcolumn(tablename: "prepares_for_exam") {         column(name: "exam_id", type: "bigint")     }      grailschange {         change {             sql.execute("update prepares_for_exam join product on prepares_for_exam.id = product.prepares_for_exam_id set prepares_for_exam.exam_id = product.id")         }         rollback {         }     }      addnotnullconstraint(columndatatype: "bigint", tablename: "prepares_for_exam", columnname: "exam_id") }  changeset(author: "bernardo (generated)", id: "1436991688243-32") {     dropcolumn(columnname: "prepares_for_exam_id", tablename: "product") } 

and in database, changelog has been marked "executed" changelog has been executed

but when running script seems script wants execute changelog , fails because column "product.prepares_for_exam_id" has been dropped.

full error:

|starting dbm-db-doc database root @ jdbc:mysql://localhost:3306/xxx?autoreconnect=true&useunicode=yes&characterencoding=utf-8 com.mysql.jdbc.exceptions.jdbc4.mysqlsyntaxerrorexception: unknown column 'product.prepares_for_exam_id' in 'on clause'     @ com.mysql.jdbc.util.handlenewinstance(util.java:411)     @ com.mysql.jdbc.util.getinstance(util.java:386)     @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1054)     @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4237)     @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4169)     @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2617)     @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2778)     @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2828)     @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2777)     @ com.mysql.jdbc.statementimpl.execute(statementimpl.java:949)     @ com.mysql.jdbc.statementimpl.execute(statementimpl.java:795)     @ script1$_run_closure1_closure2_closure35_closure36.docall(script1.groovy:10)     @ grails.plugin.databasemigration.grailschange.generatestatements(grailschange.groovy:159)     @ liquibase.change.abstractchange.getaffecteddatabaseobjects(abstractchange.java:208)     @ liquibase.changelog.visitor.dbdocvisitor.visit(dbdocvisitor.java:95)     @ liquibase.changelog.changelogiterator.run(changelogiterator.java:58)     @ liquibase.liquibase.generatedocumentation(liquibase.java:740)     @ dbmdbdoc$_run_closure1_closure2.docall(dbmdbdoc:27)     @ _databasemigrationcommon_groovy$_run_closure2_closure11.docall(_databasemigrationcommon_groovy:59)     @ grails.plugin.databasemigration.migrationutils.executeinsession(migrationutils.groovy:133)     @ _databasemigrationcommon_groovy$_run_closure2.docall(_databasemigrationcommon_groovy:51)     @ dbmdbdoc$_run_closure1.docall(dbmdbdoc:26)     @ org.grails.ide.api.impl.grailsconnectorimpl.executecommand(grailsconnectorimpl.java:160)     @ org.grails.ide.eclipse.longrunning.process.grailsprocess.run(grailsprocess.java:130)     @ org.grails.ide.eclipse.longrunning.process.grailsprocess.main(grailsprocess.java:93) error | org.codehaus.groovy.grails.cli.scriptexitexception error | 

so question is:

is there bug in "dbm-db-doc"-script or did messed changeset?

i answering own question because found sollution:

it seems migration plugin keeps executing "grailschange" part every time although changeset has been executed (i have no clue why... answers welcome!)

the sollution not use "grailschange" , use normal "sql" command instead. sollution:

changeset(author: "bernardo (generated)", id: "1436991688243-1") {         addcolumn(tablename: "prepares_for_exam") {             column(name: "exam_id", type: "bigint")         }          sql(""" update prepares_for_exam join product on prepares_for_exam.id = product.prepares_for_exam_id set prepares_for_exam.exam_id = product.id """ )          addnotnullconstraint(columndatatype: "bigint", tablename: "prepares_for_exam", columnname: "exam_id")     } 

Comments