Что такое UDF

«Что такое UDF» — вопрос из категории Архитектура, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

User Defined Function (UDF) — это пользовательская функция, которую можно создать в SQL-запросе для выполнения специфических операций, не предусмотренных стандартными функциями. В Android UDF часто используются в Room для расширения возможностей SQLite.

Пример с Room:

@Dao
interface UserDao {
    @Query("SELECT * FROM users WHERE isActive = :isActive")
    fun getActiveUsers(isActive: Boolean = true): List<User>

    @Query("SELECT calculateDiscount(price) FROM products") // UDF
    fun getDiscountedPrices(): List<Double>
}

Для регистрации UDF в Room:

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao

    companion object {
        fun build(context: Context): AppDatabase {
            return Room.databaseBuilder(...)
                .addCallback(object : Callback() {
                    override fun onCreate(db: SupportSQLiteDatabase) {
                        db.execSQL("CREATE FUNCTION calculateDiscount(price REAL) RETURNS REAL BEGIN RETURN price * 0.9; END;")
                    }
                })
                .build()
        }
    }
}