@Override
	DBRecord getSymbolRecord(Address address, String name, long namespaceId) throws IOException {
		long addressKey = addrMap.getKey(address, false);
		Field search = computeLocatorHash(name, namespaceId, addressKey);
		if (search == null) {
			return null;
		}
		RecordIterator it = symbolTable.indexIterator(SYMBOL_HASH_COL, search, search, true);
		it = new V3ConvertedRecordIterator(it);

		RecordIterator filtered =
			getNameNamespaceAddressFilterIterator(name, namespaceId, addressKey, it);
		if (filtered.hasNext()) {
			return filtered.next();
		}
		return null;
	}
SymbolDatabaseAdapter for version 3

This version provides for fast symbol lookup by namespace and name and introduced the use of 
sparse table columns for storing optional symbol data (hash, primary, datatype-ID, variable-offset).
It was created in June 2021 with ProgramDB version 24. 
It was first in affect within Ghidra starting at version 10.1
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolDatabaseAdapterV3.java