【问题标题】:ALTER TABLE migrations does not update the generated codeALTER TABLE 迁移不会更新生成的代码
【发布时间】:2020-11-24 18:24:03
【问题描述】:

我正在编写一个更改表的迁移文件,添加一个新列,但生成的代码没有更新,因此我无法将新记录插入到新列的值中。

例子:


// BankAccount.sq file
    
CREATE TABLE bank_account (
    id INTEGER PRIMARY KEY,
    bank_code TEXT NOT NULL,
    account_number INTEGER NOT NULL,
    account_digit INTEGER NOT NULL
);

selectALL:
SELECT * FROM bank_account;
    
insert:
INSERT INTO bank_account VALUES (?,?,?,?);

// 1.sqm file
ALTER TABLE bank_account ADD COLUMN bank_name TEXT;

添加该列后,生成的代码似乎没有更新。例如,insert 函数未更新以接收新添加到表中的列,内部生成的 Kotlin 代码未更新为新列。

有没有办法绕过这个问题?

【问题讨论】:

    标签: kotlin sqldelight


    【解决方案1】:

    CREATE TABLE 始终是架构的新版本,因此您还需要在 CREATE TABLE 中添加列。如果您想让迁移文件成为事实来源,您需要启用deriveSchemaFromMigrations,如下所述:https://cashapp.github.io/sqldelight/jvm_mysql/#migration-schema

    【讨论】:

    • 我启用了deriveSchemaFromMigrations 属性,现在我收到以下错误:Unexpected number of values being inserted. found: 4 expected: 0 INSERT INTO company_bank_account VALUES (?,?,?,?)
    • 您还需要将 CREATE TABLE 移动到迁移文件中(第一个版本可能为 0.sqm)
    【解决方案2】:

    抱歉不能评论,不是用“VALUES”代替“VALUE”吗?

    【讨论】:

    • 已修复。谢谢。
    猜你喜欢
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2014-12-22
    • 2011-01-21
    • 2016-09-23
    相关资源
    最近更新 更多