2.0へのアップグレード
SQLDelight 2.0では、GradleプラグインとランタイムAPIにいくつかの破壊的変更が加えられています。
このページでは、それらの破壊的変更点と2.0での新しい同等物について説明します。新機能やその他の変更点の完全なリストについては、変更履歴を参照してください。
新しいパッケージ名とアーティファクトグループ
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") // Version catalogs also work! dialect(libs.sqldelight.dialects.mysql) } } }groovysqldelight { databases { MyDatabase { packageName = "com.example" dialect "app.cash.sqldelight:mysql-dialect:2.1.0" // Version catalogs also work! 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は、カウントに
Int型のみを許可するように変更されました。コルーチン拡張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この変更により、ドライバーの実装はノンブロッキングAPIに基づいて行われるようになり、返された値にはサスペンド関数である
QueryResult.await()メソッドを使用してアクセスできます。SqlCursorインターフェースのnext()メソッドも、非同期ドライバーでのより良いカーソルサポートを可能にするために、QueryResultを返すように変更されました。
SqlSchemaインターフェースには、ジェネリックなQueryResult型パラメータが追加されました。これは、非同期ドライバーで使用するために生成されたスキーマランタイムを区別するために使用され、これらは同期ドライバーと直接互換性がない場合があります。これは、JSターゲットを持つマルチプラットフォームプロジェクトのように、同期ドライバーと非同期ドライバーを同時に使用するプロジェクトにのみ関連します。詳細については、「Web Workerドライバーを使用したマルチプラットフォームセットアップ」を参照してください。SqlSchema.Versionの型がIntからLongに変更され、サーバー環境でタイムスタンプをバージョンとして活用できるようになりました。既存のセットアップではIntとLong間で安全にキャストでき、バージョンにInt範囲を必要とするドライバーは、範囲外のバージョンの場合、データベース作成前にクラッシュします。
