Ejemplo n.º 1
0
        private void UpgradeDatabase(FileInfo path)
        {
            var oldFilename = path.FullName;
            var newFilename = Path.ChangeExtension(oldFilename, DatabaseSuffix);
            var newFile     = new FileInfo(newFilename);

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

            var name = Path.GetFileNameWithoutExtension(Path.Combine(path.Directory.FullName, newFilename));
            var db   = GetDatabaseWithoutOpening(name, false);

            if (db == null)
            {
                Log.W(TAG, "Upgrade failed for {0} (Creating new DB failed)", path.Name);
                return;
            }
            db.Dispose();

            var upgrader = DatabaseUpgraderFactory.CreateUpgrader(db, oldFilename);
            var status   = upgrader.Import();

            if (status.IsError)
            {
                Log.W(TAG, "Upgrade failed for {0} (Status {1})", path.Name, status);
                upgrader.Backout();
                return;
            }

            Log.D(TAG, "...Success!");
        }
        private bool UpgradeDatabase(FileInfo path)
        {
            #if !NOSQLITE
            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", oldFilename, newFilename, newFilename);
                    Log.W(Database.TAG, msg);
                    return(false);
                }

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

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

                Log.D(TAG, "...Success!");
                return(true);
            } finally {
                StorageType = previousStorageType;
            }
            #endif
        }