コード例 #1
0
        private bool UpgradeDatabase(FileInfo path)
        {
            var previousStorageType = StorageType;

            try {
                StorageType = "SQLite";
                var oldFilename = path.FullName;
                var newFilename = Path.ChangeExtension(oldFilename, DatabaseSuffix);
                var newFile     = new DirectoryInfo(newFilename);

                if (!oldFilename.Equals(newFilename) && newFile.Exists)
                {
                    var msg = String.Format("Cannot move {0} to {1}, {2} already exists, returning false...",
                                            oldFilename, newFilename, newFilename);
                    Log.To.Upgrade.W(TAG, msg);
                    return(false);
                }

                var name = Path.GetFileNameWithoutExtension(Path.Combine(path.DirectoryName, newFilename));
                var db   = GetDatabase(name, false);
                if (db == null)
                {
                    Log.To.Upgrade.W(TAG, "Upgrade failed for {0} (Creating new DB failed), returning false...", path.Name);
                    return(false);
                }
                db.Dispose();

                var upgrader = Database.CreateUpgrader(db, oldFilename);
                try {
                    upgrader.Import();
                } catch (CouchbaseLiteException e) {
                    Log.To.Upgrade.W(TAG, "Upgrade failed for {0} (Status {1}), aborting...", path.Name, e.CBLStatus);
                    upgrader.Backout();
                    return(false);
                }

                Log.To.Upgrade.I(TAG, "...Success!");
                return(true);
            } finally {
                StorageType = previousStorageType;
            }
        }