private static SymbolDatabaseAdapter findReadOnlyAdapter(DBHandle handle, AddressMap addrMap)
			throws VersionException {

		try {
			return new SymbolDatabaseAdapterV3(handle, addrMap.getOldAddressMap());
		}
		catch (VersionException e) {
			// failed try older version
		}

		try {
			return new SymbolDatabaseAdapterV2(handle, addrMap.getOldAddressMap());
		}
		catch (VersionException e) {
			// failed try older version
		}

		try {
			return new SymbolDatabaseAdapterV1(handle, addrMap.getOldAddressMap());
		}
		catch (VersionException e) {
			// failed try older version
		}

		try {
			return new SymbolDatabaseAdapterV0(handle, addrMap.getOldAddressMap());
		}
		catch (VersionException e) {
			// failed - can't handle whatever version this is trying to open
		}

		throw new VersionException(false);
	}
Gets a new SymbolDatabaseAdapter
@param dbHandle the database handle
@param openMode the open mode
@param addrMap the address map
@param monitor the progress monitor
@return a new SymbolDatabaseAdapter
@throws VersionException if the database table does not match the adapter
@throws CancelledException if the user cancels an upgrade
@throws IOException if a database io error occurs
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapter.java