private VersionException initializeProgramInfo(OpenMode openMode)
			throws IOException, VersionException, LanguageNotFoundException {
		boolean requiresUpgrade = false;

		dataMap = new DBStringMapAdapter(dbh, DATA_MAP_TABLE_NAME, false);
		name = dataMap.get(PROGRAM_NAME);

		String languageIdStr = dataMap.get(LANGUAGE_ID);
		if (languageIdStr == null) { // must be in old style combined language/compiler spec format
			String oldLanguageName = dataMap.get(OLD_LANGUAGE_NAME);
			LanguageCompilerSpecPair languageCompilerSpecPair =
				OldLanguageMappingService.lookupMagicString(oldLanguageName, false);
			if (languageCompilerSpecPair == null) {
				throw new LanguageNotFoundException(oldLanguageName);
			}
			languageID = languageCompilerSpecPair.languageID;
			compilerSpecID = languageCompilerSpecPair.compilerSpecID;
			if (openMode != OpenMode.UPGRADE) {
				requiresUpgrade = true;
			}
			else {
				dataMap.put(LANGUAGE_ID, languageID.getIdAsString());
				dataMap.put(COMPILER_SPEC_ID, compilerSpecID.getIdAsString());
			}
		}
		else {
			languageID = new LanguageID(languageIdStr);
			compilerSpecID = new CompilerSpecID(dataMap.get(COMPILER_SPEC_ID));
		}

		languageVersion = 1;
		languageMinorVersion = 0;

		String languageVersionStr = dataMap.get(LANGUAGE_VERSION);
		if (languageVersionStr != null) {
			try {
				String[] vs = languageVersionStr.split("\\.");
				languageVersion = Integer.parseInt(vs[0]);
				languageMinorVersion = Integer.parseInt(vs[1]);
			}
			catch (Exception e) {
				// Ignore
			}
		}

		int storedVersion = getStoredVersion();
		if (storedVersion > DB_VERSION) {
			throw new VersionException(VersionException.NEWER_VERSION, false);
		}
		if (openMode != OpenMode.UPGRADE && storedVersion < UPGRADE_REQUIRED_BEFORE_VERSION) {
			requiresUpgrade = true;
		}
		if (openMode == OpenMode.UPDATE && storedVersion < DB_VERSION) {
			requiresUpgrade = true;
		}
		return requiresUpgrade ? new VersionException(true) : null;
	}
Initialize the following fields from the database and check the database version for an existing database:
<ul>
<li>name</li>
<li>languageName</li>
<li>languageVersion</li>
<li>LanguageMinorVersion</li>
</ul>
@param openMode program open mode
@return version exception if the current version is out of date and can be upgraded
@throws IOException if there is an exception at the database level
@throws VersionException if the data is newer than this version of Ghidra and can not be
upgraded or opened.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java