Gradle
より詳細なカスタマイズのために、Gradle DSLを使用してデータベースを明示的に宣言できます。
SQLDelight 設定
databases
データベースを格納するコンテナです。SQLDelightは、指定された名前で各データベースを作成するように構成されます。
sqldelight {
databases {
create("MyDatabase") {
// ここにデータベース設定を記述します。
}
}
}
sqldelight {
databases {
MyDatabase {
// ここにデータベース設定を記述します。
}
}
}
linkSqlite
Type: Property<Boolean>
ネイティブターゲット向け。SQLiteを自動的にリンクするかどうかを決定します。 これは、プロジェクトがダイナミックフレームワークにコンパイルされる際に、SQLiteをリンクするために必要なメタデータを追加します(これはKMPの最近のバージョンでのデフォルトです)。
なお、スタティックフレームワークの場合、このフラグは効果がありません。 プロジェクトをインポートするXcodeビルドは、リンカフラグに-lsqlite3
を追加する必要があります。 または、CocoaPodsプラグイン経由でsqlite3 podへのプロジェクト依存関係を追加します。 機能する可能性のあるもう一つのオプションは、CocoaPodsのspec.libraries
設定にsqlite3
を追加することです。例:Gradle Kotlin DSLの場合: extraSpecAttributes["libraries"] = "'c++', 'sqlite3'".
デフォルトはtrue
です。
linkSqlite.set(true)
linkSqlite = true
データベース設定
packageName
Type: Property<String>
データベースクラスに使用されるパッケージ名です。
packageName.set("com.example.db")
packageName = "com.example.db"
srcDirs
Type: 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
Type: DirectoryProperty
.db
スキーマファイルをプロジェクトルートからの相対パスで格納するディレクトリです。 これらのファイルは、マイグレーションが最新のスキーマを持つデータベースを生成することを検証するために使用されます。
デフォルトはnull
です。 もしnull
の場合、マイグレーション検証タスクは作成されません。
schemaOutputDirectory.set(file("src/main/sqldelight/databases"))
schemaOutputDirectory = file("src/main/sqldelight/databases")
dependency
Type: Project
オプションで、他のGradleプロジェクトに対するスキーマ依存関係を(下記参照)指定できます。
dependency(project(":other-project"))
dependency project(":other-project")
dialect
Type: String
or 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
Type: Property<Boolean>
true
に設定されている場合、マイグレーションファイルにエラーがあるとビルドプロセス中に失敗します。
デフォルトはfalse
です。
verifyMigrations.set(true)
verifyMigrations = true
treatNullAsUnknownForEquality
Type: Property<Boolean>
true
に設定されている場合、SQLDelightはIS
を使用する際にnullableな型付き値との等価比較を置換しません。
デフォルトはfalse
です。
treatNullAsUnknownForEquality.set(true)
treatNullAsUnknownForEquality = true
generateAsync
Type: Property<Boolean>
true
に設定されている場合、SQLDelightは非同期ドライバーで使用するためのサスペンディングクエリメソッドを生成します。
デフォルトはfalse
です。
generateAsync.set(true)
generateAsync = true
deriveSchemaFromMigrations
Type: 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
を使用する場合、このモジュールに依存するすべてのモジュールもこの機能を有効にする必要があります。