【问题标题】:SQLDelight MigrationSQLDelight 迁移
【发布时间】:2021-04-06 12:41:42
【问题描述】:

我正在尝试在 SQLDelight 的表中添加更多列。我制作了一个迁移文件 1.sqm。在迁移文件中,它给出了找不到表的错误。

我的 build.gradle.kts:

sqldelight {
    database("AppDatabase") {
        packageName = "com.jetbrains.handson.kmm.shared.cache"
        schemaOutputDirectory = file("shared/src/commonMain/sqldelight/com/jetbrains/handson/kmm/shared/cache/AppDatabase.sq")
        migrationOutputDirectory = file("shared/src/commonMain/sqldelight/migrations/1.sqm")
        migrationOutputFileFormat = ".sqm" 
        schemaOutputDirectory
        deriveSchemaFromMigrations = true
    }
}

创建表语句:

CREATE TABLE pos_orders(id INTEGER AS Int PRIMARY KEY, orderId INTEGER AS Int , dateandtime TEXT, restaurant_id INTEGER AS Int, restaurant_name TEXT, deliveryType_description TEXT, paymentType_description TEXT, totalAmount REAL AS Float,
process_order INTEGER AS Int, pos_accept INTEGER AS Int, pos_printed INTEGER AS Int, status INTEGER AS Int, prep_time INTEGER AS Int, desired_delivery_time TEXT, restaurant_address TEXT, customerNo TEXT, title TEXT, firstName TEXT, lastName TEXT,company TEXT, street TEXT, houseNo TEXT, zip TEXT, city TEXT, state TEXT,floor TEXT, bezirk TEXT, bellname TEXT, email TEXT, phoneNo TEXT, fax TEXT, taxAmount REAL AS Float, total REAL AS Float , deliverycharges REAL AS Float,
deliveryType INTEGER AS Int, paymentType INTEGER AS Int, comment TEXT, order_note TEXT, sender TEXT, cancelation_cause TEXT, demo_order INTEGER AS Int, orderDate TEXT, updated TEXT);

【问题讨论】:

  • create table 语句是什么样的?
  • 对不起,我已经在问题正文中添加了。
  • 我会从该配置中删除除 packageName 之外的所有内容。参见示例:github.com/touchlab/KaMPKit/blob/main/shared/…。从schemaOutputDirectory 开始的所有内容都会混淆IDE 插件。
  • 没有什么帮助我在迁移文件中编写这些 Alter 表查询。
  • 如何更改表以在 SQLDeligt 中添加新列?

标签: android android-studio kotlin kotlin-multiplatform sqldelight


【解决方案1】:
sqldelight {
    database("AppDatabase") {
        packageName = "com.jetbrains.handson.kmm.shared.cache"
        schemaOutputDirectory = file("com.jetbrains.handson.kmm.shared.cache")
        migrationOutputDirectory = file("com.jetbrains.handson.kmm.shared.cache")
        deriveSchemaFromMigrations = true
        verifyMigrations = true
    }
}

把 gradle.build 改成上面那个 然后 在路径中,就像我用两个文件夹写的一样 sqldelight

shared/src/commonMain/sqldelight/com/jetbrains/handson/kmm/shared/cache/sqldelight


在 sqldelight 文件夹中放置所有数据库文件 AppDatabase.sq、1.sqm、2.sqm ... 等等

诀窍就在这里 在 AppDatabase.sq 只放置数据库查询。

AppDatabase 应该看起来像

getAll:
SELECT * FROM pos_orders;

deleteAll:
DELETE FROM pos_orders;

并创建另一个 1.sqm 来放置您的原始表格并创建 2.sqm 来放置您的迁移。

1.sqm 应该看起来像

CREATE TABLE pos_orders(id INTEGER AS Int PRIMARY KEY, orderId INTEGER AS Int , dateandtime TEXT, restaurant_id INTEGER AS Int, restaurant_name TEXT, deliveryType_description TEXT, paymentType_description TEXT, totalAmount REAL AS Float,
process_order INTEGER AS Int, pos_accept INTEGER AS Int, pos_printed INTEGER AS Int, status INTEGER AS Int, prep_time INTEGER AS Int, desired_delivery_time TEXT, restaurant_address TEXT, customerNo TEXT, title TEXT, firstName TEXT, lastName TEXT,company TEXT, street TEXT, houseNo TEXT, zip TEXT, city TEXT, state TEXT,floor TEXT, bezirk TEXT, bellname TEXT, email TEXT, phoneNo TEXT, fax TEXT, taxAmount REAL AS Float, total REAL AS Float , deliverycharges REAL AS Float,
deliveryType INTEGER AS Int, paymentType INTEGER AS Int, comment TEXT, order_note TEXT, sender TEXT, cancelation_cause TEXT, demo_order INTEGER AS Int, orderDate TEXT, updated TEXT);

2.sqm 应该看起来像

ALTER TABLE pos_orders ADD COLUMN year INTEGER ;

【讨论】:

  • 只要确认一下,如上设置完成迁移,是否需要编写任何代码或SQLDelight会在内部处理迁移?提前致谢
  • 当你看到这个时告诉我谢谢@Fady Emad
  • @RaghavPai 根据数字序列创建新文件 .sqm 后,迁移将自动触发,因为 SQLDelight 将按顺序获取文件并运行它,然后是 1.sqm 然后 2.sqm 3.sqm 和上面的例子一样,如果你想创建一个新表,你可以创建 3.sqm 并把 CREATE TABLE table_name
猜你喜欢
  • 2021-10-08
  • 2017-06-26
  • 2019-12-27
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多