Skip to content

Gradle

为了实现进一步定制,你可以使用 Gradle DSL 显式声明数据库。

SQLDelight 配置

databases

数据库容器。配置 SQLDelight 以给定名称创建每个数据库。

kotlin
sqldelight {
  databases {
    create("MyDatabase") {
      // Database configuration here.
    }
  }
}
groovy
sqldelight {
  databases {
    MyDatabase {
      // Database configuration here.
    }
  }
}

linkSqlite

类型: Property<Boolean>

针对原生目标。是否应自动链接 sqlite。 这会在项目编译为动态框架(KMP 近期版本的默认行为)时,添加链接 sqlite 所需的元数据。

请注意,对于静态框架,此标志无效。 导入项目的 XCode 构建应将 -lsqlite3 添加到链接器标志中。 或者,通过 cocoapods 插件在 sqlite3 pod 上添加项目依赖。 另一种可能有效的方法是将 sqlite3 添加到 cocoapods 的 spec.libraries 设置中,例如在 Gradle Kotlin DSL 中:extraSpecAttributes["libraries"] = "'c++', 'sqlite3'".

默认为 true

kotlin
linkSqlite.set(true)
groovy
linkSqlite = true

数据库配置

packageName

类型: Property<String>

用于数据库类的包名。

kotlin
packageName.set("com.example.db")
groovy
packageName = "com.example.db"

srcDirs

类型: ConfigurableFileCollection

插件将查找 .sq.sqm 文件的文件夹集合。

默认为 src/[prefix]main/sqldelight,其中前缀取决于所应用的 Kotlin 插件,例如多平台的 common

kotlin
srcDirs.setFrom("src/main/sqldelight")
groovy
srcDirs = ['src/main/sqldelight']

srcDirs(vararg objects: Any)

插件将查找 .sq.sqm 文件的对象集合。

kotlin
srcDirs("src/main/sqldelight", "main/sqldelight")
groovy
srcDirs('src/main/sqldelight', 'main/sqldelight')

schemaOutputDirectory

类型: DirectoryProperty

应存储 .db 模式文件的目录,相对于项目根目录。这些文件用于验证迁移是否能生成最新模式的数据库。

默认为 null。 如果为 null,将不会创建迁移验证任务。

kotlin
schemaOutputDirectory.set(file("src/main/sqldelight/databases"))
groovy
schemaOutputDirectory = file("src/main/sqldelight/databases")

dependency

类型: Project

可选地指定对其他 Gradle 项目的模式依赖 (见下文)。

kotlin
dependency(project(":other-project"))
groovy
dependency project(":other-project")

dialect

类型: StringProvider<MinimalExternalModuleDependency>

你希望目标 SQL 变体。变体是使用 Gradle 依赖选择的。这些依赖可以指定为 app.cash.sqldelight:{dialect module}:2.1.0。可用变体见下文。

对于 Android 项目,SQLite 版本会根据你的 minSdk 自动选择。否则默认为 SQLite 3.18。

可用变体:

  • HSQL: hsql-dialect
  • MySQL: mysql-dialect
  • PostgreSQL: postgresql-dialect
  • SQLite 3.18: sqlite-3-18-dialect
  • SQLite 3.24: sqlite-3-24-dialect
  • SQLite 3.25: sqlite-3-25-dialect
  • SQLite 3.30: sqlite-3-30-dialect
  • SQLite 3.33: sqlite-3-33-dialect
  • SQLite 3.35: sqlite-3-35-dialect
  • SQLite 3.38: sqlite-3-38-dialect
kotlin
dialect("app.cash.sqldelight:sqlite-3-24-dialect:2.1.0")
groovy
dialect 'app.cash.sqldelight:sqlite-3-24-dialect:2.1.0'

verifyMigrations

类型: Property<Boolean>

如果设置为 true,迁移文件若存在任何错误,将在构建过程中导致构建失败。

默认为 false

kotlin
verifyMigrations.set(true)
groovy
verifyMigrations = true

treatNullAsUnknownForEquality

类型: Property<Boolean>

如果设置为 true,SQLDelight 在使用 IS 时,不会替换与可空类型值的相等比较。

默认为 false

kotlin
treatNullAsUnknownForEquality.set(true)
groovy
treatNullAsUnknownForEquality = true

generateAsync

类型: Property<Boolean>

如果设置为 true,SQLDelight 将生成用于异步驱动的挂起查询方法。

默认为 false

kotlin
generateAsync.set(true)
groovy
generateAsync = true

deriveSchemaFromMigrations

类型: Property<Boolean>

如果设置为 true,你的数据库模式将从 .sqm 文件中派生,就如同每个迁移都已应用一样。如果为 false,你的模式在 .sq 文件中定义。

默认为 false

kotlin
deriveSchemaFromMigrations.set(true)
groovy
deriveSchemaFromMigrations = true

模式依赖

你可以指定对另一个模块的模式依赖:

kotlin
// project-a/build.gradle.kts

sqldelight {
  databases {
    create("MyDatabase") {
      packageName.set("com.example.projecta")
      dependency(project(":ProjectB"))
    }
  }
}
groovy
// project-a/build.gradle

sqldelight {
  databases {
    MyDatabase {
      packageName = "com.example.projecta"
      dependency project(":ProjectB")
    }
  }
}

这会在 ProjectB 中查找 MyDatabase 并在编译时包含其模式。为了使其正常工作,ProjectB 必须有一个相同名称的数据库(本例中为 MyDatabase),但生成到不同的包中,所以 ProjectB 的 Gradle 配置可能如下所示:

kotlin
// project-b/build.gradle.kts

sqldelight {
  databases {
    // Same database name
    create("MyDatabase") {
      package = "com.example.projectb"
    }
  }
}
groovy
// project-b/build.gradle

sqldelight {
  databases {
    // Same database name
    MyDatabase {
      package = "com.example.projectb"
    }
  }
}

如果你使用 deriveSchemaFromMigrations = true,那么依赖此模块的每个模块也必须启用此特性。