static MemoryMapDBAdapter getAdapter(DBHandle handle, OpenMode openMode, MemoryMapDB memMap,
			TaskMonitor monitor) throws VersionException, IOException {

		if (openMode == OpenMode.CREATE) {
			return new MemoryMapDBAdapterV3(handle, memMap, Memory.GBYTE, true);
		}
		try {
			return new MemoryMapDBAdapterV3(handle, memMap, Memory.GBYTE, false);
		}
		catch (VersionException e) {
			if (!e.isUpgradable() || openMode == OpenMode.UPDATE) {
				throw e;
			}
			MemoryMapDBAdapter adapter = findReadOnlyAdapter(handle, memMap);
			if (openMode == OpenMode.UPGRADE) {
				adapter = upgrade(handle, adapter, memMap, monitor);
			}
			return adapter;
		}
	}
Subblock record long data2 usage:
<ul>
<li>{@link BufferSubMemoryBlock} - (not used) 0</li>
<li>{@link FileBytesSubMemoryBlock} - starting byte offset within file bytes buffer</li>
<li>{@link ByteMappedSubMemoryBlock} - encoded mapped source address</li>
<li>{@link BitMappedSubMemoryBlock} - encoded mapped source address</li>
<li>{@link UninitializedSubMemoryBlock} - (not used) 0</li>
</ul>
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapter.java