2.0 へのアップグレード
SQLDelight 2.0 では、Gradle プラグインとランタイム API にいくつかの破壊的変更(breaking changes)が導入されています。
このページでは、それらの破壊的変更と、2.0 における新しい代替手段をリストアップしています。 新機能やその他の変更の完全なリストについては、changelog を参照してください。
新しいパッケージ名とアーティファクトグループ
com.squareup.sqldelight のすべての箇所を app.cash.sqldelight に置き換える必要があります。
plugins {
- id("com.squareup.sqldelight") version "2.1.0"
+ id("app.cash.sqldelight") version "2.1.0"
}
dependencies {
- implementation("com.squareup.sqldelight:sqlite-driver:2.1.0")
+ implementation("app.cash.sqldelight:sqlite-driver:2.1.0")
}
純粋な Android 用の SQLDelight 1.x プロジェクトでは、android-driver と coroutines-extensions-jvm を使用してください:
dependencies {
- implementation("com.squareup.sqldelight:android-driver:2.1.0")
+ implementation("app.cash.sqldelight:android-driver:2.1.0")
- implementation("com.squareup.sqldelight:coroutines-extensions:2.1.0")
+ implementation("app.cash.sqldelight:coroutines-extensions-jvm:2.1.0")
}-import com.squareup.sqldelight.db.SqlDriver
+import app.cash.sqldelight.db.SqlDriverGradle 設定の変更
SQLDelight 2.0 は、ビルドに Java 11、ランタイムに Java 8 を必要とします。
SQLDelight の設定 API は、データベースに対してマネージドプロパティと
DomainObjectCollectionを使用するようになりました。kotlinsqldelight { databases { // (1)! create("Database") { packageName.set("com.example") // (2)! } } }1. 新しい `DomainObjectCollection` ラッパー。 2. `Property<String>` になりました。kotlinsqldelight { databases { // (1)! Database { packageName = "com.example" } } }1. 新しい `DomainObjectCollection` ラッパー。sourceFolders設定はsrcDirsに名称変更されました。groovysqldelight { databases { create("MyDatabase") { packageName.set("com.example") srcDirs.setFrom("src/main/sqldelight") } } }groovysqldelight { databases { MyDatabase { packageName = "com.example" srcDirs = ['src/main/sqldelight'] } } }データベースの SQL ダイアレクトは、Gradle の依存関係を使用して指定するようになりました。
groovysqldelight { databases { create("MyDatabase") { packageName.set("com.example") dialect("app.cash.sqldelight:mysql-dialect:2.1.0") // バージョンカタログも利用可能です! dialect(libs.sqldelight.dialects.mysql) } } }groovysqldelight { databases { MyDatabase { packageName = "com.example" dialect "app.cash.sqldelight:mysql-dialect:2.1.0" // バージョンカタログも利用可能です! dialect libs.sqldelight.dialects.mysql } } }現在サポートされているダイアレクトは、
mysql-dialect、postgresql-dialect、hsql-dialect、sqlite-3-18-dialect、sqlite-3-24-dialect、sqlite-3-25-dialect、sqlite-3-30-dialect、sqlite-3-35-dialect、およびsqlite-3-38-dialectです。
ランタイムの変更
プリミティブ型は、
.sqおよび.sqmファイルにインポートする必要があります。diff+import kotlin.Boolean; CREATE TABLE HockeyPlayer ( name TEXT NOT NULL, good INTEGER AS Boolean );以前にサポートされていた一部の型は、アダプターが必要になりました。プリミティブ型のアダプターは、
app.cash.sqldelight:primitive-adapters:2.1.0アーティファクトで利用可能です。 例:INTEGER As kotlin.Intの変換を行うためのIntColumnAdapter。AfterVersionWithDriver型は削除され、常にドライバーを含むAfterVersionに置き換えられました。また、migrateWithCallbacks拡張関数は削除され、コールバックを受け取れるようになったメインのmigrateメソッドに統合されました。diffDatabase.Schema.migrateWithCallbacks( driver = driver, oldVersion = 1, newVersion = Database.Schema.version, - AfterVersionWithDriver(3) { driver -> - driver.execute(null, "INSERT INTO test (value) VALUES('hello')", 0) - } + AfterVersion(3) { driver -> + driver.execute(null, "INSERT INTO test (value) VALUES('hello')", 0) + } )Schema型はSqlDriverのネストされた型ではなくなり、SqlSchemaという名称になりました。diff-val schema: SqlDriver.Schema +val schema: SqlSchemapaging3 拡張 API が変更され、count には int 型のみが許可されるようになりました。
coroutines 拡張 API では、ディスパッチャを明示的に渡す必要があります。
diffval players: Flow<List<HockeyPlayer>> = playerQueries.selectAll() .asFlow() + .mapToList(Dispatchers.IO)execute()、executeQuery()、newTransaction()、endTransaction()などの一部のドライバーメソッドは、QueryResultオブジェクトを返すようになりました。戻り値にアクセスするには、QueryResult.valueを使用してください。diff-driver.executeQuery(null, "PRAGMA user_version", { /*...*/ }) +driver.executeQuery(null, "PRAGMA user_version", { /*...*/ }).valueこの変更により、サスペンド関数である
QueryResult.await()メソッドを使用して戻り値にアクセスできるような、非ブロッキング API に基づくドライバー実装が可能になります。SqlCursorインターフェースのnext()メソッドも、非同期ドライバーでのカーソルサポートを向上させるためにQueryResultを返すように変更されました。
SqlSchemaインターフェースにジェネリックのQueryResult型パラメータが追加されました。これは、非同期ドライバーで使用するために生成されたスキーマランタイムを区別するために使用され、同期ドライバーと直接互換性がない場合があります。 これは、JS ターゲットを持つマルチプラットフォームプロジェクトのように、同期ドライバーと非同期ドライバーを同時に使用しているプロジェクトにのみ関連します。詳細については、「Web Worker ドライバーを使用したマルチプラットフォームのセットアップ」を参照してください。SqlSchema.Versionの型がIntからLongに変更され、サーバー環境でタイムスタンプをバージョンとして利用できるようになりました。既存の設定ではIntとLongの間で安全にキャストでき、バージョンにIntの範囲を必要とするドライバーは、範囲外のバージョンの場合、データベース作成前にクラッシュします。
