Gradle
为了实现进一步定制,你可以使用 Gradle DSL 显式声明数据库。
SQLDelight 配置
databases
数据库容器。配置 SQLDelight 以给定名称创建每个数据库。
sqldelight {
databases {
create("MyDatabase") {
// Database configuration here.
}
}
}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。
linkSqlite.set(true)linkSqlite = true数据库配置
packageName
类型: Property<String>
用于数据库类的包名。
packageName.set("com.example.db")packageName = "com.example.db"srcDirs
类型: ConfigurableFileCollection
插件将查找 .sq 和 .sqm 文件的文件夹集合。
默认为 src/[prefix]main/sqldelight,其中前缀取决于所应用的 Kotlin 插件,例如多平台的 common。
srcDirs.setFrom("src/main/sqldelight")srcDirs = ['src/main/sqldelight']srcDirs(vararg objects: Any)
插件将查找 .sq 和 .sqm 文件的对象集合。
srcDirs("src/main/sqldelight", "main/sqldelight")srcDirs('src/main/sqldelight', 'main/sqldelight')schemaOutputDirectory
类型: DirectoryProperty
应存储 .db 模式文件的目录,相对于项目根目录。这些文件用于验证迁移是否能生成最新模式的数据库。
默认为 null。 如果为 null,将不会创建迁移验证任务。
schemaOutputDirectory.set(file("src/main/sqldelight/databases"))schemaOutputDirectory = file("src/main/sqldelight/databases")dependency
类型: Project
可选地指定对其他 Gradle 项目的模式依赖 (见下文)。
dependency(project(":other-project"))dependency project(":other-project")dialect
类型: String 或 Provider<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
dialect("app.cash.sqldelight:sqlite-3-24-dialect:2.1.0")dialect 'app.cash.sqldelight:sqlite-3-24-dialect:2.1.0'verifyMigrations
类型: Property<Boolean>
如果设置为 true,迁移文件若存在任何错误,将在构建过程中导致构建失败。
默认为 false。
verifyMigrations.set(true)verifyMigrations = truetreatNullAsUnknownForEquality
类型: Property<Boolean>
如果设置为 true,SQLDelight 在使用 IS 时,不会替换与可空类型值的相等比较。
默认为 false。
treatNullAsUnknownForEquality.set(true)treatNullAsUnknownForEquality = truegenerateAsync
类型: Property<Boolean>
如果设置为 true,SQLDelight 将生成用于异步驱动的挂起查询方法。
默认为 false。
generateAsync.set(true)generateAsync = truederiveSchemaFromMigrations
类型: Property<Boolean>
如果设置为 true,你的数据库模式将从 .sqm 文件中派生,就如同每个迁移都已应用一样。如果为 false,你的模式在 .sq 文件中定义。
默认为 false。
deriveSchemaFromMigrations.set(true)deriveSchemaFromMigrations = true模式依赖
你可以指定对另一个模块的模式依赖:
// project-a/build.gradle.kts
sqldelight {
databases {
create("MyDatabase") {
packageName.set("com.example.projecta")
dependency(project(":ProjectB"))
}
}
}// project-a/build.gradle
sqldelight {
databases {
MyDatabase {
packageName = "com.example.projecta"
dependency project(":ProjectB")
}
}
}这会在 ProjectB 中查找 MyDatabase 并在编译时包含其模式。为了使其正常工作,ProjectB 必须有一个相同名称的数据库(本例中为 MyDatabase),但生成到不同的包中,所以 ProjectB 的 Gradle 配置可能如下所示:
// project-b/build.gradle.kts
sqldelight {
databases {
// Same database name
create("MyDatabase") {
package = "com.example.projectb"
}
}
}// project-b/build.gradle
sqldelight {
databases {
// Same database name
MyDatabase {
package = "com.example.projectb"
}
}
}如果你使用 deriveSchemaFromMigrations = true,那么依赖此模块的每个模块也必须启用此特性。
