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" 
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
Post a Comment