@Override
	synchronized boolean setSymbolID(Reference ref, long symbolID) throws IOException {
		boolean hasSymbolID = symbolID >= 0;
		int opIndex = ref.getOperandIndex();
		Address changeAddr = isFrom ? ref.getToAddress() : ref.getFromAddress();
		LongField addrField = new LongField(addrMap.getKey(changeAddr, false));
		for (Field id : table.findRecords(addrField, ADDRESS_COL)) {
			DBRecord rec = table.getRecord(id);
			if (rec.getByteValue(OPINDEX_COL) == (byte) opIndex) {
				RefListFlagsV0 flags = new RefListFlagsV0(rec.getByteValue(FLAGS_COL));
				if (flags.hasSymbolID() == hasSymbolID &&
					symbolID == rec.getLongValue(SYMBOL_ID_COL)) {
					return false; // change not required
				}
				flags.setHasSymbolID(hasSymbolID);
				rec.setLongValue(SYMBOL_ID_COL, symbolID);
				table.putRecord(rec);
				return true;
			}
		}
		return false;
	}
Construct reference list for existing record
@param rec existing refList record
@param adapter entry record storage adapter
@param addrMap address map for encoding/decoding addresses
@param program associated Program
@param cache RefList object cache
@param isFrom true for from-adapter use, false for to-adapter use
@throws IOException if database IO error occurs
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/references/BigRefListV0.java