diff --git a/Qwilight/System/DB.cs b/Qwilight/System/DB.cs index 53ef115..563a62c 100644 --- a/Qwilight/System/DB.cs +++ b/Qwilight/System/DB.cs @@ -80,15 +80,15 @@ Compatible.Compatible.DB(_fastDB); #endregion - HandleStatements(ta => + HandleStatements(t => { #region 데이터베이스 정보 Date date; - using (var dbStatement = NewDBStatement("PRAGMA user_version", ta)) + using (var dbStatement = NewDBStatement("PRAGMA user_version", t)) { date = (Date)dbStatement.ExecuteScalar(); } - using (var dbStatement = NewDBStatement($"PRAGMA user_version = {((long)LatestDBDate)}", ta)) + using (var dbStatement = NewDBStatement($"PRAGMA user_version = {((long)LatestDBDate)}", t)) { dbStatement.ExecuteNonQuery(); } @@ -156,11 +156,11 @@ Is_Paused INTEGER DEFAULT 0, Input_Flags INTEGER DEFAULT 0 ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("comment", ta)) + if (HasTable("comment", t)) { // Input_Favor_Labelled_Millis using (var dbStatement = NewDBStatement(""" @@ -168,11 +168,11 @@ INTO tmp_comment(Date, Event_Note_ID, Comment, Name, Multiplier, Auto_Mode, Note_Salt_Mode, Audio_Multiplier, Faint_Note_Mode, Judgment_Mode, Hit_Points_Mode, Note_Mobility_Mode, Long_Note_Mode, Input_Favor_Mode, Note_Modify_Mode, BPM_Mode, Wave_Mode, Set_Note_Mode, Lowest_Judgment_Condition_Mode, Stand, Band, Is_Band1, Point, Salt, Highest_Judgment_0, Higher_Judgment_0, High_Judgment_0, Low_Judgment_0, Lower_Judgment_0, Lowest_Judgment_0, Highest_Judgment_1, Higher_Judgment_1, High_Judgment_1, Low_Judgment_1, Lower_Judgment_1, Lowest_Judgment_1, Lowest_Long_Note_Modify, Highest_Long_Note_Modify, Set_Note_Put, Set_Note_Put_Millis, Highest_Hit_Points_0, Higher_Hit_Points_0, High_Hit_Points_0, Low_Hit_Points_0, Lower_Hit_Points_0, Lowest_Hit_Points_0, Highest_Hit_Points_1, Higher_Hit_Points_1, High_Hit_Points_1, Low_Hit_Points_1, Lower_Hit_Points_1, Lowest_Hit_Points_1, Note_ID, Is_Paused, Input_Flags) SELECT * FROM comment - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE comment", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE comment", t)) { dbStatement.ExecuteNonQuery(); } @@ -180,7 +180,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_comment RENAME TO comment - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -189,7 +189,7 @@ Note_ID, Event_Note_ID ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -205,22 +205,22 @@ Note_Position INTEGER, PRIMARY KEY (Entry_Path) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("entry", ta)) + if (HasTable("entry", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_entry SELECT * FROM entry - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE entry", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE entry", t)) { dbStatement.ExecuteNonQuery(); } @@ -228,7 +228,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_entry RENAME TO entry - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -243,22 +243,22 @@ Note_ID VARCHAR(139), Favorite_Entry TEXT ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("favorite_entry", ta)) + if (HasTable("favorite_entry", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_favorite_entry SELECT * FROM favorite_entry - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE favorite_entry", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE favorite_entry", t)) { dbStatement.ExecuteNonQuery(); } @@ -266,7 +266,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_favorite_entry RENAME TO favorite_entry - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -274,7 +274,7 @@ CREATE INDEX IF NOT EXISTS _favorite_entry ON favorite_entry ( Note_ID ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -290,22 +290,22 @@ Handled INTEGER, PRIMARY KEY (Note_ID) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("handled", ta)) + if (HasTable("handled", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_handled SELECT * FROM handled - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE handled", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE handled", t)) { dbStatement.ExecuteNonQuery(); } @@ -313,7 +313,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_handled RENAME TO handled - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -329,22 +329,22 @@ Event_Note_ID TEXT, Date DATE ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("date", ta)) + if (HasTable("date", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_date SELECT * FROM date - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE date", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE date", t)) { dbStatement.ExecuteNonQuery(); } @@ -352,7 +352,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_date RENAME TO date - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -361,7 +361,7 @@ Note_ID, Event_Note_ID ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -379,22 +379,22 @@ Media LONG DEFAULT 1, PRIMARY KEY (Note_ID) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("wait", ta)) + if (HasTable("wait", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_wait SELECT * FROM wait - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE wait", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE wait", t)) { dbStatement.ExecuteNonQuery(); } @@ -402,7 +402,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_wait RENAME TO wait - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -418,22 +418,22 @@ Format LONG DEFAULT -1, PRIMARY KEY (Note_ID) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("format", ta)) + if (HasTable("format", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_format SELECT * FROM format - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE format", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE format", t)) { dbStatement.ExecuteNonQuery(); } @@ -441,7 +441,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_format RENAME TO format - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -459,22 +459,22 @@ Variety INTEGER DEFAULT 0, PRIMARY KEY (Event_Note_ID, Variety) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("event_note", ta)) + if (HasTable("event_note", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_event_note SELECT * FROM event_note - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE event_note", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE event_note", t)) { dbStatement.ExecuteNonQuery(); } @@ -482,7 +482,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_event_note RENAME TO event_note - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -503,22 +503,22 @@ Genre TEXT, PRIMARY KEY (Note_ID) ) - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - if (HasTable("event_note_data", ta)) + if (HasTable("event_note_data", t)) { using (var dbStatement = NewDBStatement(""" INSERT INTO tmp_event_note_data SELECT * FROM event_note_data - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } - using (var dbStatement = NewDBStatement("DROP TABLE event_note_data", ta)) + using (var dbStatement = NewDBStatement("DROP TABLE event_note_data", t)) { dbStatement.ExecuteNonQuery(); } @@ -526,7 +526,7 @@ using (var dbStatement = NewDBStatement(""" ALTER TABLE tmp_event_note_data RENAME TO event_note_data - """, ta)) + """, t)) { dbStatement.ExecuteNonQuery(); } @@ -888,13 +888,13 @@ public void SetFavoriteEntry(BaseNoteFile noteFile) { - HandleStatements(ta => + HandleStatements(t => { using (var dbStatement = NewDBStatement(""" DELETE FROM favorite_entry WHERE Note_ID = @noteID - """, ta)) + """, t)) { dbStatement.Parameters.AddWithValue("noteID", noteFile.GetNoteID512()); dbStatement.ExecuteNonQuery(); @@ -905,7 +905,7 @@ REPLACE INTO favorite_entry VALUES(@noteID, @favoriteEntry) - """, ta)) + """, t)) { dbStatement.Parameters.AddWithValue("noteID", noteFile.GetNoteID512()); dbStatement.Parameters.AddWithValue("favoriteEntry", favoriteEntryItem.DefaultEntryPath); @@ -1103,16 +1103,37 @@ void HandleStatements(Action onHandle) { - using var ta = _fastDB.BeginTransaction(); try { - onHandle(ta); - ta.Commit(); + _dbCSX.EnterWriteLock(); + using var t = _fastDB.BeginTransaction(); + try + { + onHandle(t); + t.Commit(); + } + catch + { + t.Rollback(); + throw; + } } - catch + finally { - ta.Rollback(); - throw; + _dbCSX.ExitWriteLock(); + } + } + + void HandleCSX(Action onHandle) + { + try + { + _dbCSX.EnterReadLock(); + onHandle(); + } + finally + { + _dbCSX.ExitReadLock(); } }