Skip to content

Gradle

より詳細なカスタマイズのために、Gradle DSLを使用してデータベースを明示的に宣言できます。

SQLDelight 設定

databases

データベースを格納するコンテナです。SQLDelightは、指定された名前で各データベースを作成するように構成されます。

kotlin
sqldelight {
  databases {
    create("MyDatabase") {
      // ここにデータベース設定を記述します。
    }
  }
}
groovy
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です。

kotlin
linkSqlite.set(true)
groovy
linkSqlite = true

データベース設定

packageName

Type: Property<String>

データベースクラスに使用されるパッケージ名です。

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

srcDirs

Type: 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

Type: DirectoryProperty

.dbスキーマファイルをプロジェクトルートからの相対パスで格納するディレクトリです。 これらのファイルは、マイグレーションが最新のスキーマを持つデータベースを生成することを検証するために使用されます。

デフォルトはnullです。 もしnullの場合、マイグレーション検証タスクは作成されません。

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

dependency

Type: Project

オプションで、他のGradleプロジェクトに対するスキーマ依存関係を(下記参照)指定できます。

kotlin
dependency(project(":other-project"))
groovy
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
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

Type: Property<Boolean>

trueに設定されている場合、マイグレーションファイルにエラーがあるとビルドプロセス中に失敗します。

デフォルトはfalseです。

kotlin
verifyMigrations.set(true)
groovy
verifyMigrations = true

treatNullAsUnknownForEquality

Type: Property<Boolean>

trueに設定されている場合、SQLDelightはISを使用する際にnullableな型付き値との等価比較を置換しません。

デフォルトはfalseです。

kotlin
treatNullAsUnknownForEquality.set(true)
groovy
treatNullAsUnknownForEquality = true

generateAsync

Type: Property<Boolean>

trueに設定されている場合、SQLDelightは非同期ドライバーで使用するためのサスペンディングクエリメソッドを生成します。

デフォルトはfalseです。

kotlin
generateAsync.set(true)
groovy
generateAsync = true

deriveSchemaFromMigrations

Type: 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を使用する場合、このモジュールに依存するすべてのモジュールもこの機能を有効にする必要があります。