Beispiel #1
0
 /// <summary>
 ///     指定したインスタンスの内容を自身にコピーする。
 /// </summary>
 /// <param name="record">コピー元インスタンス。</param>
 public void UpdateFrom(ScoreDBRecord record)
 {
     this.ScorePath             = record.ScorePath;
     this.Title                 = record.Title;
     this.LastWriteTime         = record.LastWriteTime;
     this.Level                 = record.Level;
     this.MinBPM                = record.MinBPM;
     this.MaxBPM                = record.MaxBPM;
     this.TotalNotes_LeftCymbal = record.TotalNotes_LeftCymbal;
     this.TotalNotes_HiHat      = record.TotalNotes_HiHat;
     this.TotalNotes_LeftPedal  = record.TotalNotes_LeftPedal;
     this.TotalNotes_Snare      = record.TotalNotes_Snare;
     this.TotalNotes_Bass       = record.TotalNotes_Bass;
     this.TotalNotes_HighTom    = record.TotalNotes_HighTom;
     this.TotalNotes_LowTom     = record.TotalNotes_LowTom;
     this.TotalNotes_FloorTom   = record.TotalNotes_FloorTom;
     this.PreImage              = record.PreImage;
     this.Artist                = record.Artist;
     this.PreSound              = record.PreSound;
     this.BGMAdjust             = record.BGMAdjust;
 }
Beispiel #2
0
        public static void 最新版にバージョンアップする()
        {
            using var _ = new LogBlock(Log.現在のメソッド名);

            using var db = new ScoreDB();
            int version = (int)db.UserVersion;

            // v007 から、SognDB.sqlite3 が ScoreDB.sqlire3 に改名された。
            var songdbPath = new VariablePath(@"$(AppData)\SongDB.sqlite3");

            using var songdb = File.Exists(songdbPath.数なしパス) ? new SQLiteDB(songdbPath.数なしパス) : null; // なければ null
            int songdb_version = (int)(songdb?.UserVersion ?? -1);                                    // なければ負数

            while (version < ScoreDBRecord.VERSION)
            {
                switch (version)
                {
                case 0:
                {
                    #region " 0 → 最新版 "
                    //----------------
                    // ScoreDB.sqlite3 に最新版のテーブルを新規に作成する。
                    foreach (var query in new[] {
                            "PRAGMA foreign_keys = OFF",
                            ScoreDBRecord.GetCreateTableSQL(),
                            "PRAGMA foreign_keys = ON",
                        })
                    {
                        using var cmd = new SqliteCommand(query, db.Connection);
                        cmd.ExecuteNonQuery();
                    }

                    if (songdb is null)         // SongDB.sqlite3 がある?
                    {
                        version        = ScoreDBRecord.VERSION;
                        db.UserVersion = version;
                        break;
                    }

                    //  SongDB.sqlite3 が存在するので、データ移行する。
                    switch (songdb_version)
                    {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                        // 何もしない。1~5 については、REAL 型の数値がすでにずれているため、データ移行しない。
                        break;

                    case 6:
                        #region " 6 → 最新版 "
                        //----------------
                    {
                        // ScoreDB 側に、最新バージョンのテーブルを作成する。

                        foreach (var query in new[] {
                                    "PRAGMA foreign_keys = OFF",
                                    ScoreDBRecord.GetCreateTableSQL(),
                                })
                        {
                            using var cmd = new SqliteCommand(query, db.Connection);
                            cmd.ExecuteNonQuery();
                        }

                        // v006 のレコードを読み込み、v007 テーブルに出力する。DBが違うので注意。

                        using (var cmdv007Begin = new SqliteCommand("BEGIN", db.Connection))
                            cmdv007Begin.ExecuteNonQuery();

                        using var cmdv006query = new SqliteCommand("SELECT * FROM Songs", songdb.Connection);
                        var v006result = cmdv006query.ExecuteReader();
                        while (v006result.Read())
                        {
                            var v006rc = new old.SongDBRecord.v006_SongDBRecord(v006result);
                            var v007rc = new ScoreDBRecord()
                            {
                                ScorePath = v006rc.Path,
                                // 以下変更なし。
                                Title                  = v006rc.Title,
                                LastWriteTime          = v006rc.LastWriteTime,
                                Level                  = v006rc.Level,
                                MinBPM                 = v006rc.MinBPM,
                                MaxBPM                 = v006rc.MaxBPM,
                                TotalNotes_LeftCymbal  = v006rc.TotalNotes_LeftCymbal,
                                TotalNotes_HiHat       = v006rc.TotalNotes_HiHat,
                                TotalNotes_LeftPedal   = v006rc.TotalNotes_LeftPedal,
                                TotalNotes_Snare       = v006rc.TotalNotes_Snare,
                                TotalNotes_Bass        = v006rc.TotalNotes_Bass,
                                TotalNotes_HighTom     = v006rc.TotalNotes_HighTom,
                                TotalNotes_LowTom      = v006rc.TotalNotes_LowTom,
                                TotalNotes_FloorTom    = v006rc.TotalNotes_FloorTom,
                                TotalNotes_RightCymbal = v006rc.TotalNotes_RightCymbal,
                                PreImage               = v006rc.PreImage,
                                Artist                 = v006rc.Artist,
                                PreSound               = v006rc.PreSound,
                                BGMAdjust              = v006rc.BGMAdjust,
                            };
                            v007rc.ReplaceTo(db);
                        }

                        using (var cmdv007End = new SqliteCommand("END", db.Connection))
                            cmdv007End.ExecuteNonQuery();

                        using (var cmdKeysOn = new SqliteCommand("PRAGMA foreign_keys = ON", db.Connection))
                            cmdKeysOn.ExecuteNonQuery();

                        version        = ScoreDBRecord.VERSION;
                        db.UserVersion = version;
                        Log.Info($"ScoreDB をバージョン {version} に更新しました。");
                    }
                        //----------------
                        #endregion
                        break;
                    }

                    break;
                    //----------------
                    #endregion
                }

                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                {
                    #region " 1~5 → 6(BreakingChange)"
                    //----------------
                    // テーブルを作り直す。REAL値が既にずれてるので、データ移行はしない。
                    foreach (var query in new[] {
                            "PRAGMA foreign_keys = OFF",
                            "DROP TABLE Songs",
                            $"CREATE TABLE Songs {old.SongDBRecord.v006_SongDBRecord.ColumnList}",
                            "PRAGMA foreign_keys = ON",
                        })
                    {
                        using var cmd = new SqliteCommand(query, db.Connection);
                        cmd.ExecuteNonQuery();
                    }
                    version        = old.SongDBRecord.v006_SongDBRecord.VERSION;
                    db.UserVersion = version;
                    Log.Info($"SongDB をバージョン {version} に更新しました。");
                    break;
                    //----------------
                    #endregion
                }
                }
            }
        }