generateSqlDelightInterface 会失败

问题描述 投票:0回答:1

我的 sqldelight gradle 块中有两个数据库设置:

sqldelight {
databases {
    create("Database") {
        packageName.set("dev.db")
    }
    create("OtherDatabase") {
        packageName.set("dev.db2")
    }
}
}

构建后,sqldelight 出错,没有生成 /build/sqldelight 文件夹。

有一个生成 2 个文件的正确方法:

  • same Table Name
  • same DB file name
  • same Package name

成功了吗?

因为我需要上述要求中的

config 2 different Column_Id

例如:文件夹平台

/android
需要Column_ID A,&“/ios”需要Column_ID B。(实际上我需要解决它)

> Task :shared:generateCommonMainDatabaseInterface FAILED

使用方言编译 app.cash.sqldelight.dialects.sqlite_3_18.SqliteDialect

/shared/src/commonMain/sqldelight/dev/db/Tables.sq: (1, 13): 已使用名称 user 1 CREATE TABLE user( ^^^^ 2 id 整数主键,3 名称文本 4 )

/shared/src/commonMain/sqldelight/dev/db2/Tables.sq:(1, 13): 已使用名称 user 1 CREATE TABLE user 定义表( ^^^^ 2 id 整数主键,3 名称文本 4 )

失败:构建已完成,但有 2 次失败。

1:任务因异常而失败。

  • 出了什么问题: 任务“:shared:generateCommonMainDatabaseInterface”执行失败。

执行app.cash.sqldelight.gradle.SqlDelightTask$GenerateInterfaces时发生故障 生成失败;有关详细信息,请参阅生成器错误输出。

2:任务因异常而失败。

  • 出了什么问题: 任务“:shared:generateCommonMainOtherDatabaseInterface”执行失败。

执行app.cash.sqldelight.gradle.SqlDelightTask$GenerateInterfaces时发生故障 生成失败;有关详细信息,请参阅生成器错误输出。

3秒内构建失败 2 个可操作的任务:已执行 2 个

build.gradle
文件:

sqldelight {
    databases {
        create("Database") {
            packageName.set("dev.db")
        }
        create("OtherDatabase") {
            packageName.set("dev.db2")
        }
    }
}

*.sq
文件:

CREATE TABLE IF NOT EXISTS user(
_ID INTEGER PRIMARY KEY AUTOINCREMENT,
CATEGORY_ID INTEGER NOT NULL UNIQUE,
);

Build System

SQLDelight版本 2.0.2

Gradle 版本 8.9

Kotlin 版本 2.0.20

方言 SQLite

database kotlin sqlite kotlin-multiplatform sqldelight
1个回答
0
投票

如果:

因为我需要在上述要求中配置2个不同的Column_Id。

例如:文件夹平台/android需要Column_ID A,&“/ios”需要 Column_ID B.(实际上我需要解决它)

correct way
生成2个文件:

  • 相同的表名

  • 相同的数据库文件名

  • 相同的包名

  • 不同的ColumnId

解决方案1简单的方法

要解决问题:

different ColumnId
中的
DB file
对于
different platform
android/iOs

尝试使用

"Rename Column" SQL query
方式,改为
same ColumnId

android side
iOs side
,使用
DB Migration
SQL 查询运行
rename

解决方案2进阶方式

KMP
根项目,必须创建 2
/module
:

/iOsDbMobule
&
/androidDbModule

  • /iOsDbMobule:
  • 照常定义这些文件夹:

    /iosMain
    /commonMain

  • 配置/设置

    sqlDelight to generate A.db
    (包括
    ColumnId AA

  • /androidDbModule:
  • 照常定义这些文件夹:

    /androidMain
    /commonMain

  • 配置/设置

    sqlDelight to generate A.db
    (包括
    ColumnId BB

构建(运行配置)后,您可以重新检查其是否有效。

因此,要验证它是否有效?

Native project

  • iOs side
    :从
    *.xcframework
    导入
    KMP prj
    ,它将模拟到相应的类/数据库文件(带有columId AA)

  • android side
    :从
    *.aar
    导入
    KMP prj
    ,它将模拟到相应的类/数据库文件(带有columId BB)

© www.soinside.com 2019 - 2024. All rights reserved.