রুম ৩.০

রুম পারসিস্টেন্স লাইব্রেরি SQLite-এর উপর একটি অ্যাবস্ট্রাকশন লেয়ার প্রদান করে যাতে SQLite-এর পূর্ণ ক্ষমতা ব্যবহার করে আরও শক্তিশালী ডাটাবেস অ্যাক্সেস পাওয়া যায়।
সর্বশেষ আপডেট স্থিতিশীল রিলিজ রিলিজ প্রার্থী বিটা রিলিজ আলফা রিলিজ
১১ মার্চ, ২০২৬ - - - ৩.০.০-আলফা০১

নির্ভরতা ঘোষণা করা

Room3-এর উপর নির্ভরতা যোগ করতে, আপনার প্রোজেক্টে Google Maven রিপোজিটরি যোগ করতে হবে। আরও তথ্যের জন্য Google-এর Maven রিপোজিটরি পড়ুন।

আপনার অ্যাপ বা মডিউলের জন্য build.gradle ফাইলে আপনার প্রয়োজনীয় আর্টিফ্যাক্টের জন্য নির্ভরতা যোগ করুন:

কোটলিন

dependencies {
    val room_version = ""

    implementation("androidx.room3:room3-runtime:$room_version")
    ksp("androidx.room3:room3-compiler:$room_version")
}

খাঁজকাটা

dependencies {
    def room_version = ""

    implementation "androidx.room3:room3-runtime:$room_version"

    ksp "androidx.room3:room3-compiler:$room_version"
}

KSP প্লাগইন ব্যবহারের তথ্যের জন্য, KSP কুইক-স্টার্ট ডকুমেন্টেশন দেখুন।

নির্ভরতা সম্পর্কে আরও তথ্যের জন্য, বিল্ড নির্ভরতা যোগ করুন দেখুন।

রুম গ্রেডল প্লাগইন ব্যবহার করুন

You can use the Room Gradle Plugin to configure options for the Room compiler. The plugin configures the project such that generated schemas (which are an output of the compile tasks and are consumed for auto-migrations) are correctly configured to have reproducible and cacheable builds.

প্লাগইনটি যোগ করতে, আপনার শীর্ষ-স্তরের গ্রেডল বিল্ড ফাইলে, প্লাগইন এবং এর সংস্করণটি সংজ্ঞায়িত করুন।

খাঁজকাটা

plugins {
    id 'androidx.room3' version "$room_version" apply false
}

কোটলিন

plugins {
    id("androidx.room3") version "$room_version" apply false
}

মডিউল-স্তরের গ্রেডল বিল্ড ফাইলে, প্লাগইনটি প্রয়োগ করুন এবং room3 এক্সটেনশনটি ব্যবহার করুন।

খাঁজকাটা

plugins {
    id 'androidx.room3'
}

room3 {
    schemaDirectory "$projectDir/schemas"
}

কোটলিন

plugins {
    id("androidx.room3")
}

room3 {
    schemaDirectory("$projectDir/schemas")
}

Room Gradle প্লাগইন ব্যবহার করার সময় একটি schemaDirectory সেট করা প্রয়োজন। এটি Room কম্পাইলার এবং বিভিন্ন কম্পাইল টাস্ক এবং এর ব্যাকএন্ড (kotlinc, KSP) কে ফ্লেভারড ফোল্ডারে স্কিমা ফাইল আউটপুট করার জন্য কনফিগার করবে, উদাহরণস্বরূপ schemas/flavorOneDebug/com.package.MyDatabase/1.json । এই ফাইলগুলি যাচাইকরণ এবং স্বয়ংক্রিয়-মাইগ্রেশনের জন্য ব্যবহার করার জন্য রিপোজিটরিতে চেক করা উচিত।

প্রতিক্রিয়া

আপনার মতামত জেটপ্যাককে আরও উন্নত করতে সাহায্য করবে। আপনি যদি নতুন সমস্যা আবিষ্কার করেন অথবা এই লাইব্রেরি উন্নত করার জন্য কোন ধারণা থাকে তাহলে আমাদের জানান। নতুন একটি তৈরি করার আগে দয়া করে এই লাইব্রেরিতে বিদ্যমান সমস্যাগুলি একবার দেখে নিন। আপনি তারকা বোতামে ক্লিক করে বিদ্যমান সমস্যাটিতে আপনার ভোট যোগ করতে পারেন।

একটি নতুন সমস্যা তৈরি করুন

আরও তথ্যের জন্য ইস্যু ট্র্যাকার ডকুমেন্টেশন দেখুন।

সংস্করণ 3.0

সংস্করণ 3.0.0-alpha01

১১ মার্চ, ২০২৬

androidx.room3:room3-*:3.0.0-alpha01 প্রকাশিত হয়েছে।

রুম ৩.০ (প্যাকেজ androidx.room3 ) হল রুম ২.এক্স প্যাকেজ ( androidx.room ) এর একটি প্রধান সংস্করণ আপডেট যা কোটলিন মাল্টিপ্ল্যাটফর্ম (KMP) এর উপর দৃষ্টি নিবদ্ধ করে।

মূল উপাদানগুলির সাথে মূল অ্যানোটেশন API গুলি একই রাখা হয়:

  • একটি বিমূর্ত ক্লাস যা androidx.room3.RoomDatabase প্রসারিত করে এবং @Database দিয়ে টীকাযুক্ত, তা হল Room এর অ্যানোটেশন প্রসেসরের এন্ট্রি পয়েন্ট।
  • ডাটাবেস ঘোষণায় ডাটাবেস স্কিমা বর্ণনা করে এক বা একাধিক ডেটা ক্লাস থাকে এবং @Entity দিয়ে টীকা করা হয়।
  • ডাটাবেস অপারেশনগুলি @Dao ঘোষণায় সংজ্ঞায়িত করা হয় যেখানে কোয়েরি ফাংশন থাকে যার SQL স্টেটমেন্টগুলি @Query অ্যানোটেশনের মাধ্যমে সংজ্ঞায়িত করা হয়।
  • রানটাইমে, ডাটাবেস বাস্তবায়ন একটি RoomDatabase.Builder এর মাধ্যমে পাওয়া যেতে পারে যা ডাটাবেস কনফিগার করতেও ব্যবহৃত হয়।

রুম গাইড ব্যবহার করে স্থানীয় ডাটাবেসে ডেটা সংরক্ষণের বেশিরভাগ ডকুমেন্টেশন এখনও রুম 3.0 এর সাথে প্রাসঙ্গিক।

রুম 2.x এর মধ্যে প্রধান পার্থক্যগুলি নিম্নরূপ:

  • নতুন প্যাকেজ, androidx.room3
  • SupportSQLite API গুলি আর সমর্থিত নয়, যদি না আপনি androidx.room3:room3-sqlite-wrapper ব্যবহার করেন।
  • সমস্ত ডাটাবেস অপারেশন এখন Coroutine API ভিত্তিক।
  • শুধুমাত্র কোটলিন কোড জেনারেশন।
  • কোটলিন সিম্বল প্রসেসিং (KSP) প্রয়োজন।

পরিবর্তনশীল পরিবর্তনের পাশাপাশি, রুম ৩.০ ২.x এর তুলনায় নতুন কার্যকারিতা নিয়ে আসে:

  • JS এবং WasmJS সাপোর্ট
  • কাস্টম DAO রিটার্নের ধরণ

নতুন প্যাকেজ

বিদ্যমান Room 2.x বাস্তবায়নের সাথে সামঞ্জস্যপূর্ণ সমস্যাগুলি প্রতিরোধ করার জন্য এবং Room এর সাথে ট্রানজিটিভ নির্ভরতা সহ লাইব্রেরিগুলির জন্য (উদাহরণস্বরূপ, WorkManager), Room 3.0 একটি নতুন প্যাকেজে থাকে, যার অর্থ এটিতে একটি নতুন maven গ্রুপ এবং আর্টিফ্যাক্ট আইডিও রয়েছে। উদাহরণস্বরূপ, androidx.room:room-runtime এখন androidx.room3:room3-runtime হয়ে গেছে এবং androidx.room.RoomDatabase এর মতো ক্লাসগুলি এখন androidx.room3.RoomDatabase এ অবস্থিত হবে।

কোনও সাপোর্ট নেই SQLite API

Room 3.0 সম্পূর্ণরূপে SQLiteDriver API দ্বারা সমর্থিত এবং এটি আর SupportSQLite প্রকার যেমন SupportSQLiteDatabase বা Android প্রকার যেমন Cursor উল্লেখ করে না। SupportSQLiteOpenHelper পেতে SupportSQLiteDatabase মিরর করা RoomDatabase API গুলি সরানোর পর থেকে এটি Room 3.0 এবং 2.x এর মধ্যে সবচেয়ে উল্লেখযোগ্য পরিবর্তন। এখন একটি RoomDatabase তৈরি করতে একটি SQLiteDriver প্রয়োজন

উদাহরণস্বরূপ, সরাসরি ডাটাবেস অপারেশনের জন্য API গুলি ড্রাইভার সমতুল্য দ্বারা প্রতিস্থাপিত হয়:

// Room 2.x
roomDatabase.runInTransaction { ... }

// Room 3.x
roomDatabase.withWriteTransaction { ... }
// Room 2.x
roomDatabase.query("SELECT * FROM Song").use { cursor -> ... }

// Room 3.x
roomDatabase.useReaderConnection { connection ->
  connection.usePrepared("SELECT * FROM Song") { stmt -> ... }
}

যেসব কলব্যাক API-তে আর্গুমেন্ট হিসেবে SupportSQLiteDatabase ছিল, সেগুলোকে তাদের সমতুল্য API দ্বারা প্রতিস্থাপিত করা হয়েছে যার আর্গুমেন্ট হিসেবে SQLiteConnection আছে। এগুলো হল মাইগ্রেশন কলব্যাক ফাংশন যেমন Migration.onMigrate() এবং AutoMigrationSpec.onPostMigrate() এবং RoomDatabase.Callback.onCreate() , RoomDatabase.Callback.onOpen() ইত্যাদি ডাটাবেস কলব্যাক।

যদি KMP প্রকল্পে Room ব্যবহার করা হয়, তাহলে 3.0-এ মাইগ্রেট করা সহজ কারণ এতে বেশিরভাগ ক্ষেত্রে আমদানি রেফারেন্স আপডেট করতে হয়, অন্যথায় Android-এর Room থেকে KMP-তে একই মাইগ্রেশন কৌশল প্রযোজ্য হবে, Room KMP মাইগ্রেশন গাইড দেখুন।

সাপোর্ট এসকিউএলাইট র‍্যাপার

Room 3.x 2.x-এ তৈরি SupportSQLite র‍্যাপার সংরক্ষণ করে, যাতে মাইগ্রেশন সহজ হয় এবং এখন এটি একটি নতুন আর্টিফ্যাক্ট androidx.room3:room3-sqlite-wrapper এ অবস্থিত। সামঞ্জস্য API আপনাকে একটি RoomDatabase SupportSQLiteDatabase এ রূপান্তর করতে দেয়। roomDatabase.openHelper.writableDatabase এর আমন্ত্রণ roomDatabase.getSupportWrapper() দ্বারা প্রতিস্থাপিত হতে পারে।

কোটলিন এবং কোরোটিনস প্রথমে

লাইব্রেরিটিকে আরও উন্নত করার জন্য, রুম 3.0 শুধুমাত্র কোটলিন কোড তৈরি করে এবং এটি শুধুমাত্র একটি কোটলিন সিম্বল প্রসেসর (KSP)। রুম 2.x এর তুলনায় কোনও জাভা কোড তৈরি হয় না এবং KAPT বা JavaAP এর মাধ্যমে অ্যানোটেশন প্রসেসরের কনফিগারেশন রুম 3.0 এ আর সম্ভব নয়। মনে রাখবেন যে KSP জাভা সোর্স প্রক্রিয়া করতে সক্ষম এবং রুম কম্পাইলার ডাটাবেস, সত্তা বা DAO গুলির জন্য কোড তৈরি করবে যাদের সোর্স ঘোষণা জাভাতে। একটি মাল্টি-মডিউল প্রকল্প থাকা বাঞ্ছনীয় যেখানে রুম ব্যবহার কেন্দ্রীভূত হয় এবং কোটলিন গ্র্যাডেল প্লাগইন এবং KSP কোডবেসের বাকি অংশকে প্রভাবিত না করেই প্রয়োগ করা যেতে পারে।

রুম ৩.০-তেও কোরোটিন ব্যবহার করা প্রয়োজন, এবং আরও স্পষ্টভাবে বলতে গেলে, DAO ফাংশনগুলিকে সাসপেন্ডিং করতে হবে যদি না তারা একটি প্রতিক্রিয়াশীল টাইপ, যেমন Flow বা একটি কাস্টম DAO রিটার্ন টাইপ ফেরত দেয়। ডাটাবেস অপারেশন সম্পাদনের জন্য রুম APIগুলিও সাসপেন্ড ফাংশন, যেমন RoomDatabase.useReaderConnection এবং RoomDatabase.useWriterConnection

Room 2.x এর বিপরীতে, Executor দিয়ে RoomDatabase কনফিগার করা আর সম্ভব নয়, পরিবর্তে ডাটাবেসের নির্মাতার মাধ্যমে একটি CoroutineContext এবং একটি dispatcher প্রদান করা যেতে পারে।

Room 3.0-এ InvalidationTracker API গুলি Flow ভিত্তিক, InvalidationTracker.Observer তার প্রাসঙ্গিক API গুলি addObserver এবং removeObserver সহ সরানো হয়। ডাটাবেস অপারেশনে প্রতিক্রিয়া জানাতে Coroutine Flows ব্যবহার করা হয় যা InvalidationTrackercreateFlow() API এর মাধ্যমে তৈরি করা যেতে পারে।

ব্যবহারের উদাহরণ:

fun getArtistTours(from: Date, to: Date): Flow<Map<Artist, TourState>> {
    return db.invalidationTracker.createFlow("Artist").map { _ ->
        val artists = artistsDao.getAllArtists()
        val tours = tourService.fetchStates(artists.map { it.id })
        associateTours(artists, tours, from, to)
    }
}

ওয়েব সাপোর্ট

Room 3.0 রিলিজে KMP টার্গেট হিসেবে JavaScript এবং WasmJ যোগ করা হয়েছে। SQLiteDriver ইন্টারফেস ( androidx.sqlite:sqlite ) প্রকাশের সাথে মিলিত হয়ে, যা JavaScript এবং WasmJ গুলিকেও টার্গেট করে এবং নতুন androidx.sqlite:sqlite-web আর্টিফ্যাক্টে অবস্থিত একটি নতুন ড্রাইভার WebWorkerSQLiteDriver , সমস্ত প্রধান KMP প্ল্যাটফর্মকে টার্গেট করে এমন কমন কোডে Room ব্যবহার করা সম্ভব।

ওয়েব প্ল্যাটফর্মের অ্যাসিঙ্ক্রোনাস প্রকৃতির কারণে, যে Room API গুলি SQLiteStatement কে আর্গুমেন্ট হিসেবে গ্রহণ করেছিল তারা এখন সাসপেন্ড ফাংশন। এই ফাংশনগুলির উদাহরণ হল Migration.onMigrate() , RoomDatabase.Callback.onCreate() , PooledConnection.usePrepared() এবং অন্যান্য। ড্রাইভার API গুলিতে অ্যাসিঙ্ক্রোনাস API গুলি সমস্ত প্ল্যাটফর্মে সাধারণ এবং সিঙ্ক্রোনাস নন-ওয়েব টার্গেটের জন্য সাধারণ। অতএব, যে প্রকল্প ওয়েবকে টার্গেট করে না তারা সাধারণ কোডে সিঙ্ক্রোনাস API গুলি ( SQLiteDriver.open() , SQLiteConnection.prepare() এবং SQLiteStatement.step() ) ব্যবহার চালিয়ে যেতে পারে। ইতিমধ্যে, যে প্রকল্পটি কেবল ওয়েবকে টার্গেট করে, তাদের অবশ্যই অ্যাসিঙ্ক্রোনাস API গুলি ( SQLiteDriver.openAsync() , SQLiteConnection.prepareAsync() এবং SQLiteStatement.stepAsync() ) ব্যবহার করতে হবে।

সুবিধার জন্য androidx.sqlite প্যাকেজে উল্লেখিত API গুলির সিঙ্ক্রোনাস নামের সাথে suspend extension ফাংশনও যোগ করা হয়েছে ( SQLiteConnection.executeSQL যোগ করার সাথে), এই API গুলি তখনই সুপারিশ করা হয় যখন প্রকল্পটি ওয়েব এবং নন-ওয়েব উভয় প্ল্যাটফর্মকেই লক্ষ্য করে কারণ API গুলি হল expect/actual declarations যা প্ল্যাটফর্মের উপর ভিত্তি করে সঠিক ভেরিয়েন্ট কল করবে। এগুলি হল API গুলি Room এর রানটাইম ব্যবহার এবং সমস্ত সমর্থিত প্ল্যাটফর্মের জন্য সাধারণ কোডে ড্রাইভার ব্যবহার সক্ষম করে।

ব্যবহারের উদাহরণ:

import androidx.sqlite.executeSQL
import androidx.sqlite.step

roomDatabase.useWriterConnection { connection ->
    val deletedSongs = connection.usePrepared(
        "SELECT count(*) FROM Song"
    ) { stmt ->
        stmt.step()
        stmt.getLong(0)
    }
    connection.executeSQL("DELETE FROM Song")
    deletedSongs
}

WebWorkerSQLiteDriver হল একটি SQLiteDriver এর একটি বাস্তবায়ন যা মূল থ্রেড থেকে ডাটাবেস অপারেশন সম্পাদনের জন্য একটি ওয়েব ওয়ার্কারের সাথে যোগাযোগ করে এবং অরিজিন প্রাইভেট ফাইল সিস্টেম (OPFS) এ ডাটাবেস সংরক্ষণ করতে সক্ষম করে। ড্রাইভারটি চালু করার জন্য একটি সাধারণ যোগাযোগ প্রোটোকল প্রয়োগকারী কর্মীর প্রয়োজন, প্রোটোকলটি WebWorkerSQLiteDriver KDoc এ বর্ণনা করা হয়েছে।

বর্তমানে WebWorkerSQLiteDriver কোনও ডিফল্ট কর্মীর সাথে পাঠানো হয় না যা যোগাযোগ প্রোটোকল বাস্তবায়ন করে, তবে উদাহরণস্বরূপ, androidx কোডবেসে একটি কর্মী বাস্তবায়ন রয়েছে যা আপনার প্রকল্পে ব্যবহার করা যেতে পারে। এটি SQLite এর WASM ব্যবহার করে এবং OPFS-এ ডাটাবেস সংরক্ষণ করে। উদাহরণ কর্মীটি স্থানীয় NPM প্যাকেজ হিসাবে প্রকাশিত হয় এবং NPM নির্ভরতার জন্য Kotlin-এর সমর্থনের জন্য ধন্যবাদ, কর্মীদের পরিষেবা দেওয়ার জন্য একটি ছোট KMP মডিউল তৈরি করা যেতে পারে।

রুমের জন্য স্থানীয় ওয়েব কর্মীর ব্যবহার প্রদর্শন করে নিম্নলিখিত GitHub প্রকল্পটি দেখুন।

একবার প্রকল্পে একজন কর্মী সেট আপ হয়ে গেলে, ওয়েবের জন্য রুম কনফিগার করা অন্যান্য প্ল্যাটফর্মের মতোই:

fun createDatabase(): MusicDatabase {
    return Room.databaseBuilder<MusicDatabase>("music.db")
        .setDriver(WebWorkerSQLiteDriver(createWorker()))
        .build()
}

fun createWorker() =
    Worker(js("""new URL("sqlite-web-worker/worker.js", import.meta.url)"""))

ওয়েব ড্রাইভারের ভবিষ্যতের সংস্করণে NPM-এ প্রকাশিত একটি ডিফল্ট কর্মী থাকতে পারে, যা ওয়েব সেটআপকে আরও সহজ করে তুলবে।

কাস্টম DAO রিটার্নের ধরণ

RxJava এবং Paging এর মতো বিভিন্ন DAO রিটার্ন টাইপ ইন্টিগ্রেশনগুলিকে Room 3.0-এ DAO রিটার্ন টাইপ কনভার্টার নামে একটি নতুন API ব্যবহার করার জন্য রূপান্তরিত করা হয়েছে। একটি DAO রিটার্ন টাইপ কনভার্টার ফাংশন ( @DaoReturnTypeConverter ) একটি DAO ফাংশনের ফলাফলকে টীকাযুক্ত ফাংশন দ্বারা সংজ্ঞায়িত একটি কাস্টম টাইপে রূপান্তর করতে সক্ষম করে। এই ফাংশনগুলি রুমের জেনারেটেড কোডে অংশগ্রহণ করতে সক্ষম করে যা কোয়েরি ফলাফলকে ডেটা অবজেক্টে রূপান্তর করে। DAO রিটার্ন টাইপ কনভার্টার ধারণকারী ক্লাসগুলিকে @Database বা @Dao ঘোষণায় @DaoReturnTypeConverters অ্যানোটেশনের মাধ্যমে নিবন্ধিত করতে হবে।

উদাহরণস্বরূপ, একটি DAO কোয়েরি থেকে PagingSource ফেরত পেতে, androidx.room3:room3-paging এ অবস্থিত কনভার্টার ক্লাসটি এখন নিবন্ধিত হতে হবে:

@Dao
@DaoReturnTypeConverters(PagingSourceDaoReturnTypeConverter::class)
interface MusicDao {
    @Query("SELECT * FROM Song)
    fun getSongsPaginated(): PagingSource<Int, Song>
}

বিদ্যমান ইন্টিগ্রেশনগুলিকে DAO রিটার্ন টাইপ কনভার্টারে স্থানান্তরিত করা হয়েছে:

রিটার্ন টাইপ কনভার্টার ক্লাস শিল্পকর্ম
পেজিংসোর্স পেজিংসোর্সডাওরিটার্নটাইপকনভার্টার androidx.room3:room3-পেজিং
পর্যবেক্ষণযোগ্য, প্রবাহযোগ্য, সম্পূর্ণ, একক, সম্ভবত RxDaoReturnTypeConverters সম্পর্কে androidx.room3:room3-rxjava3
লিসেনেবল ফিউচার গুয়াভাডাওরিটার্নটাইপকনভার্টার androidx.room3:room3-পেয়ারা
লাইভডেটা লাইভডেটাডাওরিটার্নটাইপকনভার্টার androidx.room3:room3-লাইভডেটা

কলাম টাইপ কনভার্টারের মতো, DAO রিটার্ন টাইপ কনভার্টরগুলিকে অ্যাপ্লিকেশন দ্বারা সংজ্ঞায়িত করা যেতে পারে। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন kotlin.js.Promise ওয়েব টাইপের জন্য @DaoReturnTypeConverter ঘোষণা করতে পারে।

object PromiseDaoReturnTypeConverter {
    @DaoReturnTypeConverter([OperationType.READ, OperationType.WRITE])
    fun <T> convert(
        db: RoomDatabase,
        executeAndConvert: suspend () -> T
    ): Promise<T> {
        return db.getCoroutineScope().promise { executeAndConvert() }
    }
}

উপরের কনভার্টারটি DAO কোয়েরি ফাংশনগুলিকে Promise ফেরত দেওয়ার অনুমতি দেয়:

@Dao
@DaoReturnTypeConverters(PromiseDaoReturnTypeConverter::class)
interface MusicDao {
    @Query("SELECT * FROM Song")
    fun getAllSongs(): Promise<List<Song>>
}

@DaoReturnTypeConverter ফাংশনের প্যারামিটারের পরিমাণ এবং প্রকারভেদ সম্পর্কে কিছু প্রয়োজনীয়তা রয়েছে। সম্ভাব্য প্যারামিটারগুলি হল:

  • db: RoomDatabase : (ঐচ্ছিক) RoomDatabase ইনস্ট্যান্সে অ্যাক্সেস প্রদান করে, যা অতিরিক্ত ডাটাবেস অপারেশন সম্পাদন বা কোরোটিন স্কোপ অ্যাক্সেস করার জন্য কার্যকর হতে পারে।
  • tableNames: Array<String> : (ঐচ্ছিক) কোয়েরির অ্যাক্সেস করা টেবিলগুলি ধারণ করে, যা Room এর InvalidationTracker.createFlow() API এর সাথে মিলিত হলে পর্যবেক্ষণযোগ্য / প্রতিক্রিয়াশীল প্রকারগুলিকে সমর্থন করার জন্য কার্যকর।
  • rawQuery: RoomRawQuery : (ঐচ্ছিক) রানটাইমে কোয়েরির একটি উদাহরণ ধারণ করে, যা PagingSourceDaoReturnTypeConverter দ্বারা বাস্তবায়িত LIMIT / OFFSET কৌশলের মতো রূপান্তরগুলিকে সক্ষম করে।
  • executeAndConvert: suspend () -> T : (প্রয়োজনীয়) রুম জেনারেটেড ফাংশন যা কোয়েরিটি এক্সিকিউট করবে এবং এর ফলাফলকে ডেটা অবজেক্টে পার্স করবে।

DAO রিটার্ন টাইপ কনভার্টার তৈরির প্রয়োজনীয়তা সম্পর্কে আরও তথ্যের জন্য, @DaoReturnTypeConverter API-তে KDoc দেখুন।