You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- List<SongData> m = qr.query("SELECT * FROM song WHERE md5 IN (" + md5str.toString() + ") OR sha256 IN ("+ List<SongData> m = qr.query("SELECT * FROM song WHERE path IS NOT NULL AND (md5 IN (" + md5str.toString() + ") OR sha256 IN ("
以前Issueが立てられて解決済としてクローズされたこちらの問題についてです: #746
説明
上記のIssueは「持っていない譜面をFAVORITE登録すると不正なレコードが追加される」という不具合です。「不正なレコードが追加される」は修正されましたが、修正前に「持っていない譜面をFAVORITE登録する」という操作を行っていた場合、データベース (
songdata.db
のsong
テーブル) に残留した不正なレコードによって「難易度表のフォルダを開くとフリーズする」という問題が依然として発生します。これはSongBar
が行っている以下の重複除去処理がsha256
を持たないsongs
を想定していないためです:beatoraja/src/bms/player/beatoraja/select/bar/SongBar.java
Line 101 in 45c9ab2
修正案
安直に対応するのであれば、
SQLiteSongDatabaseAccessor::getSongDatas(String[] hashes)
&類似するメソッドの検索クエリにsha256 <> ''
かpath IS NOT NULL
を追加することで、取得するデータから不正なレコードを除外できます。beatoraja/src/bms/player/beatoraja/song/SQLiteSongDatabaseAccessor.java
Line 159 in 45c9ab2
ですが、取得される前に不正なレコード自体をDBから削除したほうがより安全だと思われます。方法としては「
SQLiteSongDatabaseAccessor
の初期化時にDELETE
クエリを走らせる」といったものを検討していますが、他に適切な方法があればご提案いただければ幸いです (できれば自動DBマイグレーションのように最新版で一度だけ実行すればよしとしたい) 。The text was updated successfully, but these errors were encountered: