Skip to content

Gradle

より高度なカスタマイズを行うには、Gradle DSLを使用してデータベースを明示的に宣言できます。

SQLDelightの設定

databases

データベースのコンテナです。指定された名前で各データベースを作成するようにSQLDelightを設定します。

kotlin
sqldelight {
  databases {
    create("MyDatabase") {
      // データベースの設定をここに記述します。
    }
  }
}
groovy
sqldelight {
  databases {
    MyDatabase {
      // データベースの設定をここに記述します。
    }
  }
}

linkSqlite

型: Property<Boolean>

Nativeターゲット用。sqliteを自動的にリンクするかどうかを指定します。 これは、プロジェクトがダイナミックフレームワーク(最近のKMPバージョンでのデフォルト)にコンパイルされる際に、sqliteをリンクするために必要なメタデータを追加します。

スタティックフレームワークの場合、このフラグは効果がないことに注意してください。 プロジェクトをインポートする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

型: Property<String>

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

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

srcDirs

型: ConfigurableFileCollection

プラグインが .sq および .sqm ファイルを検索するフォルダのコレクション。

デフォルトは src/[prefix]main/sqldelight です。prefixは適用されている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

型: 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
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 を使用した際のNULL許容型の値との等価比較を置き換えません。

デフォルトは false です。

kotlin
treatNullAsUnknownForEquality.set(true)
groovy
treatNullAsUnknownForEquality = true

generateAsync

型: Property<Boolean>

trueに設定すると、SQLDelightは非同期ドライバで使用するためのサスペンドクエリメソッド(suspending query methods)を生成します。

デフォルトは false です。

kotlin
generateAsync.set(true)
groovy
generateAsync = true

deriveSchemaFromMigrations

型: Property<Boolean>

trueに設定すると、各マイグレーションが適用されたかのように、.sqm ファイルからデータベースのスキーマが派生されます。 falseの場合、スキーマは .sq ファイルで定義されます。

デフォルトは false です。

kotlin
deriveSchemaFromMigrations.set(true)
groovy
deriveSchemaFromMigrations = true

expandSelectStar

型: Property<Boolean>

trueに設定すると、SQLDelightは SELECT * ステートメントを、結果として得られる実際の各カラムを明示的に参照するように書き換えます。

例えば、以下の getAll クエリは

sql
CREATE TABLE hockey_player (
  id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  number INTEGER NOT NULL
);

getAll:
SELECT * FROM hockey_player;

SELECT hockey_player.id, hockey_player.name, hockey_player.number FROM hockey_player; のように書き換えられます。

デフォルトは true です。

kotlin
expandSelectStar.set(true)
groovy
expandSelectStar = true

codegenExcludedColumns

型: SetProperty<String>

生成されたモデルおよび展開された SELECT * プロジェクションから除外する table.column 値のセット。 テーブル名とカラム名は、SQLDelightのスキーマソースと同じ大文字小文字を使用する必要があります。 これはコード生成にのみ影響し、SQLスキーマや生成されるマイグレーション出力は変更しません。

これは、後続のスキーママイグレーションでカラムを削除する前に、生成されたKotlin APIを更新するために使用できます。 設定されたテーブルやカラムが存在しない場合、またはモデルにバインドされたインサート、SELECT 結果カラム、または RETURNING 句がコード生成から除外されたカラムを明示的にリストしている場合、SQLDelightはコンパイルに失敗します。 これはコード生成のみの設定であるため、削除されるまでの間、既存の除外されたカラムを書き込みから省略できるようにする責任はアプリケーション側にあります(例:NULL許容カラムにする、またはデフォルト値を設定するなど)。

もし .sq ファイルに CREATE TABLE スキーマ定義が含まれている場合は、物理的なスキーママイグレーションで削除されるまで、スキーマ定義内に除外対象のカラムを保持しておいてください。カラムへの明示的なクエリ参照は削除しますが、スキーマソースは現在のデータベースの形状を反映したままにしておきます。

デフォルトは空です。

kotlin
codegenExcludedColumns.set(setOf("hockey_player.number"))
groovy
codegenExcludedColumns = ["hockey_player.number"]

スキーマの依存関係

別のモジュールに対するスキーマの依存関係を指定できます。

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 {
    // 同じデータベース名
    create("MyDatabase") {
      package = "com.example.projectb"
    }
  }
}
groovy
// project-b/build.gradle

sqldelight {
  databases {
    // 同じデータベース名
    MyDatabase {
      package = "com.example.projectb"
    }
  }
}

deriveSchemaFromMigrations = true を使用する場合、このモジュールに依存するすべてのモジュールでもこの機能を有効にする必要があります。