public static boolean versionsAreCompatible(final SQLiteDatabase databaseToCheck, final int oldVersion, final int newVersion) {
        if (newVersion < oldVersion) {
            final Set<Integer> downgradeableVersions = DBDowngradeableVersions.load(databaseToCheck);
            for (int version = oldVersion; version > newVersion; version--) {
                if (!downgradeableVersions.contains(version)) {
                    return false;
                }
            }
        }
        return true;
    }
The following constant lists all DBVERSIONS whose changes with the previous version
are DOWNWARD-COMPATIBLE. More precisely: if a version x shows up in this list, then this
means that c:geo version written for DB version "x-1" can also work with this database.
<br>
As a rule-of-thumb, a db version is downward compatible if:
* it only adds columns which are nullable or provide default values (so previous c:geo-versions don't fail on insert/update)
* it only adds tables which don't necessarily need an entry (because previous c:geo-versions will not write anything in there)
* migration from "x-1" to x in {@link DbHelper#onUpgrade(SQLiteDatabase, int, int)} is programmed such that it can handle it if later
db is "upgraded" again from "x-1" to x (this is usually the case if adding tables/columns will not fail if object already exists in db)
<br>
The following changes usually make a DB change NOT downward compatible
* changing name, type or other attributes for a column
* adding columns which are not nullable
* any change which also requires some sort of data migration
* {@link DbHelper#onUpgrade(SQLiteDatabase, int, int)} will fail later if db is "upgraded" again from "x-1" to x
main/src/main/java/cgeo/geocaching/storage/DataStore.java