Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for queries with > 999 host parameters #428

Open
wants to merge 1 commit into
base: androidx-main
Choose a base branch
from

Conversation

mzgreen
Copy link
Contributor

@mzgreen mzgreen commented Jul 10, 2022

Proposed Changes

This change adds support for large SQLite queries. Large queries are queries with more than 999 host parameters.

Prior to this change, if someone created a query like:

@Query("DELETE * FROM user WHERE id IN (:ids)")
fun delete(ids: List<Int>)

and invoked this function passing a list larger than 999 items, the library would throw a SQLiteException.

The implementation details and codegen changes are documented in the design doc: https://docs.google.com/document/d/1tQPjWLmBS55Cu-1lxa3Nn-eUaOCT6HCnftsmOo_NEfo/edit?usp=sharing

Limitations

The solution supports everything except:

  • @RawQuery - it's not possible to support raw queries, because the implemented solution relies on query parsing which happens during compilation while raw queries are executed at runtime.
  • Cursor returning dao methods - The implemented solution uses temp tables which have to be closed as soon as the dao method finishes execution. Cursor is lazy, so the underlying query is executed when the Cursor is accessed for the first time at which point the temp table probably no longer exists.
  • Paging - it may be possible to support it, but I don't have enough experience with Paging to tell and the change got quite big already so I decided to skip this part for now.

Testing

Test: Added new large query unit tests tests and a benchmark test

Issues Fixed

Fixes: b/73634057

RelNote: Room now supports queries with more than 999 host parameters.

@mzgreen
Copy link
Contributor Author

mzgreen commented Jul 12, 2022

Not sure why FTL tests are failing on CI, connectedCheck and buildOnServer are passing for me locally.

@mzgreen
Copy link
Contributor Author

mzgreen commented Jul 14, 2022

Pinging @yigit @danysantiago @droid-wan-kenobi

@danysantiago danysantiago self-requested a review July 14, 2022 13:02
@danysantiago
Copy link
Member

Thanks for sending this, looks promising! I am a bit busy this week but will try to take a look as soon as I can.

@mzgreen
Copy link
Contributor Author

mzgreen commented Oct 18, 2022

Looks like Room is getting a huge Kotlin rewrite right now so it may not be the best time for such contribution?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants