Room2.1 DatabaseView͋Δ͋Δ͋Δ͋ΔLTʙ ͓ਖ਼݄ͩΑʂAndroid & iOS߹ಉ େLTେձ ʙ Vol.10
View Slide
ࣗݾհ• Koji Wakamiya• Studyplus, inc.• @koji-1009 (Github)• @D_R_1009 (Twitter, Hatena, etc…)
DatabaseView ͬͯ·͔͢ʁ
DatabaseViewʹ͍ͭͯʢ͓͞Β͍ʣ• Room 2.1ͰՃ͞Εͨػೳ• Inner/Outer joinΛRoomͰ࣮ݱ• ςʔϒϧΛ͋Δ͖ܗʹׂ͠දࣔ(View)ʹ߹ΘͤͯσʔλΛ߹͢Δ͜ͱ͕Ͱ͖Δ
ෳͷςʔϒϧͱForeignKey• ؔ࿈ͷ͋ΔෳͷςʔϒϧΛѻ͏͜ͱʹͳΔͨΊForeignKeyΛར༻͢Δ͜ͱ͕͋Δ• ؔ࿈͚Λߦ͏͜ͱͰɺத৺ͱͳΔrowΛআͨ࣌͠ʹଞͷςʔϒϧͷrowআ͢ΔͳͲͷߟྀΛߦ͏
OnConflictStrategy.REPLACEͰσʔλ͕ফ͑ͪΌ͏ࣄ݅
OnConflictStrategy• InsetॲཧதʹConflict͕ൃੜ(row͕طʹଘࡏ)ͨ࣌͠ͲͷΑ͏ͳѻ͍Λ͢Δ͔ΛܾΊΔ͜ͱ͕Ͱ͖Δ• DBͷར༻༻్తʹ߹Θͤͯར༻͢ΔStrategy͕มΘΔ
OnConflictStrategy• ABORT (default)• OnConflict strategy constant to abort the transaction.• REPLACE• OnConflict strategy constant to replace the old data and continue thetransaction.• Ignore• OnConflict strategy constant to ignore the conflict.
ࣄ݅ঢ়گ• ΞΠςϜςʔϒϧͱΞΠςϜฒͼॱςʔϒϧ͕ଘࡏ• ΞΠςϜΞϓϦىಈ࣌ʹαʔόʔͱಉظ• @InsertͱOnConflictStrategy.REPLACEͰશσʔλߋ৽• ฒͼॱͷσʔλΞϓϦʹ͔͠ଘࡏ͠ͳ͍ͨΊอ࣋
ࣄ݅ঢ়گ• αʔόʔͱΞϓϦDBΛಉظ(ϦϑϨογϡ)͢ΔͱΞΠςϜϦετ͕දࣔ͞Εͳ͘ͳΔ• ௐͯΈΔͱʮΞΠςϜʯͷσʔλ͋Δ͕ʮΞΠςϜฒͼॱʯ͕ଘࡏ͠ͳ͘ͳ͍ͬͯΔ• Inner JoinͷͨΊDatabaseView͕ੜ͞Ε͍ͯͳ͍……ʁ
Ͳ͏ͯ͠σʔλফ͑ͪΌ͏Μ……
REPLACEʹΑΔUpdateॲཧ• REPLACE࣮࣭తʹUpdateॲཧʢͩͱࢥ͍ͬͯͨʣ• Conflictൃੜ͠ͳ͍ → ৽نrow࡞ॲཧ• Conflictൃੜ͢Δ → طଘrowߋ৽ॲཧ
REPLACEʹΑΔUpdateॲཧ• REPLACE࣮࣭తʹUpdateॲཧʢͰͳ͍ʣ• Conflictൃੜ͠ͳ͍ → ৽نrow࡞ॲཧ• Conflictൃੜ͢Δ → طଘrowߋ৽ॲཧطଘrowআॲཧ + ৽نrowՃॲཧ
REPLACEʹΑΔUpdateॲཧ• طଘrowͷআ + ForeignKeyʹΑΔؔ࿈͚ʹΑΓʮΞΠςϜʯͷআͰʮΞΠςϜฒͼॱʯ͕আ͞Ε͍ͯͨ• @InsertͰͳ͘@UpdateΛར༻͠ͳ͚ΕͳΒͳ͔ͬͨ• Ճͱߋ৽ॲཧΛϝιουͰΓ͚Δ͜ͱͰ͜ͱͳ͖ΛಘΔ͜ͱ͕Ͱ͖ͨ
υΩϡϝϯτͪΌΜͱಡΉʢ͋ͱɺԣண͠ͳ͍ʣ
Thanks!