private DBRecord convertV0Record(DBRecord record) {
		if (record == null) {
			return null;
		}
		if (record.getBooleanValue(V0_SYMBOL_IS_DYNAMIC_COL) ||
			record.getBooleanValue(V0_SYMBOL_LOCAL_COL)) {
			throw new AssertException("Unexpected Symbol");
		}
		DBRecord rec = SymbolDatabaseAdapter.SYMBOL_SCHEMA.createRecord(record.getKey());

		String symbolName = record.getString(V0_SYMBOL_NAME_COL);
		rec.setString(SymbolDatabaseAdapter.SYMBOL_NAME_COL, symbolName);
		long addressKey = record.getLongValue(V0_SYMBOL_ADDR_COL);
		rec.setLongValue(SymbolDatabaseAdapter.SYMBOL_ADDR_COL, addressKey);

		rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_TYPE_COL, SymbolType.LABEL.getID());

		long namespaceId = Namespace.GLOBAL_NAMESPACE_ID;
		rec.setLongValue(SymbolDatabaseAdapter.SYMBOL_PARENT_ID_COL, namespaceId);

		rec.setByteValue(SymbolDatabaseAdapter.SYMBOL_FLAGS_COL,
			(byte) SourceType.USER_DEFINED.ordinal());

		//
		// Convert sparse columns
		//

		Field hash = computeLocatorHash(symbolName, namespaceId, addressKey);
		rec.setField(SymbolDatabaseAdapter.SYMBOL_HASH_COL, hash);

		boolean isPrimary = record.getBooleanValue(V0_SYMBOL_PRIMARY_COL);
		if (isPrimary) {
			rec.setLongValue(SymbolDatabaseAdapter.SYMBOL_PRIMARY_COL, addressKey);
		}

		return rec;
	}
Stores local symbols information in a temporary database table because this version
is so old, we don't have enough information in the record to upgrade during the normal
upgrade time. So we store off the information and will complete this upgrade when
{@link SymbolManager#programReady(int, int, TaskMonitor)} is called

@param handle handle to temporary database
@param monitor the {@link TaskMonitor}
@return the next available database key after all the records are store
@throws IOException if a database I/O error occurs
@throws CancelledException if the user cancels the upgrade
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV0.java