Détection oublié transaction SQLite sur Android en utilisant StrictMode?
-
09-10-2019 - |
Question
Exécuter plusieurs instructions SQL sans les mettre dans une transaction est un goulot d'étranglement sévère (voir par exemple http: / /www.sqlite.org/faq.html#q19 ). Je ne l'ai pas soigneusement vérifié comment SQLite est configuré sur Android, mais je anecdotiquement perçu dramaturgique augmentation des performances dans mon application sur les transactions lors de l'utilisation dans plus d'endroits.
Est-il possible de détecter les cas où l'on oublie à des transactions d'utilisation à l'aide StrictMode? Dans le cas contraire, pourrait-il être pris en considération pour une version future de StrictMode? Il est peut-être un peu difficile à détecter, mais deux stratégies différentes pourrait être, 1) déclarations non sélectionnez transaction en dehors, ou 2) plusieurs déclarations non sélectionnez transaction en dehors exécutée dans un court laps de temps.
La solution
Ouais, ça sonne comme une bonne chose à attraper. Je ne pouvais imaginer une API comme:
StrictMode.catchWritesOutsideTransactionsOn(SQLiteDatabase db);
Nous avons d'envisager d'autres crochets SQLite dans StrictMode (la plupart du temps autour des indices manquants et sélectionne tel), mais cela est une bonne idée aussi!