Gradle
為了提供更大的客製化能力,你可以使用 Gradle DSL 明確宣告資料庫。
SQLDelight 配置
databases
資料庫容器。設定 SQLDelight 以給定的名稱建立每個資料庫。
sqldelight {
databases {
create("MyDatabase") {
// Database configuration here.
}
}
}
sqldelight {
databases {
MyDatabase {
// Database configuration here.
}
}
}
linkSqlite
類型:Property<Boolean>
針對原生目標。是否應自動連結 (link) 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
結構描述檔案的目錄,相對於專案根目錄。 這些檔案用於驗證遷移 (migrations) 能產生具有最新結構描述的資料庫。
預設為 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 = true
treatNullAsUnknownForEquality
類型:Property<Boolean>
如果設定為 true
,當使用 IS
時,SQLDelight 將不會用可空類型值替換相等比較。
預設為 false
。
treatNullAsUnknownForEquality.set(true)
treatNullAsUnknownForEquality = true
generateAsync
類型:Property<Boolean>
如果設定為 true
,SQLDelight 將生成 suspend
查詢方法以用於非同步驅動程式。
預設為 false
。
generateAsync.set(true)
generateAsync = true
deriveSchemaFromMigrations
類型: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
,則每個依賴此模組的模組也必須啟用此功能。