ANDROID_LIVE Telegram 536
​​Room и опциональные параметры
#room

Есть достаточно интересная фича Room о которой не написано в документации, но которая может здорово облегчить жизнь разработчикам.
Думаю, причина заключается в том, что эта функция лишь косвенно связана с Room, а больше связана с написанием SQL-запросов. 🙂

Опытным путём получилось её найти, и спешу поделиться этим лайфхаком с вами.

Допустим, у вас в приложении есть список людей. При этом по умолчанию выводится полный список, но пользователь приложения может выбрать параметр с именем человека, и вам надо отфильтровать список по этому параметру.
В Kotlin у нас есть возможность использовать опциональные параметры для функции, и первое решение, которое приходит в голову — это написать запрос, используя их:

@Query("SELECT * FROM User WHERE name = :name")
fun getUsers(name: String? = null): List<User>

При такой записи параметр считается за часть запроса, и не передаёт name, в этом случае список будет пустым.
Но можно чуть-чуть поменять запрос, и всё работает корректно:

@Query("SELECT * FROM User WHERE (:name IS NULL OR name = :name)")
fun getUsers(name: String? = null): List<User>

При такой записи параметр name будет игнорироваться, если он будет null, и возвратится весь список, имеющийся в базе данных.
Особенно круто эта фича заходит, если фильтр состоит из нескольких полей (3 и более).

А какие у вас есть неочевидные кейсы при работе с Room?



tgoop.com/android_live/536
Create:
Last Update:

​​Room и опциональные параметры
#room

Есть достаточно интересная фича Room о которой не написано в документации, но которая может здорово облегчить жизнь разработчикам.
Думаю, причина заключается в том, что эта функция лишь косвенно связана с Room, а больше связана с написанием SQL-запросов. 🙂

Опытным путём получилось её найти, и спешу поделиться этим лайфхаком с вами.

Допустим, у вас в приложении есть список людей. При этом по умолчанию выводится полный список, но пользователь приложения может выбрать параметр с именем человека, и вам надо отфильтровать список по этому параметру.
В Kotlin у нас есть возможность использовать опциональные параметры для функции, и первое решение, которое приходит в голову — это написать запрос, используя их:

@Query("SELECT * FROM User WHERE name = :name")
fun getUsers(name: String? = null): List<User>

При такой записи параметр считается за часть запроса, и не передаёт name, в этом случае список будет пустым.
Но можно чуть-чуть поменять запрос, и всё работает корректно:

@Query("SELECT * FROM User WHERE (:name IS NULL OR name = :name)")
fun getUsers(name: String? = null): List<User>

При такой записи параметр name будет игнорироваться, если он будет null, и возвратится весь список, имеющийся в базе данных.
Особенно круто эта фича заходит, если фильтр состоит из нескольких полей (3 и более).

А какие у вас есть неочевидные кейсы при работе с Room?

BY Android Live 🤖




Share with your friend now:
tgoop.com/android_live/536

View MORE
Open in Telegram


Telegram News

Date: |

According to media reports, the privacy watchdog was considering “blacklisting” some online platforms that have repeatedly posted doxxing information, with sources saying most messages were shared on Telegram. 4How to customize a Telegram channel? Image: Telegram. Ng, who had pleaded not guilty to all charges, had been detained for more than 20 months. His channel was said to have contained around 120 messages and photos that incited others to vandalise pro-government shops and commit criminal damage targeting police stations. Telegram channels enable users to broadcast messages to multiple users simultaneously. Like on social media, users need to subscribe to your channel to get access to your content published by one or more administrators.
from us


Telegram Android Live 🤖
FROM American