grails 变更日志先决条件不执行任何操作

标签 grails changelog preconditions

我正在尝试使用更改日志对数据库进行更改。由于我无法保证特定代码当前存在但可能存在的值,因此我需要能够检查它们以便执行插入或更新。

这是我一直在测试的内容,它似乎没有做任何事情。欢迎任何建议。

databaseChangeLog = {
    changeSet(author:'kmert', id:'tubecap-insert-update-1') {
        preConditions(onFail="WARN",onFailMessage:"Tube cap does not exist,skipping because it cannot be updated."){
            sqlCheck(expectedResult='1', 'SELECT * FROM [ltc2_tube_cap] WHERE code=11')
        }
        grailsChange {
            change {
                sql.execute("""
                    UPDATE [ltc2_tube_cap]
                    SET [name] = 'White'
                    WHERE [code] = 11;
                """)
            }
            rollback {
            }
        }
    }
}

更新:我运行了变更日志脚本,但现在收到此错误。我从在线资源中找到了该代码。我找不到很多关于先决条件的文档...

|启动数据库 hapi_app_user @ jdbc:jtds:sqlserver://localhost;databaseName=LabTraffic;MVCC=TRUE;LOCK_TIMEOUT=10000 的 dbm-update 解析 TubeCapUpdate.groovy 时出现问题:没有方法签名:grails.plugin.databasemigration.DslBuilder.sqlCheck() 适用于参数类型:(java.lang.String, java.lang.String) 值:[1, SELECT * FROM ltc2_tube_cap WHERE code=11] (使用 --verbose 重新运行以查看堆栈跟踪) 解析changelog.groovy时出现问题:没有方法签名:grails.plugin.databasemigration.DslBuilder.sqlCheck()适用于参数类型:(java.lang.String,java.lang.String)值:[1,SELECT * FROM ltc2_tube_cap WHERE code=11] (使用 --verbose 重新运行以查看堆栈跟踪) groovy.lang.MissingMethodException:没有方法签名:grails.plugin.databasemigration.DslBuilder.sqlCheck()适用于参数类型:(java.lang.String,java.lang.String)值:[1,SELECT * FROM ltc2_tube_cap其中代码=11] 在 grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117) 在 Script1$_run_closure1_closure2_closure3.doCall(Script1.groovy:13) 在 grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117) 在 Script1$_run_closure1_closure2.doCall(Script1.groovy:12) 在 grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117) 在 Script1$_run_closure1.doCall(Script1.groovy:11) 在 grails.plugin.databasemigration.GrailsChangeLogParser.parse(GrailsChangeLogParser.groovy:84) 在 grails.plugin.databasemigration.DslBuilder.handleInincludedChangeLog(DslBuilder.groovy:747) 在 grails.plugin.databasemigration.DslBuilder.createNode(DslBuilder.groovy:139) 在 grails.plugin.databasemigration.DslBuilder.createNode(DslBuilder.groovy:590) 在 grails.plugin.databasemigration.DslBuilder.invokeMethod(DslBuilder.groovy:117) 在 Script1$_run_closure1.doCall(Script1.groovy:6) 在 grails.plugin.databasemigration.GrailsChangeLogParser.parse(GrailsChangeLogParser.groovy:84) 在 liquibase.Liquibase.update(Liquibase.java:107) 在 DbmUpdate$_run_closure1_closure2.doCall(DbmUpdate:26) 在 _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) 在 DbmUpdate$_run_closure1.doCall(DbmUpdate:25)

最佳答案

您的 sqlCheck 先决条件语法不正确。

 sqlCheck(expectedResult:'1', 'SELECT * FROM [ltc2_tube_cap] WHERE code=11')

请注意,代码中的第一个参数是赋值语句 expectedResult=1,它应该是映射条目 expectedResult:1

我在这个 Jira 页面上找到了隐藏的答案。 https://jira.grails.org/browse/GPDATABASEMIGRATION-40讽刺的是,这是在文档中添加大量数据库迁移 DSL 示例。

关于grails 变更日志先决条件不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524383/

相关文章:

grails - 在资源映射中嵌套常规URL映射时,可以更改生成的变量的名称吗?

java - 找不到更新日志 changelog.groovy

save - Jenkins:如何保存构建的变更日志

amazon-web-services - 为什么 grails websockets 连接失败,但在使用 AWS ELB 时继续接收浏览器中已订阅的消息?

grails - 在Grails中使用Amazon SES时出错

java - Liquibase前提条件: How do I check for a column being the correct data type?

java - 为什么 Google Precondition Library 中的 Checkers 接受对象而不是字符串

grails - 斯波克和简单

mercurial - 使用 Mercurial,如何记录具有跨分支祖先的分支?